数据库三大范式
1NF(第一范式):
第一范式(1NF)设置了一个有组织的数据库非常基本的规则:
定义所需要的数据项,因为它们成为在表中的列。放在一个表中的相关的数据项。
确保有数据没有重复的组。
确保有一个主键。
数据库表的每一列都是不可分割的基本数据项。 如“电话号码”这个属性可以继续被分割为“办公电话”、“手机号码”等属性,在第一范式的语义下不应该被作为单独的一列出现。
2NF(第二范式):
必须先满足第一范式。 数据库表中的每一行必须可以被唯一的区分,即每一行中有一个唯一标识将这行与其他行区分出来,这个唯一标识就是我们常说的主键。在2NF的语义下,所有非主键的字段都要依赖主键。比如在学生表中我们用学生id作为主键,那么当我们需要查询一个学生的时候,通过他的id号应该可以唯一地定位到这个学生,会并且只会查出一行。
3NF(第三范式):
表满足以下条件时就是第三范式:
满足第二范式
所有非主字段都是依赖于主键
必须先满足第二范式。非主键字段都与主键字段有直接依赖关系,不存在传递依赖。可以理解为非主键字段只依赖主键字段,而不依赖其它的非主键字段。
比如员工表的字段构成为:员工id(主键),姓名,性别,年龄,所属部门,部门经理姓名,部门电话。
这里所有的非主键字段并不是直接依赖于主键“员工id”, 可以看到“部门经理姓名”和“部门电话”这两个属性依赖于“所属部门”,而“所属部门”又依赖于主键“员工id”,这就是传递依赖,这里可将该员工表的表结构改成:员工id(主键),姓名,性别,年龄,部门名称
单独提出部门表结构为:部门名称(主键),部门经理id ,部门电话
参考博客:http://www.open-open.com/lib/view/open1404791721950.html