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