在非规范化的关系模式中,可能存在的问题:数据冗余、更新异常(修改操作一致性问题)、插入异常、删除异常
函数依赖
设R(U,F)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u【X】 = v【X】,就有u【Y】 = v【Y】,则称X函数决定Y,或称Y函数依赖于X,记为X->Y
部分函数依赖:
候选键是多个属性集合,某一个属性只依赖于候选键中的某一个主属性,则称此为部分函数依赖
传递函数依赖:
X->Y,Y->Z,X与Z属于传递函数依赖
如何求候选键
将关系模型的函数依赖关系用“有向图”的方式表示
找入度为0的属性集合,尝试以这个集合为起点遍历全图,若能遍历所有节点,则该属性为关系模型的候选键
若都不能遍历,需要尝试将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至集合能遍历所有结点
Armstrong公理
对于任意关系模式R(U,F)有以下推理规则:
- 自反率:若Y属于X属于U,则X->Y成立,一个大板块能唯一确认他的子版块
- 增广率:若Z属于U且X->Y,则XZ->YZ成立
- 传递率:若Z->Y且Y->Z,则X->Z成立
推论:
- 合并规则:若X->Y,X->Z,则X->YZ(2,3)
- 伪传递规则:若X->Y,WY->Z,则XW->Z (2,3)
- 分解规则:若X->Y且Z属于Y,有X->Z(1,3)
能够被推导出来的关系,不需要写入关系模型。
范式判断
第一范式(1NF):属性值都是不可分的原子值
简单属性(不可再分)和复合属性(可再分)、单值属性和多值属性、NULL属性、派生属性(可计算出的属性)
修改为第一范式:将复合属性拆分为简单属性
第二范式(2NF):消除非主属性对候选键的部分依赖
当且仅当满足第一范式,且每一个非主属性完全依赖候选键(不存在部分依赖)
修改为第二范式:将部分依赖的属性另起一表,使所有非主属性都完全依赖候选键
第三范式(3NF):消除非主属性对候选键的传递依赖
当且仅当满足第二范式,且没有非主属性传递依赖于其主属性
修改为第三范式:将传递依赖部分另起一表
BC范式 (BCNF):消除主属性对候选键的部分和传递依赖
当且仅当满足第三范式,属性间的所有依赖的决定因素必定包含某个候选键
模式分解
保持函数依赖:分解后是否包含所有分解前存在的函数依赖
无损联接分解:将一个模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式。
如何判断是否为无损分解:
表格法:
①是否有同名shuxinglie
②以同名属性为左侧的函数依赖,即可还原函数依赖右侧的被决定属性
图片来自于网络