在规范化的哪个步骤我应该包括新的主键列
At which Step of normalization i should include the new Primary Key Column
我有一个包含以下数据的 table。 我需要按照规范化规则对它们进行规范化,但我很困惑,在规范化的哪一步我应该将 CustomerId 作为新的 PrimaryKey 列引入。
CustomerName Address ObjectRented objectCatetory ------------------------------------------------------- Mr A Street 1 Obj1,Obj2 Cat1,Cat1 Mr B Street 2 Obj3,Obj4 Cat2,Cat2 MR B Street 3 Obj2 Cat1
规范化不需要您引入代理键。这也不是要消除重复值。规范化的目的是避免多次记录同一个事实,因为同一个事实的多个实例可能会更新不一致并导致异常。
第一范式与其他范式略有不同,因为它的目的是确保您的数据按标量值的规则排列,以便可以系统地应用规范化。对于第一范式,您需要确保每一行的每个字段都包含一个值。 "Obj1,Obj2" 看起来像多个值,所以您可能想从那里开始。然后,在继续更高范式之前写出你的函数依赖关系。
在此特定示例中,您甚至可以在进行规范化之前引入主键列。添加主键(简化结构)后,您的 table 可能看起来像这样非规范化:
CustomerID CustomerName Address ObjectRented
---------- ------------- ------- ------------
1 Mr A Street 1 Obj1,Obj2
2 Mr B Street 2 Obj3,Obj4
2 Mr B Street 3 Obj2
我写这篇文章的速度相当快,所以请务必阅读其他关于范式的答案和博客。
1NF - 删除重复组
CustomerID CustomerName Address ObjectRented
---------- ------------- ------- ------------
1 Mr A Street 1 Obj1
1 Mr A Street 1 Obj2
2 Mr B Street 2 Obj3
2 Mr B Street 2 Obj4
2 Mr B Street 3 Obj2
2NF - 移除部分依赖
CustomerID 实际上是一位客户,居住在特定地点。将它们放在一个 table 中。客户可以租任何他们喜欢的东西...把他们租的任何东西放在不同的 table 中,像这样:
客户
CustomerID CustomerName Address
---------- ------------- -------
1 Mr A Street 1
2 Mr B Street 2
2 Mr B Street 3
物件租赁
CustomerID ObjectRented
---------- ------------
1 Obj1
1 Obj2
2 Obj3
2 Obj4
2 Obj2
在此阶段,您还可以将 Objects 移动到它自己的 table
Objects
ObjectID ObjectName
-------- ----------
1 Obj1
2 Obj2
3 Obj3
4 Obj4
ObjectRental 变为
CustomerID ObjectRentedID
---------- ------------
1 1
1 2
2 3
2 4
2 2
至此我相信你已经自动获得了3NF。在 3NF 中,您需要确保 - 松散地说 - child table 的主键的 none 与 [=47= 中的 non-primary 键相关联] table.