我有一张包含以下数据的表格。 我需要按照规范化规则对它们进行规范化,但我很困惑,我应该将规范化的哪一步引入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
答案 0 :(得分:1)
在此特定示例中,您甚至可以在进行规范化之前引入主键列。在添加主键(简化结构)后,您的表可能看起来像这样非规范化:
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实际上是一个客户,住在特定的位置。将它们放在一张桌子里。客户可以租用他们喜欢的任何东西......将他们租用的东西保存在不同的表格中:
客户
CustomerID CustomerName Address
---------- ------------- -------
1 Mr A Street 1
2 Mr B Street 2
2 Mr B Street 3
ObjectRental
CustomerID ObjectRented
---------- ------------
1 Obj1
1 Obj2
2 Obj3
2 Obj4
2 Obj2
在此阶段,您还可以将对象移动到自己的表中
物件
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中,您需要确保 - 松散地说 - 您的子表的主键与父表中的非主键无关。
答案 1 :(得分:0)
规范化不要求您引入代理键。它也不是要消除重复值。规范化的目的是避免多次记录相同的事实,因为同一事实的多个实例可能会不一致地更新并导致异常。
第一范式与其他形式略有不同,因为其目的是确保您的数据处于标量值的常规排列,以便系统地应用标准化。对于第一个普通表单,您需要确保每行的每个字段都包含一个值。 “Obj1,Obj2”看起来像多个值,所以你可能想从那里开始。然后,在继续执行更高级的常规表单之前写出您的函数依赖项。