2017-08-09 18 views
0

尋找一個SQL Server數據庫上表定義BINARY_CHECKSUM列已經注意到了(1)BINARY_CHECKSUM列有時包括主鍵my_table_id,有時沒有。最佳做法是什麼? (2)另外怎麼樣update_byupdate_timestamp它們應當包括或不?的SQL Server:用桌子上的最佳實踐

CREATE TABLE [dbo].[my_table] (
     [my_table_id] SMALLINT NOT NULL PRIMARY KEY, 
     [a] SMALLINT NOT NULL, 
     [b] CHAR(25) NOT NULL, 
     [update_timestamp] DATETIME NOT NULL DEFAULT getdate(), 
     [update_by] CHAR(8) NOT NULL, 
     [my_checksum_col] AS (binary_checksum([a], [g], [update_by], [update_timestamp])) 
) 

VS

CREATE TABLE [dbo].[my_table] (
     [my_table_id] SMALLINT NOT NULL PRIMARY KEY, 
     [a] SMALLINT NOT NULL, 
     [b] CHAR(25) NOT NULL, 
     [update_timestamp] DATETIME NOT NULL DEFAULT getdate(), 
     [update_by] CHAR(8) NOT NULL, 
     [my_checksum_col] AS (binary_checksum([my_table_id],[a], [g], [update_by], [update_timestamp])) 
) 

回答

1

這可能是見仁見智,但它取決於校驗將如何被使用。如果主鍵是自動生成的(例如,一個或identitynewid()),然後把它放置在校驗和不很有趣。至少,您不能使用校驗和查找重複項。

如果主鍵是設置在外部,那麼它被作爲數據和作爲主鍵發揮功能的數據密鑰。在那種情況下,將它包括在校驗和中更有意義。

+0

怎麼樣update_by和update_timestamp – otc

+0

@otc。 。 。幾乎相同的推理適用。如果您正在使用校驗和檢查重複,那麼你必須決定是否最近更新的元數據的目的。這很可能不是。 –