SQL Server:在表最佳实践中使用binary_checksum列

时间:2017-08-09 16:17:24

标签: sql sql-server

查看SQL Server数据库上的表定义已经注意到(1)binary_checksum列有时包含主键my_table_id,有时则不包括。什么是最佳做法? (2)那么update_byupdate_timestamp应该包含哪些内容呢?

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 个答案:

答案 0 :(得分:1)

这可能是一个意见问题,但这取决于如何使用校验和。如果主键是自动生成的(例如identitynewid()列),则将其包含在校验和中并不是很有趣。至少,您不能使用校验和来查找重复项。

如果主键是外部提供的数据键,则它既作为数据又作为主键。在这种情况下,将其包含在校验和中会更有意义。