数据库范式

数据库范式
简单来讲就是函数X求出Y,X可以确定Y,Y就依赖于X


平凡的函数依赖:X可以确定Y且Y属于X
非平凡的函数依赖:X可以确定Y且Y不属于X
完全函数依赖:X可以确定Y且X去掉任何一个属性都不能确定Y
部分函数依赖:X可以确定Y且X的某个真子集也能确定Y
传递函数依赖:X和Y是非平凡的函数依赖,且Y不能确定X,Y能确定Z,称Z传递函数依赖于X; 若Y能确定X,则称Z直接依赖于X


范式:

范式越高,问题越少
数据库范式数据库范式


第一范式

如果一个关系模式R的所有属性都是不可分割的基本数据项,则为第一范式,简单说就是不存在表中套表。
不满足第一范式的数据库不能称之为关系数据库。
满足第一范式的关系模式不一定好
数据库范式如图,表中套表,不是第一范式
数据库范式
将表拆开成第一范式


第二范式

在第一范式基础上,每一个非主属性完全依赖于码,则为第二范式。
通过模式分解将部分函数依赖的拆出。
我们可以通过表看出sname对于码是部分函数依赖,因为sno即可确定sname,所有上面的表只是第一范式。
birth也是部分函数依赖
数据库范式
只需要把部分函数依赖单独形成一张表。因为sno可以确定sname和birth,将三个属性分成一张表。原表的sname和birth即可删除。
数据库范式


第三范式

在第二范式的基础上去除掉非主属性对码的传递函数依赖
采取投影分解法,将传递函数依赖的YZ单独形成一张表


BC范式

若关系模式R∈BCNF有以下三点

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全依赖于非码的一任何组属性
  • BCNF一定是3NF,3NF不一定是BCNF

Armstrong公理

对于满足一组函数依赖F的关系模式R<U,F>,其中任何一个关系r,若函数依赖X->Y都成立,则F逻辑蕴含X->Y
已知R(X,Y,Z),F={X->Y,Y->Z},则X->Z成立,X->Z被F逻辑蕴含
Armstrong公理用途:

  • 求给定关系模式的码
  • 从一组函数依赖求得蕴含的函数依赖
    数据库范式
    数据库范式

闭包:

数据库范式
数据库范式
简单来说就是给定X,求属性集X关于函数依赖集F的闭包,就是求X能推出的集合
数据库范式


属性集X关于函数依赖集F的闭包的算法:

  1. 先将属性X放入集合
  2. 用已有集合通过推到推出新的集合,并找出没出现过的集合(有可能推出已有的属性)
  3. 判断是否集合改变或者已经为全集
  4. 如果没改变或者已经为全集,算法终止
  5. 否则,返回第二步数据库范式

利用属性组闭包求候选码

给定关系和函数依赖,找出函数依赖右侧没有出现过的属性,组成一个集合K,候选码一定含有K。
计算KF+,如果KF+等于关系的属性组全体的话,K就是候选码,而且是唯一一组候选码。
否则,基于K扩充,形成新的属性组,继续求闭包。如果扩充到一定数量找到一组候选码,就不用再增大属性数量了,但是要相同个数的属性组都求完。