在规范化的哪个步骤我应该包括新的主键列

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.