gpt4 book ai didi

sql - Adventure Work 数据库中复合主键的概念

转载 作者:行者123 更新时间:2023-12-01 13:35:50 24 4
gpt4 key购买 nike

我想知道为什么 Adventure 工作数据库中的 EmailAddress 表使用复合主键(BusinessEntityID,EmailAddressID(Identity))?如果它与为两个字段设置聚簇索引有关,请告诉我复合主键如何物理存储(以何种顺序以及如何插入数据),我将不胜感激?

enter image description here

最佳答案

因为这样一来,同一个邮件地址可以被多个人使用,同一个人也可以使用多个邮件地址,也就是说,这使得人与邮件地址之间的关系变得多-对多。

如果只需要强制电子邮件地址属于某个人,那么将其设为外键和列 BusinessEntityID 就足够了不可为空。

更新:

这里涉及到2个表,PersonEmailAddress .

Person中的每条记录由 BusinessEntityID 标识.关联来自 Person 的记录在另一个表中有记录 T , 在此表中包含一列就足够了 T指的是BusinessEntityID .现在,如果我们需要确保 T 中的所有记录必须Person 中的某些记录相关联, 然后我们将在 T.BusinessEntityID 上放置一个外键约束并使其不可为空。如果在此之上,我们希望确保 T 中的每条记录必须与 Person 中的一条且仅一条记录关联, 然后我们可以在列 T.BusinessEntityID 上放置唯一性约束.

当我们制作 2 列时,AB作为表主键的一部分,我们告诉数据库,这两列的值一起对于该表中的所有记录必须是唯一的。它与每一列中的值和任何外键关系无关。

举例说明:

Person (BusinessEntityID, Name) and PK is BusinessEntityID
---------------
1 | John
---------------
2 | Jane
---------------
3 | Sales Team



EmailAddress (BusinessEntityID, EmailAddressID, EmailAddress) and PK is [Business EntityID, EmailAddressID] where EmailAddress is auto-incremented
--------------
1 | 1 | john@example.com
------------------------
1 | 2 | john@contoso.com
------------------------
2 | 3 | jane@example.com
------------------------
2 | 4 | jane@contoso.com
------------------------
1 | 5 | sales@example.com
------------------------
2 | 6 | sales@example.com
------------------------
3 | 7 | sales@example.com

可以将与上述类似的数据放入示例中的表格中。现在这里发生了什么?

有 3 个实体,John、Jane 和销售团队。

John 有 2 个个人电子邮件地址。 Jane 还有 2 个个人电子邮件地址。此外,电子邮件 address sales@example.com属于销售团队,也属于 John 和 Jane。

这是一个多对多的关系。

此外,如果 EmailAddress 中的组合键是集群的,则键将按照它们出现的顺序存储。阅读this获取更多信息。

关于sql - Adventure Work 数据库中复合主键的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612151/

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