例如我有 2 个表,Users
和 UserRelations
,而且是一对多的关系。
对于 UserRelations
表,我可以有一个标识列并将其设为主键:
[RelationID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[TargetID] [int] NOT NULL,
或者我可以像这样设计表格:
[UserID] [int] NOT NULL,
[TargetID] [int] NOT NULL,
并制作
UserID
+ TargetID
主键。我的问题是每种设计都有什么含义,哪个对性能更好?
最佳答案
如果您使用前一种设计,带有多余的标识列,则对于插入具有相同 UserID 和 TargetID 的两行没有任何限制。您必须创建一个 UNIQUE
对其他两列的约束,无论如何都会创建复合索引。
另一方面,一些框架(例如 Rails)坚持每个表都有一个名为 id
的代理键。所以“正确”的设计可能不起作用。这取决于您正在编写什么代码来使用此表设计。
关于database-design - 多列主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350950/