2013-02-11 123 views
1

我正在使用SQL Server 2012,並且我想創建一個「更改」表 - 當第二個表的列值發生更改時,它將使用其他表中的數據填充。使用「rowversion」作爲主鍵列

我正在添加到「更改」表「datatime2」和「rowversion」列以追蹤何時進行更改。

可以使用「rowversion」作爲主鍵嗎?

我已經閱讀here,如果當前行被更新,那麼它會被更改,這就是爲什麼它不適合「主鍵」使外鍵無效。無論如何,如果它不會被用作外鍵,並且「更改」表的行將永遠不會被更新(只有新行將被插入),那麼可以使用「rowversion」作爲PK或I應該使用額外的列?

+0

請你能指定你正在使用的數據庫。你能否也請解釋你的邏輯的上下文......這是什麼數據庫被用於。即如果這是針對數據倉庫的話,那麼這絕對是錯誤的方式。 – SQLGuru 2013-02-11 08:42:14

+0

這個想法是當某個表中的某個日期因DML操作而改變時,舊數據將被插入到我的「Changes」表中,所以如果我需要查看如何或何時在主表中進行更改。 – gotqn 2013-02-11 08:47:18

+0

你要麼必須實現某種緩慢變化的維度,要麼使用觸發器。我更喜歡SCD的第一個選項,但這是一個涉及到的實施過程。除此之外,爲什麼要使用行版本而不是物理主鍵? – SQLGuru 2013-02-11 08:55:37

回答

0

一些好的信息here

的MSDN頁面仔細閱讀還表明,如果SELECT INTO語句使用不當重複的rowversion值是可能的。有什麼要注意的地方。

我會堅持原始數據中的身份字段,將其帶入具有其自己的身份字段的更改跟蹤表中。