8.5.数据库基础技术-规范化

函数依赖

  • 函数依赖:给定一个X,能唯一确定一个Y,就称X决定(确定)Y,或者说Y依赖于X。
    例如:Y=X*X函数,此时X能确定Y的值,但是Y无法确定X的值,比如x=2,y=4,但是y=4无法确定x=2。
  • 函数依赖又可扩展以下两种规则:
    • 部分函数依赖:A可决定C,(A,B)也可决定C,既然A都可以决定C了,那么要不要B其实都无所谓了,所有这种就称之为部分函数依赖。
    • 传递函数依赖:当A和B不相同时,A可决定B,B可决定C,则A可决定C,是传递函数依赖;若A和B相同,则不存在传递了,A就可以直接就可决定C。
      在这里插入图片描述

函数依赖的公理系统

函数依赖的公理系统(Armstrong:阿姆斯特朗公理)是指一组用于推导和证明函数依赖的规侧和公理集合。设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则。

  • 自反律:对于任意属性集合X和Y,有Y⊆X⊆U,则X→Y被F逻辑蕴含。
    • 也就是说如果属性集Y属于X,则X可以决定Y,又可以说属性集X可以决定他的属性子集。
  • 增广律:对于任意属性集合X、Y和Z,如果X→Y,那么XZ→YZ。
    • 如果X→Y在F这个函数依赖集合中,另一属性(组)Z是属性集U中的元素,那么从F中可以推导出XZ函数决定YZ。
  • 传递律:对于任意属性集合X、Y和Z,如果X→Y且Y→Z,那么X→Z。

根据上述3条推理规则又可推出下述3条推理规则:

  • 合并律:对于任意属性集合X、Y和Z,如果X→Y和X→Z,那么X→YZ。
  • 分解律:对于任意属性集合X、Y和Z,如果X→YZ,则X→Y和X→Z。
  • 合成律:对于任意属性集合X、Y和Z,如果X→Y且Y→Z,那么XZ→YZ。

键与约束

  • 超键(码):能够唯一标识一条记录的属性或属性集。换句话说,超键中的属性组合可以保证每个元组在关系中都是唯一的。
    举例:假设我们有一个学生表,包含以下属性:学号、姓名、性别、出生日期,那么,以下属性集合都是超键:{学号}、{学号,出生日期}、{姓名,性别,出生日期,因为这些属性组合都可以唯一标识每个学生。
  • 候选键:超键中不包含任何冗余属性的超键。换句话说,候选键中的每个属性都是必需的,用于唯一标识元组。
    举例:在上面的例子中,{学号}是候选键,因为它是唯一标识学生的最小属性集合。如果我们设置姓名不能重复的话,那姓名也是一个候选键,但是{姓名,性别,出生日期这个组合就不是了,因为性别和出生日期冗余了,可以由姓名得到
  • 主属性:包含在任一候选码中的属性称主属性。换句话说,主属性是候选码所有属性的并集
    举例:在上面的例子中,如果姓名不能重复,那么主属性就是学号和姓名
  • 主键:从候选键中选取的一个属性或属性集合,作为表中元组的唯一标识符。
    举例:在上面的例子中,我们可以选择{学号}作为主键。
学号姓名性别年龄系别专业
20020612李辉20计算机软件开发
20060613张明18计算机软件开发
20060614王小玉19物理力学
20060615幸汉华17生物动物学
20060616赵静21化学食品化学

超键:能够唯一标识一条记录的属性或属性集。{学号}、{姓名}、{学号,姓名}、{学号,姓名,性别}…
候选键:能够唯一标识一条记录的最小属性集。{学号}、{姓名}
主属性:候选码所有属性的并集。{学号、姓名}

外键:是指一个表中的属性,它引用另一个表中的主键。外键用于建立表之间的关系。
实体完整性约束:即主键约束,主键值不能为空,也不能重复
参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空
用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到180之间。

案例

在这里插入图片描述
超键:包含雇员编号在内的任意组合,如果名字不允许重复,也可以是包含名字在内的任意组合
候选键:雇员编号,如果名字不允许重复,还有名字
主键:雇员编号从候选键中选择的最简单属性用于唯一标识一行记录)
外键:部门编号(在雇员表中指向部门表的主键用于两张表之间的联系)
主属性:雇员编号,姓名

范式

第一范式1NF

第一范式1NF:要求数据库表中的所有字段都是不可分割的原子值。通俗地说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:薪资被拆成了基本工资和补贴
在这里插入图片描述
例:用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩)
依赖关系(学号->学生姓名,学号->所在系,所在系>系主任姓名,(学号,课程号)->成绩)
在这里插入图片描述

