当使用多值属性规范化关系时,我们将其分解为具有主键字段和多值属性值的新关系。

我的问题是,新创建的属性的主键是什么?

如果我们使用与新主键相同的旧主键,由于我们使用多值属性中的值重复那里的值,我们如何在这里为主键字段提供唯一值?

我有一张表,上面有 customer_names、他们的爱好等等。有些人有不止一种爱好,所以现在它是一个多值属性。现在,即使我一次只与 customer_name 和一个爱好创建新关系,我如何添加有 3 个爱好的人的详细信息?

最佳答案

为新属性创建查找表时,不要重复查找表中的值。通常你会以 IDENTITY 列的形式添加一个人工 PK。

例如:您有一个包含一堆地址的表。同一个城市有很多地址。

您决定通过创建城市表来规范化。您只需将给定的城市添加到 City 表中一次。不是每个地址一次。

编辑:在您的评论中描述的场景中,您可以使用 HobbiesCustomerID 创建一个 HobbyName 表。
CustomerID 将是引用 Customers 表中的主键的外键。

编辑 2:正如 Beth 和我在评论中提到的,您似乎想要多对多的关系。

创建一个 Hobbies 表,每个唯一的爱好只有一行。如果两个或更多客户有相同的爱好,您仍然只在表中列出该爱好一次。使用 Identity 列创建一个 HobbyID 作为主键。

然后创建一个 CustomerHobby 表。它有 CustomerIDHobbyID 。两者都是分别引用 Customers 表和 Hobbies 表的主键的外键。

就是这样。

关于database - 归一化 UNF 到 1NF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33001159/

10-11 22:37