当使用多值属性规范化关系时,我们将其分解为具有主键字段和多值属性值的新关系。
我的问题是,新创建的属性的主键是什么?
如果我们使用与新主键相同的旧主键,由于我们使用多值属性中的值重复那里的值,我们如何在这里为主键字段提供唯一值?
我有一张表,上面有 customer_names、他们的爱好等等。有些人有不止一种爱好,所以现在它是一个多值属性。现在,即使我一次只与 customer_name 和一个爱好创建新关系,我如何添加有 3 个爱好的人的详细信息?
最佳答案
为新属性创建查找表时,不要重复查找表中的值。通常你会以 IDENTITY 列的形式添加一个人工 PK。
例如:您有一个包含一堆地址的表。同一个城市有很多地址。
您决定通过创建城市表来规范化。您只需将给定的城市添加到 City 表中一次。不是每个地址一次。
编辑:在您的评论中描述的场景中,您可以使用 Hobbies
和 CustomerID
创建一个 HobbyName
表。CustomerID
将是引用 Customers
表中的主键的外键。
编辑 2:正如 Beth 和我在评论中提到的,您似乎想要多对多的关系。
创建一个 Hobbies
表,每个唯一的爱好只有一行。如果两个或更多客户有相同的爱好,您仍然只在表中列出该爱好一次。使用 Identity 列创建一个 HobbyID
作为主键。
然后创建一个 CustomerHobby
表。它有 CustomerID
和 HobbyID
。两者都是分别引用 Customers
表和 Hobbies
表的主键的外键。
就是这样。
关于database - 归一化 UNF 到 1NF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33001159/