如果它在2NF 中,并且不包含任何传递性部分依赖性,则关系将在3NF 中。
3NF 用于减少数据重复,它还用于实现数据完整性。
如果非素数属性没有传递依赖关系,则关系必须是第三范式。
如果关系对于每个非平凡函数依赖关系X→Y
保持至少以下条件之一,则该关系处于第三范式。
X
是一把超级主键。Y
是主键属性,即Y
的每个元素是某个候选键的一部分。示例:
EMPLOYEE_DETAIL
表的结构和数据:
EMP_ID | EMP_NAME | EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|---|---|
222 | Harry | 201010 | UP | Noida |
333 | Stephan | 02228 | US | Boston |
444 | Lan | 60007 | US | Chicago |
555 | Katharine | 06389 | UK | Norwich |
666 | John | 462007 | MP | Bhopal |
上述表(EMPLOYEE_DETAIL
)中的超级键是:
{EMP_ID}, {EMP_ID, EMP_NAME}, {EMP_ID, EMP_NAME, EMP_ZIP}....等等
候选键:{EMP_ID}
非主属性 :在给定表中,除EMP_ID
之外的所有属性都是非主属性。
这里,EMP_STATE&EMP_CITY
依赖于EMP_ZIP
,而EMP_ZIP
依赖于EMP_ID
。 非主属性(EMP_STATE,EMP_CITY)
可传递地依赖于超级主键(EMP_ID
)。 它违反了第三范式的规则。
这就是为什么需要将EMP_CITY
和EMP_STATE
移动到新的<EMPLOYEE_ZIP>
表,并将EMP_ZIP
作为主键。
员工(EMPLOYEE
)表的结构和数据如下:
EMP_ID | EMP_NAME | EMP_ZIP |
---|---|---|
222 | Harry | 201010 |
333 | Stephan | 02228 |
444 | Lan | 60007 |
555 | Katharine | 06389 |
666 | John | 462007 |
员工邮编(EMPLOYEE_ZIP
)表的结构和数据如下:
EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|
201010 | UP | Noida |
02228 | US | Boston |
60007 | US | Chicago |
06389 | UK | Norwich |
462007 | MP | Bhopal |