在我的大学实习期间,我被委托创建一个web应用程序来管理我工作的工厂的维护操作。我是一名工业工程师,只对数据库编程略知一二,所以这个问题对你来说可能听起来很容易,我道歉。
这就是情况:该项目是一个模具,需要经过多次操作后进行普通维护(数量巨大,我说的是瓷砖制造,维护频率可以假设为每年一次的平均值)。我建立了一个数据库和连接到它的web应用程序,我创建了一个带有模具列表和相对累积工作量的视图,以便该部门的负责人可以快速了解情况,并查看哪些模具需要维护,这很好用。
问题是他们“标记”了模具,我使用这个数字作为数据库中的行ID。在执行维护时,需要重置累积工作,但他希望保留有关工作操作的历史数据。
因此,我现在需要做的是,当一个项目被强制执行时,“告诉系统”,然后它必须在保留历史数据的同时重置累积值。
我创建的视图的值取自两个不同的表: Molds和UnmountingOperations。在后者中,有关于模具安装在哪台压力机上的信息,以及在该操作期间所做的总功。我认为解决方案是使用触发器,但我想问一下:
这样做的最佳实践是什么?
这里是由SqlServer管理studio.Sorry创建的脚本,但记录名称是意大利语。模具台:
CREATE TABLE [dbo].[Stampo](
[ID] [int] NOT NULL,
[Formato] [nchar](10) NOT NULL,
[n∞ uscite] [int] NULL,
[Spessore] [nchar](10) NULL,
[Descrizione] [nvarchar](max) NULL,
[Fornitore] [nvarchar](50) NULL,
CONSTRAINT [PK_Stampo] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]记者表:
CREATE TABLE [dbo].[Pressa](
[Numero] [int] NOT NULL,
[Modello] [nchar](10) NULL,
CONSTRAINT [PK_Pressa] PRIMARY KEY CLUSTERED
(
[Numero] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]拆装操作协会模压机(Mq_pressati)是工作量驱动程序,代表平方米压制量:
CREATE TABLE [dbo].[SmontaggioStampi](
[NumeroPressa] [int] NOT NULL,
[IDStampo] [int] NOT NULL,
[DataSmontaggio] [datetime] NOT NULL,
[mq_pressati] [int] NOT NULL,
[Descrizione] [nvarchar](max) NULL,
CONSTRAINT [PK_Produzione presse] PRIMARY KEY CLUSTERED
(
[NumeroPressa] ASC,
[IDStampo] ASC,
[DataSmontaggio] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[SmontaggioStampi] WITH CHECK ADD CONSTRAINT [FK_SmontaggioStampi_Pressa] FOREIGN KEY([NumeroPressa])
REFERENCES [dbo].[Pressa] ([Numero])
GO
ALTER TABLE [dbo].[SmontaggioStampi] CHECK CONSTRAINT [FK_SmontaggioStampi_Pressa]
GO
ALTER TABLE [dbo].[SmontaggioStampi] WITH CHECK ADD CONSTRAINT [FK_SmontaggioStampi_Stampo] FOREIGN KEY([IDStampo])
REFERENCES [dbo].[Stampo] ([ID])
GO
ALTER TABLE [dbo].[SmontaggioStampi] CHECK CONSTRAINT [FK_SmontaggioStampi_Stampo]
GO发布于 2011-12-20 18:32:19
至于最佳实践,“避免像瘟疫一样触发”是我能给你的最好的建议。
在类似的情况下,我所做的是添加一个列,该列指示行现在已存档。我使用了一个名为ArchivedDt的datetime列。普通查询不包括此列,如下所示:
where ArchivedDt is null您甚至可以在视图中执行此操作。分层数据仍然存在,并且可以很容易地撤消特定的归档运行。
https://stackoverflow.com/questions/8564304
复制相似问题