触发器与视图:它提供更好的(行)版本控制?

时间:2011-09-20 13:45:39

标签: sql-server-2005 database-design triggers views

我们在订单处理系统中使用“版本化”列。

+----------------------------+
| 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

这两个尺度中哪一个最好?哪个会被证明不那么令人头疼?

(我的第一个想法是:在插入时管理档案会使“当前”表保持苗条。将“当前”表作为视图管理是......相同的?不同?)

1 个答案:

答案 0 :(得分:1)

我确信你怀疑,做一个视图会更耗费资源,但设置起来也要简单得多。如果你担心缩放,做一个触发器可能是“正确的”方式,但是开始时可能很痛苦。

虽然如果你已经有一个触发器工作,我会用它。

编辑:如果你的桌子变得很大,那么触发器是唯一现实的选择。如果你只想说20个对象,每个对象有10个版本,你可能不会注意到速度上的差异。