查看SQL Server数据库上的表定义已经注意到(1)binary_checksum列有时包含主键my_table_id
,有时则不包括。什么是最佳做法?
(2)那么update_by
和update_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]))
)
答案 0 :(得分:1)
这可能是一个意见问题,但这取决于如何使用校验和。如果主键是自动生成的(例如identity
或newid()
列),则将其包含在校验和中并不是很有趣。至少,您不能使用校验和来查找重复项。
如果主键是外部提供的数据键,则它既作为数据又作为主键。在这种情况下,将其包含在校验和中会更有意义。