我有一个表定义为:
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),但由于我从未在任何地方看到这样做,我想知道它们是否对这种方法有所帮助。
答案 0 :(得分:2)
可以为null的列不符合pk的一部分,因为pk也必须是唯一的。
PK也不应该有意义,因为值的含义可能会改变。
表A和B有关系吗?查看关系数据模型。设计中可能存在错误。
OrderID应该是唯一的,因此足以用于PK。