第一范式(1NF):
1、有关键字;
2、列不可分;
即不存在冗余数据,但实际情况实际分析。
第二范式(2NF):
当一个表里有多个字段作为主键时,非主键字段不能依赖于部分主键,即不能存在部分依赖。
符合第二范式的数据库表,消除了数据冗余、重新异常、插入异常和删除异常。
例如表结构如下:
aa_id aa_name host_id host_name user_name password
关键字<aa_id、host_id>
因为存在:
aa_name 依赖aa_id
host_name user_name password 依赖host_id
所以不满足2NF
拆分成三个表:
aa:aa_id aa_name
hosts:host_id host_name user_name password
installaa:aa_id host_id
第三范式(3NF):
在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:
关键字段 → 非关键字段x → 非关键字段y
例如单一关键字host_id 表:
host_id host_name room_number address phone
该表符合2NF
但host_id->room_number ->(address phone)
不符合3NF
拆成两个表:
host:host_id host_name room_number
room:room_number address phone