Триггеры и просмотры: что обеспечивает лучшее (строковое) управление версиями? - PullRequest
0 голосов
/ 20 сентября 2011

Мы используем «версионные» столбцы в нашей системе обработки заказов.

+----------------------------+
| ID | VERSION               |
+----+-----------------------+
| 1  | '09-20-2011 12:01 AM' |
+----+-----------------------+
| 1  | '09-20-2011 12:06 AM' |
+----+-----------------------+
| 2  | '09-21-2011 02:01 AM' |
+----+-----------------------+
| 2  | '09-22-2011 10:21 AM' |
+----+-----------------------+

Уникальный ключ - это составной ключ ID + VERSION.

Должны ли мы написать представление, что INNER JOINSвсе идентификаторы с совпадающим MAX (VERSION)?

Или мы должны сделать что-то подобное?

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbName].[Trigger_Example] ON [dbName].[Example]
AFTER INSERT, UPDATE
AS BEGIN
--Copy inserted data to Archived_Example
INSERT INTO Archived_Example 
    SELECT ID, CURRENT_TIMESTAMP AS VERSION FROM inserted
END

Какая из этих двух шкал лучше?Который окажется меньшей головной болью?

(Моя первая мысль: управление архивами при вставке сохранит «текущую» таблицу тонкой. Управление «текущей» таблицей как представлением ... то же самое«Разное»)

1 Ответ

1 голос
/ 21 сентября 2011

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

Хотя, если у вас уже есть триггер, я бы просто использовал его.

РЕДАКТИРОВАТЬ: действительно, если ваша таблица станет большой, триггер является единственным реалистичным вариантом.Если вы скажете только 20 объектов по 10 версий каждый, вы, вероятно, не заметите разницы в скорости.

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