数据库范式判断及分解技巧

版权声明:原创的文章须经过我同意之后才能转载哦 https://blog.csdn.net/qq_41809589/article/details/86375296

这个博客就当自己的笔记了,写的不好不对的地方,大家多多指教啦。数据库中的范式是考试中必考的重点,也是应用中比较实用的操作标准。不说废话了,下面将分段来从不同深度开始说。

【前驱知识补充】
函数依赖
简单通俗地说就是属性之间是否有确定的关系,比如:学生表(学号,姓名,性别,选修课,成绩),学号函数确定姓名,(学号,选修课)函数确定成绩;在不重名情况下,姓名函数确定性别,也可以称为性别函数依赖姓名,记作姓名->性别。

  1. 平凡的函数依赖
    若X函数确定Y,且Y是X的子集,则称X→Y是平凡的函数依赖(Y是X的子集,所以平凡的函数依赖肯定是成立的啦,一般不讨论它)。

  2. 非平凡的函数依赖
    若X函数确定Y,且Y不是X的子集,则称X→Y是非平凡的函数依赖。

  3. 完全函数依赖
    如果X函数确定Y,并且对于X的任意一个真子集X’,都有X’不能函数确定Y,则称Y对X完全函数依赖。

  4. 部分函数依赖
    若X→Y,且不是完全函数依赖,那就称Y对X部分函数依赖(是不是感觉定义很随意,但它真的这样的-_-)。

  5. 传递函数依赖
    如果X→Y(且Y不是X的真子集),Y不能函数确定X,Y→Z(且Z不是Y的真子集),则称Z对X传递函数依赖(条件中不需要说明X→Z了)。

  6. 多值依赖
    通俗可能不严谨地讲,就是一个表中只有三个属性X,Y,Z,如果多值依赖X→→Y成立,则对于X、Z中一对值(x,z),确定一组Y值,这组值仅与x有关与z无关。例如下面的关系:

课程C 教师T 参考书B
物理 李勇 普通物理学
物理 李勇 光学原理
物理 李勇 物理习题集
物理 王军 普通物理学
物理 王军 光学原理
物理 王军 物理习题集
数学 李勇 数学分析
数学 李勇 微分方程
数学 李勇 高等代数
数学 张平 数学分析
数学 张平 微分方程
数学 张平 高等代数

对于上面的关系中一组(物理,光学原理)有一组对应T值{李勇,王军},这组值仅由C上的值(物理)决定,与Z无关。
多值依赖是BCNF范式与4NF的交界,是针对性的加强灵活性。假如物理增加一个老师时,要同时增加三组数据,显然是非常麻烦的,故在某些时刻,删除该依赖是非常重要的。
若关系中仅有两个属性X,Y,且X→→Y,则称其为平凡的多值依赖,否则为非平凡的多值依赖。

【范式判断】
范式关系:5NF<4NF<BCNF<3NF<2NF<1NF(<应该写成包含于更规范一点)。5NF不常用,不作分析。由上面关系可知,假如满足3NF,肯定也满足2NF,以此类推。
化简过程:给定一个1NF范式,删去部分函数依赖就是2NF;删去传递函数依赖就是3NF;使每个关系都含有码,就变成了BCNF范式;删除非平凡且非函数依赖的多值依赖就是4NF。
****从是不是第二范式判断(因为不是第二范式就不用判断了,肯定是第一范式),看是否存在部分函数依赖(如:(学号,院长)→院系,学号和院长都可以单独函数确定院系,是部分函数依赖),如果存在,则为1NF,如果不存在暂定为2NF,接着判断;
****判断是否有传递函数依赖(如:学号→院系,院系→院长,则学号→院长就是传递函数依赖),如果存在,则确定为2NF,若不存在,暂定为3NF,接着判断;
****若有的决定因素不包含码(如:(学生S,教师T,课程C),学生有多个课程,老师只教一门,(S,C)→T,(S,T)→C,T→C,码是(S,C)和(S,T),T是决定因素,而T却不包含码),则是3NF,若不存在,则暂定为BCNF范式;
****判断是否有非平凡且非函数依赖的多值依赖(例如上面表格),如果有,则是BCNF范式,若不存在可暂定问4NF范式。一般情况下要化简到BCNF范式,很少化简到4NF范式,几乎没有要求化简到5NF范式的。

【例题】
设有关系R(A,B,C,D,E),函数依赖F{ABC→DE,BC→D,D→E},问R是第几范式,如果不是BCNF范式,将它化简到BCNF范式。
解:可知,R侯选码是(A,B,C),由ABC→D且BC→D知,这是部分函数依赖,则不满足2NF范式,则R是1NF。
从1NF到2NF:删除部分函数依赖。分解为R1(A,B,C),(A,B,C)为侯选码;R2(B,C,D,E),(B,C)为侯选码;
从2NF到3NF:删除传递函数依赖。R1无需再分解,R2分解为R21(B,C,D),(B,C)为侯选码;R22(D,E),D为侯选码;
从3NF到BCNF范式:删除不包含码的确定因素。R1,R21,R22中的确定因素都包含码,均无需再删除,则上述三个即为化简结果的三个BCNF范式。

【Tips】
开始找侯选码时是最关键的,侯选码通常不被别的属性确定或传递性确定,侯选码能函数确定其它所有非主属性。

猜你喜欢

转载自blog.csdn.net/qq_41809589/article/details/86375296