【软考总结】——数据库之范式

    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,而这些不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

在理解数据库范式之间,先理解几个概念更能帮助我们掌握和区分数据库的几个范式。


基础概念


   函数依赖:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称为X函数决定Y,也可以称作Y函数依赖于X,记作X—>Y。

   一句话解释:在Y上任何一个属性值,在X上对应一个唯一的值。即称作X—>Y。


   完全函数依赖:在R(U)中,如果X—>Y,并且对于X的任何一个真子集X’都有X’不能决定Y,则称为Y对于X完成函数依赖,记为X—>Y。

   解释:用X中全部的值才能决定Y。

  

   传递依赖:在R(U,F)中,如果X—>Y,Y⊈X,Y—>Z,则Z对X传递依赖。


   非键属性:不是构成主键的属性。


   候选码:关系中的一个属性或者一组属性可以唯一的标识一个元组。


   非主属性:不包含在各个候选键中。


范式


       第一范式(1NF):所有的属性不可再分;

       第二范式(2NF):非键属性完全依赖于主键;

       第三范式(3NF):非主性属性没有传递依赖;

       BCNF:任何一个函数依赖中决定因素都是候选码;


实例分析


    先讲解1NF


    关系中包含的属性不能再分,例如R(姓名,性别,年龄,家庭情况)其中家庭情况又包含(父亲,母亲)对于关系R来说,就不满足1NF,因为家庭情况这个属性可以继续分解,整理成符合1NF的关系R(姓名,性别,年龄,父亲,母亲)


    分析2NF和3NF


    关系FIRST:(Sno,Sname,Status,City,Pno,Qty)

    F={Sno—>Sname,Sno—>Status,Status—>City,(Sno,Pno)—>Qty}


先判断是否符合2NF?


    2NF定义非键属性完全依赖于主键

    主键有:Sno,Pno;

    非键属性:Sname,Status,City,Qty

    假如符合2NF,则(Sno,Pno)—>Sname,(Sno,Pno)—>Status,(Sno,Pno)—>city,(Sno,Pno)—>Qty根据题意显然前三个关系仅需要Sno就可以得到,不满足2NF。


    转换为符合2NF的关系

        FIRST1{Sno,Sname,Status,City};

        FIRST2{Sno,Pno,Qty}


判断是否符合3NF?


    3NF定义非主属性对主键不存在传递依赖

    非主属性:Sname,Status,City

    看FIRST1中City是因为Sno—>Status,Status—>City,故City对Sno传递依赖,不符合三范式。


    拆分成符合三范式的关系

        F1(Sno,Sname,Status)

        F3(Status,City)


   则符合3NF的FIRST被拆分为

        F1(Sno,Sname,Status)

        F2(Sno,Pro,Qty)

        F3(Status,City)

   根据BCNF的定义来看,上述分解已经符合BCNF范式了。

【总结】

    通过这次软考复习,感觉自己终于弄懂这几个范式的关系,感觉自己萌萌哒!其实自己有反思一下为什么之前不能理解,得过且过的心态害死人啊。其中多重复几遍,对其中涉及到的基础概念耐心理解一下,这几个范式也就那么一回事!

    如有理解偏颇之处,请各位大神不惜赐教,不胜感激!

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值