三大范式及BCNF范式分解集合

// 数据库老师始终不见,埋头看书苦不堪言。遇到范式更是难解,真就自己阅读自学。好诗好诗

范式简介

数据库范式是一种规范。类似同心圆,最外面一层要求最低,最里面要求最高。
规范的要求从低到高分别为:1NF 2NF 3NF BCNF 4NF 5NF
在日常使用中数据库能达到3NF的要求就已经很严苛,根据BCNF划分新的表一般也不会超过一次。但谁叫我们要做题呢~~

范式对应要求

级别高的范式包含比它级别低的范式的要求

1NF

1NF:关系中的每个属性都不可再分

  • 这是表结构的基本要求,能写在数据库中的表都满足

2NF

2NF:消除非主属性对候选键的部分函数依赖(码 -P> 非主)

  • P应该标识在箭头上方
  • Y 函数依赖于X,但同时Y并不完全函数依赖于X,就称 Y 部分函数依赖于X。例:(学号,课名) -P> 姓名
  • 码又叫候选键。候选键是指能唯一标识元组的一个或多个属性的集合
  • 所有候选键的并集就叫主属性
  • R中除去主属性以外的属性就叫非主属性

3NF

3NF:消除非主属性对候选键的传递函数依赖(码 -T> 非主)

  • Z函数依赖于Y,且Y函数依赖于X,称Z传递函数依赖于X。例:A->D D->C

BCNF

BCNF:消除主属性对候选键的部分、传递函数依赖( 码 -PT>主 )

BCNF解题思路

BCNF解题步骤
1、求出R中所有FD左侧的闭包,取一个闭包{X}+,若能包含R中的所有元素,则该FD满足BCNF
2、如果不能包含R中所有元素,则将R分解成两个关系R1、R2,{X}+作为R1的元素,X与R中剩余元素作为R2的元素
3、对R1、R2递归处理上述步骤

在这里解释一下为什么要引入闭包
{X}+定义就是由X直接或间接推导出的所有元素的集合。而这恰是部分函数依赖和传递依赖的性质。所以说闭包是他俩的具体应用!

BCNF例题

已知R(A,B,C,D,E) 含有FD:AB->C C->D D->B D->E,求根据BCNF分解的新集合。

  1. 先把R中所有FD的左侧对应的闭包写出来
    {A,B}+={A,B,C,D,E}
    {C}+={B,C,D,E}

    其实不用列完,发现第二个就已经不满足,那就根据第二个进行分解
  2. 根据{C}+分解R
    R1={B,C,D,E} R2={A,C}
    R2已经只有两个元素了,必定满足BCNF规范,所以不用考虑,接下来继续考虑R1是否满足BCNF
  3. 将R1中所有FD的左侧对应的闭包写出来
    {D}+={B,D,E}

    出现了不满足的闭包,则继续分解R1
  4. 根据{D}+分解R1
    R3={B,D,E} R4={C,D}
    R4不需再分,接下来考虑R3是否满足BCNF
  5. 将R3中所有FD的左侧对应的闭包写出来
    {D}+={B,D,E}
    R3中所有闭包满足条件,递归分解结束

后话

由于我才做到BCNF的题目,这里就暂时只有这个。以后会陆续更新。
这次的博客我参考了许多资料,最后其实感觉也挺简单。
喜欢的话记得关注。

你可能感兴趣的:(数据库)