关系型数据库三范式[转]

1、概念

    关系模型满足的确定约束条件称为范式。

    根据满足约束条件的级别不同,范式由低到高分为:1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BNF(BC范式)、4NF(第四范式),不同级别的范式性质不同。

2、第一范式(1NF)

    1NF是最低的规范化要求。如果关系R中所有属性的值域都是简单域,其元素(即属性)不可再分,是属性项而不是属性组,那么关系模型R是满足第一范式的。通俗点也就是说一张关系表中,所有的字段的值都必须是不可再拆分的。例如:表1所示结构就不满足1NF的定义。

                                                                                      表1  不满足1NF的结构

职工工号 职工姓名 住址
9527 周星星 XXX省XXX市XXX区XXX街道
    表1不满足第一范式,分解后满足第一范式如表2所示。

                                                                                      表2  满足1NF的结构

职工工号 职工姓名 所在省 所在市 所在区 详细地址
9527 周星星 XXX省 XXX市 XXX区 XXX街道XXX号
3、第二范式(2NF)

    如果一个关系 R 属于 1NF,且所有的非主属性都完全依赖于主属性,则称之为第二范式(也就是除了主键以外的其他字段,都必须完全依赖于主键)。例如表3所示结构就不满足第二范式。

                                                                                      表3  不满足第二范式的结构

学号 姓名 课程号 课程名
S0001 周星星 N0001 如来神掌
    表3的结构满足1NF,其中“学号”和“课程号”为主键,但是“课程名称”只依赖于“课程号”,即只依赖主键的一部分(部分依赖),所以不符合2NF。可以将表3作拆分,得到如下表4、表5的结构:

                                                                                                    表4

学号 姓名
S0001 周星星
                                                                                                    表5

课程号 课程名
N0001 如来神掌
4、第三范式(3NF)

    如果一个关系 R 属于 2NF,且每个非主属性不传递依赖于主属性,这种关系是 3NF。为了理解这种关系,将以表6中的字段作为讲解。

                                                                                                    表6

职工姓名 薪资级别 薪资(元)
周星星 B 8000
     表6中所示,“职工姓名”为主键,其他属性都完全依赖于主键;但是“薪资”会根据“薪资级别”的变化而变化,即确定了“职工姓名”,就确定了姓名为“周星星”这名职工的“薪资级别”,确定了“薪资级别”,才能确定具体的“薪资”;所以除主键外其他字段存在传递依赖,不满足3NF。将表6进行拆分来满足3NF,如下表7、8。

                                                                                                    表7

职工姓名 薪资级别
周星星 B
                                                                                                    表8

薪资级别 薪资(元)
B 8000
 
————————————————
原文链接:https://blog.csdn.net/u012066806/java/article/details/84331417