第二范式2NF

第二范式:在1NF的基础上,要求数据库表中的每个非主属性完全依赖于某一个候选键
通俗地说,就是表中不能存在联合主键,按照定义,上面的学生表就不满足2NF,因为学号不能完全确定成绩(每个学生可以选多门课)。

解决方案:将学生表分解为:

  • 学生(学号,学生姓名,系编号,系名,系主任)
  • 选课(选课d,学号,课程号,成绩)。
    每张表均属于2NF。

第三范式3NF

第三范式:在2NF的基础上,要求数据库表中的每个非主属性不依赖于其它非主属性。也就是说,数据表中的每一列都和主键直接相关,而不依赖于其它列,即不能行在传递依赖

继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任和系名,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖,
解决方案:将学生表进一步分解为:

  • 学生(学号,学生姓名,系编号)
  • 系(系编号,系名,系主任)
  • 选课(选课id,学号,课程号,成绩)
    每张表都属于3NF。

BC范式BCNF

BC范式(BCNF):规范化数据库设计的一种方法,它对关系型数据库中的表进行分解,其符合第三范式(3NF),同时尽量避免数据冗余和不一致性,提高数据的可靠性和完整性。

假设仓库管理关系表(仓库ID,存储物品ID,管理员ID,数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。此关系模式已经属于了3F,那么这个关系模式是否存在问题呢?我们来看以下几种操作:

  • 删除异常:当仓库被清空后,所有”存储物品D”和”数量”信息被删除的同时,”仓库ID”和”管理员D”信息也被删除了。
  • 插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。
  • 更新异常:如果仓库换了管理员,则表中所有行的管理员D都要修改。

解决方案:把仓库管理关系表分解为二个关系表;

  • 仓库管理:(仓库ID,管理员ID);
  • 仓库:(仓库ID,存储物品ID,数量)。
    这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

练习题

给定关系模式R(U,F),U={A,B,C,D},F={AB→C,CD→B。关系R(),且分
别有()。
A.只有1个候选关键字ACB
B.只有1个候选关键字BCD
C.有2个候选关键字ACD和ABD
D.有2个候选关键字ACB和BCD

A.0个非主属性和4个主属性
B.1个非主属性和3个主属性
C.2个非主属性和2个主属性
D.3个非主属性和1个主属性

答案C A
候选关键字的求法:根据依赖集,找出从未在右边出现过的属性(有出度没有入度),必然是候选键之一,以该属性为基础,根据依赖集依次扩展,看能香遍历所有属性,将无法遍历的加入候选键中。
在这里插入图片描述

设有关系模式R(E,N,M,L,Q),其函数依赖集为F={E→N,EM→Q,M→L)。则
关系模式R达到了(),该关系模式()
A.1NF
B.2NF
C.3NF
D.BCNF

A.无需进行分解,因为已经达到了3NF
B.无需进行分解,因为已经达到了BCNF
C尽管不存在部分函数依赖,但还存在传递依赖,所以需要进行分解
D.需要进行分解,因为存在冗余、修改操作的不一致性、插入和删除异常

答案A D
有联合主键EM,不满足2NF
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yoyo勰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值