主要针对:
-
数据冗余
-
修改异常
-
插入异常
-
删除异常
只要有数据冗余,就会有很多问题
解决数据冗余:拆表
依赖
如图,很直观
部分依赖 通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB
完全依赖 通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB
传递依赖 通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么说C传递依赖于A
键
分为三类
-
候选键:唯一标识元组,并且无冗余
-
主键:从候选键中任选一个
-
外键:其他关系的主键
图示法求候选键
-
将关系的函数依赖关系,用有向图表示
-
找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若可以遍历所有结点,就是候选键
-
若不能,尝试将一些中间结点并入入度为0的属性集中,直至可以遍历,那么这个集合为候选键
来几道例题:
[答案]:[A] [ABDC] [B]
主属性与非主属性
组成候选码的属性就是主属性,其他的是非主属性
通常和候选键一起考察
范式
第一范式(1NF)
在关系模式R中,当且仅当所有域只包含原子值,即所有属性都是不可再分的数据项,则称关系模式R是第一范式
第二范式
当且仅当关系模式R是第一范式,且每一个属性完全依赖候选键(没有不完全依赖),则称关系模式是第二范式
第三范式
当且仅当关系模式R是第二范式,且R中没有非主属性传递依赖于候选键时,则称关系模式R是第三范式
BC范式
设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码
也就是说,只要属性或属性组A能够决定任何一个属性B,则A的子集中必须有候选键
范式总结
保持函数依赖分解
设数据库模式P={R1,R2,..,RK}是关系模式R的一个分解,F是R上函数依赖集,P中每个模式Ri上的FD集是Fi
如果{F1,F2,…,Fk}与F等价,那么称分解保持FD
无损分解
即可以还原的分解
指将一个关系模式分解成若干个关系,通过自然连接和投影等运算仍能还原到原来的关系模式
表格法分解
将所有属性列出,列出对应关系
然后将它合并,观察是否可以还原,可以判断是否无损分解
公式法
只适用于一个关系模式分解为两个关系模式
如图P1
交集A R1-R2=B R2-R1=C
A->B是无损