【发布时间】:2011-12-19 16:27:18
【问题描述】:
在大学实习期间,我受命创建一个 Web 应用程序来管理我工作的工厂的维护操作。我是一名工业工程师,对数据库编程只有一点了解,所以也许这个问题会对你来说听起来很容易,我很抱歉。
情况是这样的:物品是模具,经过多次操作后需要普通维护(数量巨大,我说的是瓷砖制造,维护频率可以假设为每年一次的平均值) .我建立了一个数据库和与之连接的Web应用程序,并创建了一个带有模具列表和相对累积工作的视图,以便部门负责人可以快速了解情况并查看哪些模具需要维护,并且效果很好。
问题是他们“标记”了模具,我使用该数字作为数据库中的行 ID。进行维护时,需要重置累积工作,但他希望保留有关工作操作的历史数据。
因此,我现在需要做的是“告诉系统”当一个项目被维护时,它必须在保留历史数据的同时重置累积值。
我创建的视图的值取自 2 个不同的表:Molds 和 UnmountingOperations。在后者中,有关于模具安装在哪台压力机上以及该操作期间完成的总工作量的信息。我认为解决方案是使用触发器,但我想问一下:
这样做的最佳做法是什么?
这里是 SqlServer management studio 创建的脚本。抱歉,记录名称是意大利语。 模具表:
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
【问题讨论】:
-
请给我们看一些表定义。关于业务规则:模具可以在没有维修的情况下卸下+安装吗?
-
请提供表定义和一些代码。解释中是否缺少某些内容。
-
抱歉,这是我的第一篇文章。 @wildplasser 是的,模具可以在维修前多次安装-卸载
-
不重置计数器似乎是合乎逻辑的。只需在每次服务中记录{mold_id,date,mileage, ...},然后让mold->mileage 愉快地打勾。 [为您的汽车更换机油时,车库是否会将里程数归零?]
-
@wildplasser 我的问题是,一旦模具维修完毕,对于相同数量的材料平方米,它会再次工作。使用此应用程序的人需要查看自上次服务以来的里程。我可以做的是记录服务日期,然后在应用程序中显示的视图中仅总结自该日期以来的工作量(也许这就是你的意思,如果是这样,我很抱歉,我没有明白)。我怎样才能做到这一点?