例如,我有2个表,User和UserRelations,它是一对多的关系.
对于UserRelations表,我可以拥有一个标识列并使其成为主键:
[RelationID] [int] IDENTITY(1,1) NOT NULL,[UserID] [int] NOT NULL,[TargetID] [int] NOT NULL,
或者我可以设计表格如下:
[UserID] [int] NOT NULL,
并使UserID TargetID成为主键.
我的问题是每种设计的含义是什么,这对性能更好?
解决方法
如果您使用以前的设计,使用多余的标识列,则不会限制插入具有相同UserID和TargetID的两行.您必须在其他两列上创建UNIQUE约束,无论如何都会创建复合索引.
另一方面,一些框架(例如Rails)坚持认为每个表都有一个名为id的代理键,因此“正确”的设计可能不起作用.这取决于您使用此表设计编写的代码.