我想在3NF制作我的数据库我对一件事感到困惑。在下面的解释中,如果zip可以多次出现,我不明白Zip如何成为地址表的主键。在Student_Detail表中,reoccuring zip很好,但作为主键,它不会失去它的独特性吗?
第三范式(3NF)
第三范式适用于表的每个非素数属性必须依赖于主键,或者我们可以说,不应该存在非素数属性由另一个非素数属性确定的情况。因此,应该从表中删除此传递函数依赖项,并且表也必须采用Second Normal形式。例如,考虑一个包含以下字段的表。
Student_Detail表:
Student_id - Student_name - DOB - 街道 - 城市 - 州 - 邮编
在此表中,Student_id是主键,但街道,城市和州取决于Zip。 zip和其他字段之间的依赖关系称为传递依赖关系。因此,要应用3NF,我们需要将街道,城市和州移动到新表,并将Zip作为主键。
New Student_Detail表:
Student_id - Student_name - DOB - Zip
地址表:
Zip - Street - city - state
消除转移依赖的好处是,
减少了数据重复的数量。 实现了数据完整性。
实施例: http://www.studytonight.com/dbms/database-normalization.php
答案 0 :(得分:1)
我假设这是你的问题
如果zip可以多次出现,我不明白Zip如何成为地址表的主键。
并且你不理解的原因仅仅是因为Zip是一个不好的例子。
所有解释都是正确的。如果你可以推断任何"非素数"属性基于另一个"非素数"属性你有所谓的#34;传递依赖"。您将它们拉到另一个表格,并在其位置插入FK参考。
Zip不会出现多次,因为该属性是PK。我认为这只是一个不好的例子,尽管解释是正确的。尝试用不同的主题进行分析。
检查this示例是否以任何方式帮助您。