我们在订单处理系统中使用“版本化”列。
+----------------------------+
| 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。
我们是否应该写一个内部加入所有ID并且匹配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
这两个尺度中哪一个最好?哪个会被证明不那么令人头疼?
(我的第一个想法是:在插入时管理档案会使“当前”表保持苗条。将“当前”表作为视图管理是......相同的?不同?)
答案 0 :(得分:1)
我确信你怀疑,做一个视图会更耗费资源,但设置起来也要简单得多。如果你担心缩放,做一个触发器可能是“正确的”方式,但是开始时可能很痛苦。
虽然如果你已经有一个触发器工作,我会用它。
编辑:如果你的桌子变得很大,那么触发器是唯一现实的选择。如果你只想说20个对象,每个对象有10个版本,你可能不会注意到速度上的差异。