database-design - 多列主键?

标签 database-design

例如我有 2 个表,UsersUserRelations ,而且是一对多的关系。

对于 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/

相关文章:

sql - 从连接表计算运行平衡[SQL数据库设计]

database-design - 关于餐 table 设计的问题

sql - Postgres数据库设计——仪表盘功能

php - 在连接两个 session (博客和新闻)的评论表中插入引用

database-design - 如何设计对缓存友好的数据库表?

sql - 如果我要发布有关 Oracle SQL 查询性能的问题,我的问题中应该包括什么?

mysql - Nodejs中500000或更多记录的排名生成

database-design - 数据库设计 : track a vast number of attributes for each user. 如此之多,我可能会用完列(行存储空间)

database-design - 数据库架构问题

mysql - 如何在mysql数据库中生成序列号?