如何将此关系转换为第三范式(3NF)?

时间:2016-06-19 11:58:54

标签: database relational-database

我想对这张桌子进行规范化,到目前为止我设法将它提升到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)

1 个答案:

答案 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,在一般情况下根本不是真的。

您不提供任何功能依赖,可能是因为您不知道它们是什么,或者您认为它们不重要,或者您认为可以基于属性名称进行规范化。但是如果不了解功能依赖性,就无法进行规范化;它们不仅重要,而且至关重要;和属性名称与它无关。