MySql基础/08.数据库设计三大范式
和羞走,倚门回首,却把青梅嗅。
——李清照《点绛唇》
数据库设计
百度百科数据库设计定义:
1. 数据库规范化
- 好的数据库设计对数据的存储性能和后期的程序开发,都会产生重要的影响。建立科学的,规范的数据库就需要满足一些规则来优化数据的设计和存储,这些规则就称为范式。
1.1 范式
目前关系数据库有六种范式:
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 巴斯-科德范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF,又称完美范式)。
1.2 三大范式
- 数据库设计满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
1.2.1 第一范式:1NF
原子性:表中每列不可再拆分
1.2.2 第二范式:2NF
- 在1NF的基础上,消除部分依赖,一张表只描述一件事情。
- 非码属性必须完全依赖于码属性。
一、函数依赖
- A—>B,如果通过A属性(属性组),可以唯一确定B属性,那么称B依赖于A
- 学号—>姓名
二、完全函数依赖
- A—>B,如果A属性是一个属性组,则B属性值的确定依赖于A属性组中所有的属性值。
- (学号,课程名称)—> 分数。 B完全依赖于A
三、部分函数依赖
- A—>B,如果A属性是一个属性组,则B属性值的确定依赖于A属性组中的某一些属性值
- (学号,课程名称)—> 姓名 B部分依赖于A
四、传递函数依赖
- A—>B , B—>C,如果通过A属性组可以唯一确定B属性组的值,通过B属性组的值可以唯一确定C属性组的值,这时候,我们C传递依赖于A.
- 学号—>系名 系名—>系主任 ,系主任传递依赖于学号
五、码
- 如果一张表中,一个属性或者属性组,完全被其他所有的属性依赖,则称这个属性或者属性组为码。
- (学号,课程名称)就是当前表中的码。
六、主属性
- 码中所有属性就是主属性。
- ( 学号,课程名称 )
七、非主属性
- 码中不包含的属性就非主属性。
1.2.3 第三范式:3NF
在2NF的基础上,不产生传递依赖,表中每一列都直接依赖于主键。而不是通过其它列间接依赖于主键。