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

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

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

  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】
开始找侯选码时是最关键的,侯选码通常不被别的属性确定或传递性确定,侯选码能函数确定其它所有非主属性。

  • 56
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值