我已经阅读了一些似乎使这个问题重复的内容。但通读所有这些让我不确定。我希望根据下面的绝对示例得到答案,因为许多问题/答案在来回辩论中逐渐消失。
如果我有:
dbo.Book
--------
BookID PK int identity(1,1)
dbo.Author
----------
AuthorID PK int identity(1,1)
现在,对于简单的连接表,我有两种选择:
dbo.BookAuthor
--------------
BookID CPK and FK
AuthorID CPK and FK
以上将是两个 FK 上的复合/复合键,以及为两列设置 FK 关系 - 在删除时也使用 Cascade。
或者
dbo.BookAuthor
--------------
RecordID PK int identity(1,1)
BookID FK
AuthorID FK
BookID 和 AuthorID 上的外键关系,以及删除时的 Cascade。还要对 BookID 和 AuthorID 设置唯一约束。
我正在寻找一个简单的答案,说明为什么在上面的特定示例中一种方法比另一种方法更好。我正在阅读的答案非常详细,我正要确定一个复合键,但随后观看了一个视频,该示例使用了我的第一个示例一样的身份列。
似乎这个话题被撕成了两半,但我的直觉告诉我应该只使用复合键。
什么查询效率更高?似乎有一个 PK 标识列以及在两列上设置唯一约束,并且 FK 关系的成本会更高,即使是一点点。