gpt4 book ai didi

sql-server - 在连接表中,我应该使用主键和唯一约束,还是复合/复合键?

转载 作者:行者123 更新时间:2023-12-02 21:30:01 25 4
gpt4 key购买 nike

我已经阅读了一些似乎使这个问题重复的内容。但读完所有这些让我感到不确定。我希望根据下面的绝对示例得到答案,因为许多问题/答案会陷入来回争论。

如果我有:

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 关系 - 也在删除时使用级联。

或者

dbo.BookAuthor
--------------
RecordID PK int identity(1,1)
BookID FK
AuthorID FK

BookID 和 AuthorID 上的外键关系,以及删除时的级联。还对 BookID 和 AuthorID 设置唯一约束。

我正在寻找一个简单的答案来解释为什么在上述特定示例中一种方法比另一种方法更好。我正在阅读的答案非常详细,我正要确定复合键,但后来观看了一个视频,其中的示例使用了 Identity 列,就像我的第一个示例一样。

这个主题似乎有点被撕成两半,但我的直觉告诉我应该使用复合键。

什么查询效率更高?似乎拥有一个 PK 身份列并在两列上设置唯一约束,并且 FK 关系的成本会更高,即使是一点点。

最佳答案

这是我在大学时的数据库类(class)中一直记得的事情。我们正在讨论教科书上有关“实体设计”的部分,它正在谈论连接表......我们称它们为相交表或相交关系。那天我在类里面确实很专心。这位教授说,根据他的经验,多对多联结表几乎总是表明存在未识别的缺失实体。这些实体几乎总是以自己的数据结束。

我们获得了 StudentCourse 实体的示例。对于学生来说,要选修一门类(class),你需要将两者结合起来。您实际上拥有的是一个新实体:Enrollment。在这种情况下,附加数据可能是学分类型(审核与常规)或最终成绩等。

我至今还记得这个建议……但我并不总是遵循它。在这种情况下,我要做的是停止,并确保就该问题回到利益相关者那里,并与他们一起研究我们在这个交汇处可能仍然缺少哪些数据点。如果我们真的找不到任何东西,那么我将使用复合键。当我们找到数据时,我们会想到一个更好的名称,并且它会得到一个代理键。

2020年更新
我仍然保留着那本教科书,令人惊奇的是,它和这个问题在几个小时内就引起了我的注意。出于好奇,这是本书第 7 版的第 5 章第 6 节:

https://www.amazon.com/Database-Processing-Fundamentals-Design-Implementation-dp-9332549958/dp/9332549958/

关于sql-server - 在连接表中,我应该使用主键和唯一约束,还是复合/复合键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com