首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -在保留历史数据的同时重置累积值

SQL -在保留历史数据的同时重置累积值
EN

Stack Overflow用户
提问于 2011-12-20 00:27:18
回答 1查看 205关注 0票数 2

在我的大学实习期间,我被委托创建一个web应用程序来管理我工作的工厂的维护操作。我是一名工业工程师,只对数据库编程略知一二,所以这个问题对你来说可能听起来很容易,我道歉。

这就是情况:该项目是一个模具,需要经过多次操作后进行普通维护(数量巨大,我说的是瓷砖制造,维护频率可以假设为每年一次的平均值)。我建立了一个数据库和连接到它的web应用程序,我创建了一个带有模具列表和相对累积工作量的视图,以便该部门的负责人可以快速了解情况,并查看哪些模具需要维护,这很好用。

问题是他们“标记”了模具,我使用这个数字作为数据库中的行ID。在执行维护时,需要重置累积工作,但他希望保留有关工作操作的历史数据。

因此,我现在需要做的是,当一个项目被强制执行时,“告诉系统”,然后它必须在保留历史数据的同时重置累积值。

我创建的视图的值取自两个不同的表: Molds和UnmountingOperations。在后者中,有关于模具安装在哪台压力机上的信息,以及在该操作期间所做的总功。我认为解决方案是使用触发器,但我想问一下:

这样做的最佳实践是什么?

这里是由SqlServer管理studio.Sorry创建的脚本,但记录名称是意大利语。模具台:

代码语言:javascript
复制
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]

记者表:

代码语言:javascript
复制
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)是工作量驱动程序,代表平方米压制量:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-20 18:32:19

至于最佳实践,“避免像瘟疫一样触发”是我能给你的最好的建议。

在类似的情况下,我所做的是添加一个列,该列指示行现在已存档。我使用了一个名为ArchivedDtdatetime列。普通查询不包括此列,如下所示:

代码语言:javascript
复制
where  ArchivedDt is null

您甚至可以在视图中执行此操作。分层数据仍然存在,并且可以很容易地撤消特定的归档运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8564304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档