我想对这张桌子进行规范化,到目前为止我设法将它提升到2NF,但我对如何使它成为3NF非常困惑。主键以粗体显示。
1NF:约会( StaffNo ,DName,PatName, PatNum ,PatTelNo,ApptDateTime, RoomNo ,RoomExt)
2NF:
医生( StaffNo ,DName)
患者(PatName, PatNum ,PatTelNo)
房间( RoomNo ,RoomExt)
约会( StaffNo , PatNum , RoomNo ,ApptDateTime)
我真的不能在这里看到传递依赖。我怎么能把它变成3NF?
编辑:
我做了一些思考,但我想验证我的答案是否正确:
医生( StaffNo ,DName)
患者( PatNum ,PatTelNo)
PatientDetails( PatTelNo ,PatName)
房间( RoomNo ,RoomExt)
约会( StaffNo , PatNum , RoomNo ,ApptDateTime)
答案 0 :(得分:0)
我真的不能在这里看到传递依赖。我怎么能把它变成3NF?
我必须对功能依赖进行有根据的经验教训,但基于这种猜测,我会说你误解了关于规范化的几个方面。
你在“2NF”标题下有这些东西,但是
医生( StaffNo ,DName)可能在6NF,患者(PatName, PatNum ,PatTelNo)可能在5NF,
房间( RoomNo ,RoomExt)可能在6NF,
约会( StaffNo , PatNum , RoomNo ,ApptDateTime)可能在6NF。
看起来你对自己说,“我看不到部分密钥依赖,所以每个都在2NF。”但缺少部分密钥依赖并不意味着;这意味着关系在中至少 2NF。
5NF中的关系也是4NF,BCNF,3NF,2NF和1NF。您可以将关系规范化为2NF 且没有更高,然后归一化为3NF 且没有更高的想法是一种常见的误解。
您以后的编辑几乎肯定是一个错误。可以证明它是唯一的功能依赖是PatTelNo - > PatName,在一般情况下根本不是真的。
您不提供任何功能依赖,可能是因为您不知道它们是什么,或者您认为它们不重要,或者您认为可以基于属性名称进行规范化。但是如果不了解功能依赖性,就无法进行规范化;它们不仅重要,而且至关重要;和属性名称与它无关。