对于数据库范式的一点理解

 最近在学习数据库设计中的范式,做作业的时候总觉得理解有点偏差,于是在网上找了找解释,觉得下面这两篇文章都讲的挺好的。
 第一篇是知乎里的回答,第二篇是一个人写的博文。我把其中觉得不错的东西又整理了一下。

引用自
https://www.zhihu.com/question/24696366
http://www.cnblogs.com/CareySon/archive/2010/02/16/1668803.html

范式的目标

  应用数据库范式可以带来许多好处,但是最重要的好处归结为三点:
  1.减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)
  2.消除异常(插入异常,更新异常,删除异常)
  3.让数据组织的更加和谐

什么是范式

简单的说,范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好的组织,让磁盘空间得到更有效利用的一种标准化标准。满足高等级的范式的先决条件是满足低等级范式。(比如满足2nf一定满足1nf)。 或者说是

一张数据表的表结构所符合的某种设计标准的级别

第一范式(1NF)

如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。简单的说,第一范式就是每一个属性都不可再分。不符合第一范式则不能称为关系数据库。

第二范式(2NF)

若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。简单的说,是表中的属性必须完全依赖于全部主键,而不是部分主键.所以只有一个主键的表如果符合第一范式,那一定是第二范式。这样做的目的是进一步减少插入异常和更新异常。
例:若一张表中有两个主键,则该表所有属性必须都依赖于这两个主键而不能只依赖其中一个。
2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
[注1]函数依赖:若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。直观的说,在数据表中,不存在任意两条记录,它们在X属性(或属性组)上的值相同,而在Y属性上的值不同。(只要满足后者便可以说存在依赖关系)
–>完全函数依赖:若X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ’ → Y 不成立
–>部分函数依赖:假如Y函数依赖于X且Y并不完全函数依赖于X,那么我们就称Y部分函数依赖于X
–>传递函数依赖:Z->Y,Y->X,则Z->X
[注2]:设K为某表中的一个属性或属性组,若除K之外的所有属性都完全函数依赖于K,那么我们称K为候选码,简称为码。即,假如当K确定的情况下,该表除K之外的所有属性的值也就随之确定,那么K就是码。一张表中可以有多个码。通常选择其中的一个码作为主码。
[注3]非主属性:包含在任何一个码中的属性成为主属性。
判断是否符合2NF的步骤:
1、找出数据表中所有的码。
2、根据第一步所得到的码,找出所有的主属性。
3、数据表中,除去所有的主属性,剩下的就都是非主属性了。
4、查看是否存在非主属性对码的部分函数依赖。

第三范式(3NF)

关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z  Y), 使得X→Y,Y→Z,成立,则称R∈ 3NF。简单的说,第三范式是为了消除数据库中关键字之间的依赖关系。
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖

BC范式(BCNF)

设关系模式R∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。BCNF保证每个表中只有一个候选键。
消除主属性对于码的部分函数依赖与传递函数依赖
[注1]候选键:在一个数据库中每行的值都不相同,则可称为候选键

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值