数据依赖、四种范式、投影分解法、关系模式规范化 | 关系数据库

目录

一、什么是数据依赖?

完全函数依赖

部分函数依赖

二、码

三、范式

        1.第一范式(1NF)

        2.第二范式(2NF)

        3.第三范式(3NF)

        4.BC范式(BCNF)-- 也叫作修正的第三范式

四、关系模式规范化总结


什么是数据依赖?

如下左图,这样的一张关系表如果一个系八百个人,同一个系主任名字可能被重复八百遍!所以为了避免冗余,我们可以使用右图的关系依赖:

学号确定了所在系,所在的系对应其系主任。学号和课程序号加起来就确定了某人的成绩啦(右图:函数依赖)

什么是规范化理论?

找出关系模式中不合适的数据依赖,消除它们,可以在不同程度上解决插入异常,删除异常、更新异常和数据冗余问题。就是设计合适的数据库逻辑模式。
 

函数依赖

  • 平凡函数依赖
  • 非平凡函数依赖

完全函数依赖

在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。

:成绩表(学号,课程号,成绩)关系中,

完全函数依赖:(学号,课程号)→ 成绩,学号 -\→ 成绩,课程号 -\→ 成绩,所以(学号,课程号)→ 成绩 是完全函数依赖

部分函数依赖

例1在关系模式Student中,因为Sno不能函数决定Grade,Cno也不能函数决定Grade,但(Sno,Cno)可以唯一地函数决定Grade,所以(Sno,Cno)→Grade是完全函数依赖。因为Sno可以函数决定Sage,所以(Sno,Cno)→Sage是部分函数依赖。

传递函数依赖:这样婶儿哒↓↓↓

 

详见:数据库系统概论 | 第二章:关系数据库

 

范式

符合某一种级别的关系模式的集合

 

第一范式(1NF)

一个关系所有属性都是不可分的基本数据项

期初余额本期发生额期末余额
借方贷方借方贷方借方贷方
122355355635
1344355343535566
24524535565353

 如上图就不是第一范式:期初余额、本期发生额、期末余额都可分

第一范式是对关系模式最起码的要求,不满足第一范式的数据库模式不能称为关系数据模式。

 

第二范式(2NF)

若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF

  • 不符合第二范式的例子

货物类型货物ID货物名称注意事项
瓷碗1白色瓷碗易碎品
瓷碗2青花瓷碗易碎品
瓷碗3雕花瓷碗易碎品
三合板1普通三合板易燃物品,注意防火

在该表中主键为(货物类型,货物ID),货物名称字段完全依赖于这个主键,换句话说,货物的名称完全是取决于这个主键的值的。但注意事项”这一列,仅依赖于一个主键中”货物类型“这一个属性简单地说,第二范式要求每个非主属性完全依赖于主键,而不是仅依赖于其中一部分属性。

那么,既然表中存在一个对主键不是完全依赖的字段,那么我们就可以确定,该表不符合第二范式。

  • 符合第二范式的例子

货物类型货物ID货物名称
瓷碗1白色瓷碗
瓷碗2青花瓷碗
瓷碗3雕花瓷碗
三合板1普通三合板

在该表中的主键依然是(货物类型、货物ID),非主键字段“货物名称”,完全依赖于这两个主键,那么我们就可以说,该表是符合数据库第二范式的。

 

例:不符合第二范式的可以使用投影分解法,把关系模式分解为两个(或多个)关系模式,消除部分函数依赖:

 

第三范式(3NF)

在第二范式的基础上消除传递依赖,就是第三范式。

  • 不符合第三范式的例子

这样的传递依赖使Sloc不能随意修改,Sdept不能随意删除等等,存在冲突!

可以使用投影分解法修改为第三范式,消除传递依赖,如下图小方块↓↓↓

 这样就不存在刚才那些异常了,变成了这样,解决了上述冲突:

  • 符合第三范式的例子

 下面正式介绍3NF:

 

 

BC范式(BCNF)-- 也叫作修正的第三范式

满足BC范式的关系将消除任何属性(主属性和非主属性)对关系键的部分函数依赖和传递函数依赖。在函数依赖的范畴内,它实现了模式的彻底分解,达到了最高的规范化程度,消除了操作异常诸多问题。

  • 不符合第三范式的例子

这样的传递使没有学生的老师不能入数据库等等问题。

可以使用投影分解法修改为BC范式,消除传递依赖,如下图小方块↓↓↓

总之,如果不存在–>C , B–>C 类似这样的情况,也就是说部分函数依赖。A–>B , B–>C 这种情况,也就是传递函数依赖,不管这些ABC属性是主属性还是非主属性,反正就是不存在 “部分函数依赖和传递函数依赖” ,这就是

 

关系模式规范化总结

 


版权声明:本文为qq_36327627原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。