SQL - сбросить накопленное значение при сохранении исторических данных - PullRequest
2 голосов
/ 19 декабря 2011

Во время стажировки в университете мне было поручено создать веб-приложение для управления обслуживанием на заводе, на котором я работаю. Я инженер-технолог, обладающий лишь небольшими знаниями в области программирования баз данных, поэтому, возможно, этот вопрос поможет звучит легко для вас, я прошу прощения.

Такова ситуация: деталь представляет собой форму, которая нуждается в обычном обслуживании после ряда операций (огромное количество, я говорю о производстве плитки, и частота обслуживания может быть принята как среднее значение один раз в год) , Я настроил базу данных и подключенное к ней веб-приложение и создал представление со списком пресс-форм и соответствующей кумулятивной работой, чтобы ответственный отдел мог быстро оценить ситуацию и увидеть, какие пресс-формы нуждаются в обслуживании, и это прекрасно работает.

Проблема в том, что они «пометили» формы, и я использовал это число в качестве идентификатора строки в базе данных. Когда обслуживание выполняется, накопительная работа должна быть сброшена, но он хочет сохранить исторические данные о рабочих операциях.

Таким образом, теперь мне нужно «сообщить системе», когда элемент обслуживается, затем ему необходимо сбросить совокупное значение, сохранив исторические данные.

Значения для созданного мною представления взяты из 2 разных таблиц: Molds и UnmountingOperations. В последней есть информация о том, на каком прессе была установлена ​​пресс-форма, и об общей работе, выполненной во время этой операции. Я думаю, что решение заключается в использовании триггеров, но я хотел бы спросить:

Какая лучшая практика для этого?

вот сценарии, созданные управляющей студией SqlServer. Извините, но названия записей на итальянском. стол прессформы:

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

1 Ответ

0 голосов
/ 20 декабря 2011

Что касается лучших практик, «избегайте триггеров, таких как чума», - это лучший совет, который я могу вам дать.

Что я сделал в аналогичной ситуации, так это добавление столбца, который указывает, что строкасейчас в архиве.Я использовал datetime столбец с именем ArchivedDt.Обычные запросы исключают этот столбец, например:

where  ArchivedDt is null

Вы даже можете сделать это в представлении.Иерархические данные все еще там, и конкретный прогон архива можно легко отменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...