我正在尝试规范化下表。我想从UNF表格转到3NF表格。我想知道,你在1NF阶段做了什么?它说它是删除重复列或组的地方(例如ManagerID,ManagerName)。这被认为是重复的,因为它会导致相同的数据。
非标准化数据表包含以下列 CustomerRental(CustNo,的CustName,PropNo,PAddress,RentStart,RentFinish,出租,OwnerNo,ONAME)
没有重复的列/字段,每个单元格都有一个值,但没有主键。我在表中看到的功能依赖是:
{CustNo}->{Cname}
{PropNo}->{Paddress,RentStart,RentFinish,Rent,OwnerNo,Oname}
{CustNo,PropNo}->
{Paddress,RentStart,RentFinish,Rent,OwnerNo,OName,CustName}
{OwnerNo,PropNo}->{Rent,Paddress,Oname,RentInfo}
我选择的主键是复合键,CustNo + PropNo。由于它有一个主键,表格是1NF形式,对吗?这就是我的想法,但答案从表中排除了CustNo和CustName。他们在自己的桌子上。
从上面,我将它标准化为2NF 。在此阶段,您应该确保所有非素数属性完全依赖于主键。不是这种情况。这些是表中的功能依赖:
{OwnerNo}->{Oname}
{CustNo}->{CustName}
{PropNo}->{Paddress,Rent,OwnerNo,Oname}
我将这些值移出表格,以2NF形式创建三个新表:
Customers(CustNo(PK),CustName)
Property(PropNo(PK),Paddress,City,Rent,OwnerNo,OwnerName)
Rentals(RentalNo(PK),CustNo,OwnerNo,PropNo,RentStart,RentFinish)
现在主表格,租借,是2NF格式。它有一个主键,RentalNo,每个非主要属性都取决于它。
我认为它存在传递依赖。您可以通过PropNo找到OwnerNo。因此,为了使其符合3NF规则,您必须将OwnerNo移动到其自己的表中以创建这些表:
Customers(CustNo,CustName)
Property(PropNo,Paddress,City,Rent)
Owners(OwnerNo,OwnerName)
Rentals(RentalNo,CustNo,PropNo,RentStart,RentFinish)
这是对的吗?我读到在1NF阶段,你应该删除重复的列(例如OwnerNo,OwnerName)。这是真的?为什么或为什么不呢?
显示我的表的图片在这里: Normalized Tables
答案 0 :(得分:1)
我们不会通过它与1NF之间的较低NF来规范化NF(正常形式)。我们为我们想要的NF使用经过验证的算法。在已发表的学术教科书中找到一个。 (如果没有描述你被告知要使用的参考文献,请找一个它所引用的参考文献。)
密切注意条款和步骤。细节很重要。例如,您需要知道所有包含的FD(功能依赖性),而不仅仅是其中的一部分。例如,每当一些FD持有时,阿姆斯特朗公理所产生的所有公义都成立。例如PK(主键)是无关紧要的,CK(候选键)很重要。例如,每张桌子都有一张CK。例如,归一化到更高的NF不会改变列名。所以你的问题已经没有反映出正确的过程。
你真的需要阅读&引用您被告知要使用的参考文件,以便到达" 1NF",因为"1NF" is in the eye of the beholder。归一化为更高的NF适用于任何关系。