1NF:数据库表的每一列都是不可分割的基本数据项。
分析:没有多个表示同一属性的列;某一列的值不能为集合。几不能将一对多关系表示为一个表的多个属性或者一个属性的多个值。
解决:创建新表,将“1”作为新表的外键。
举例:
|
| person
|
|
|
id
| name
| hobby1
| hobby1
| bobby3
|
1
| mark
| playing football
| running
| swimming
|
或
| person
|
|
id
| name
| hobbies
|
1
| mark
| playing football,running,awimming
|
2NF:符合1NF;存在主键,并且不存在部分函数依赖(不存在依赖主键的一部分的列)
分析:存在组合键的情况下,某些列只依赖于组合主键的其中一部分,则不合符2NF。
解决:将涉及部分函数依赖的列移出旧表,保存在新表。或使用人工主键代替组合键。
举例:
| employee
|
|
department
| name
| managerOfDepartment
|
开发部门
| mark
| Jenny
|
3NF:符合2NF;并且不存在传递依赖。
分析:同一个表中A列依赖B列,B列依赖C列。
解决:将涉及传递函数依赖的列移出旧表,保存在新表。
举例:
| customer |
|
|
name
| phone
| address
| zipCode
|
mark
| 1273283
| 广州×××
| 510000
|