MySQL数据库设计三大范式

1. 第一范式 1NF

设R为任一给定关系, 如果R中每个列与行的 交点处的取值都是不可再分的基本元素,则R为第一范式。

2. 第二范式 2NF 

由于第一范式冗余高,插入操作异常,删除操作异常,于是便有了第二范式。

设R为任一给定关系,若R为1NF, 且其所有非主属性都完全函数依赖于候选关键字,则R为第二范式。

在上表中,在没有拆分之前,学生上课信息表的主键为(SN0,CNO),但其中的课程信息却不依赖于SNO,所以要将学生上课信息表拆分为学生上课成绩表与课程表,这两张表通过课程编号CNO进行关联,即实现第二范式。

3. 第三范式 3NF

设R为任一给定关系,若R为2NF, 且其每一个非主属性都不传递函数依赖于候选关键字,则R为第三范式。
 
 
在上图未折分之前,通过课程编号CNO推出授课名称CTITLE,而通过授课名称CTITLE又可以分别推出授课老师INAME和授课地点IPLACE,这样就造成了传递依赖,所以要拆分成两张表,通过授课老师INAME关联起来,即实现第三范式。
 

4. 第三范式的特殊形式 BCNF

设R为任一给定关系,X、Y为其属性集,F为其函数依赖集,若R为3NF,且其F中所有函数依赖X→Y(Y 不属于X)中的X必包含候选关键字,则R为BCNF。

在上图未拆分之前,候选关键字为(SNO,CTITLE)和(SNO,INAME),同时在上表中可以通过授课老师INAME推断出课程名称CTITLE,但授课老师INAME却不包含候选关键字,所以要拆分成右边的形式,即满足BC范式。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章