范式与公理系统
一.关系模式中存在的几个问题:(引入范式的原因)
- 数据冗余(例如名字重复出现,浪费空间)
- 更新异常(更新后造成数据不一致)
- 插入异常(应该插入的无法插入)
- 删除异常(不该删除的被删除)
- 函数依赖
X->Y,但Y属于X,则称Y对X是平凡的函数依赖
X->Y,但Y不属于X,则称Y对X是非平凡的函数依赖
在R(U)中,如果X->Y,并且对于X的任何一个真子集X’,都有X'不能推导出Y,则称Y对X完全函数依赖。->上的符号为F
若X->Y,但Y不完全依赖于X,则称Y对X部分函数依赖。->上的符号为P
传递函数依赖:
- 码
候选码:这样一个集合,它可以推出所有属性,但是它的任意一个真子集无法推出所有属性。
求候选码的步骤:
- 只出现在左边的一定是候选码
- 只出现在右边的一定不是候选码
- 左右都出现的不一定
- 左右都不出现的一定是候选码。
(候选码可能有多个)
闭包:BD的闭包,是指BD能推出来的所有属性
超码:能推出所有属性的属性集(包含候选码)
候选码是最小的超码,因为候选码的真子集不能推出所有属性
主码:从候选码中挑选一个为主码
主属性:包含在任意一个候选码中的属性(即包含所有候选码的属性)
非主属性:不包含在候选码中的属性
码:我们把主码,候选码都简称为码
全码:所有的属性都是码,称为全码(由主属性组成)
规范化:一个低一级范式的关系模式通过模式分解可以转化为若干个高一级范式的集合,这种过程就叫做规范化。
- 范式
- 第一范式:1NF
所有的关系模式都满足第一范式,1NF的
要求是表中无表。
- 第二范式:2NF
不存在非主属性对码的部分函数依赖(不存在非主属性对主属性的部分函数依赖)
- 第三范式:3NF
不存在非主属性对码的传递函数依赖(全码一定是3NF)
- BC范式:BCNF
不存在主属性对码的部分和传递函数依赖
- Armstrong公理系统
设U为属性集总体,F是U上的一组函数依赖,于是有关系模式R<U,F>,对<U,F>来说有以下的推理规则:
A1自反律:若X属于Y属于U,则X->Y为F所蕴涵。
A2增广律:若X->Y为F所蕴涵,且Z属于U,则XZ->YZ为F所蕴涵。
A3传递率:若X->Y及Y->Z为F所蕴涵,则X->Z为F所蕴涵。
合并规则:由X->Y,X->Z,由x->YZ.
伪传递规则:由X->Y,WY->Z,有XW->Z。
- 最小函数依赖集(不一定唯一)
F中的每一个函数依赖,都不可以被其他其他依赖推出,且右边一定是一个单元素。
求解步骤:
- 将右边的元素拆分成单个元素
- 对所有的依赖一一排查,找出多余的
- 模式分解
模式分解的两个准则:
- 无损连接性
即分解之后能够通过自然连接结合起来
- 保持函数依赖
即F分解之后还能还原回来
考题:如何将数据库分解成3NF,并保持无损分解和函数依赖
解题步骤:
- 求出最小函数依赖集
- 把不在F中的属性全部找出来,单独分一类,并从这些属性中删除
- 把每一个依赖左边的相同的分成一类
- 如果候选码没有出现在分类中,把任意一个候选码作为一类