我有一个定义为:
OrderID bigint NOT NULL, IDA varchar(50) NULL, IDB bigint NULL, [ ... 50 other non relevant columns ...]
这个表的自然主键是(OrderID,IDA,IDB),但这是不可能的,因为IDA和IDB可以为null(它们都可以为null,但它们永远不会同时定义)。现在我对这3列有一个唯一的约束。
现在,我需要一个主键来启用事务复制,我面临两个选择:
第二个替代的接缝清洁剂,如我的PK将是有意义的,是可行的(见 msdn link
可以为null的列不能作为主键的一部分,因为主键也必须是唯一的。
而且PK永远不应该有意义,因为值的含义可能会改变。
OrderID应该是唯一的,因此对于PK来说足够了。