📜  DBMS 3NF

📅  最后修改于: 2020-12-12 03:27:46             🧑  作者: Mango

第三范式(3NF)

  • 如果一个关系在2NF中并且不包含任何传递性部分依赖关系,则它将在3NF中。
  • 3NF用于减少数据重复。它还用于实现数据完整性。
  • 如果没有非素数属性的传递依存关系,则该关系必须为第三范式。

如果关系对于每个非平凡函数依赖项X→Y至少满足以下条件之一,则该关系为第三范式。

    • X是超级键。
    • Y是素数属性,即Y的每个元素都是某个候选键的一部分。

例:

EMPLOYEE_DETAIL表:

EMP_ID EMP_NAME EMP_ZIP EMP_STATE EMP_CITY
222 哈里 201010 向上 野田
333 史蒂芬 02228 我们 波斯顿
444 60007 我们 芝加哥
555 凯瑟琳 06389 英国 诺威奇
666 约翰 462007 MP 博帕尔

上表中的超级键:

  1. {EMP_ID},{EMP_ID,EMP_NAME},{EMP_ID,EMP_NAME,EMP_ZIP} …等等

候选密钥: {EMP_ID}

非主要属性:在给定表中,除EMP_ID之外的所有属性均为非主要属性。

在此,依赖于EMP_ZIP的EMP_STATE和EMP_CITY和依赖于EMP_ID的EMP_ZIP。非素数属性(EMP_STATE,EMP_CITY)可传递地依赖于超级键(EMP_ID)。它违反了第三范式的规则。

这就是为什么我们需要将EMP_CITY和EMP_STATE移到新的表中,并以EMP_ZIP作为主键。

员工表:

EMP_ID EMP_NAME EMP_ZIP
222 哈里 201010
333 史蒂芬 02228
444 60007
555 凯瑟琳 06389
666 约翰 462007

EMPLOYEE_ZIP表:

EMP_ZIP EMP_STATE EMP_CITY
201010 向上 野田
02228 我们 波斯顿
60007 我们 芝加哥
06389 英国 诺威奇
462007 MP 博帕尔