第二范式和bcnf范式区别(bcnf范式通俗解释)

第一范式:数据库的每一列都是不可分割的基本数据项,强调列的原子性。即列不可以再拆分。第二范式:建立在第一范式的基础上,每一个非主属性要完全函数依赖于候选键(或者说是主键,任一个候选键都可以做主键)。即非主键列完全依赖于主键,而不能是依赖于主键的一部分,必须满足两个条件:1.必须有一个主键;2.没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。第三范式(3NF)建立在第二范式的基础上,任何非主属性不依赖于其它非主属性。即每一个非主属性都不传递依赖于该范式的候选键。即非主键列只依赖于主键

大家好,又见面了,我是你们的朋友全栈君。

关键码:

  1. 超键:在关系中能唯一标识元组的属性或属性集称为关键模式的超键。
  2. 候选键:不含有多余属性的超键称为候选键。也就是在候选键中在删除属性就不是键了。
  3. 主键:用户选作元组标识的候选键称为主键。一般不加说明,键就是指主键。
  4. 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键。

函数依赖关系:

存在关系:

R(学号,姓名,性别,班级,班主任,课号,课名,成绩)

主键:学号,课号

主属性:{学号,课号}

非主属性:{姓名,性别,班级,班主任,课名,成绩}

  1. 完全函数依赖,{学号,课号}–>成绩,{学号,课号}可以决定成绩,但只有学号或是只有课号无法决定成绩。
  2. 部分函数依赖,{学号,课号}–>姓名,只有学号就能决定姓名   (课号是冗余的)  。
  3. 传递函数依赖,{学号,课号}–>班主任,班主任依赖于班级,因班级依赖于学号,所以班主任间接依赖于学号。

第一范式(1NF)

数据库的每一列都是不可分割的基本数据项,强调列的原子性。即列不可以再拆分。反例:

ID 姓名 联系方式
    电话 邮箱
1 张三 188XXXXXXXX XXX@163.COM

第二范式(2NF)

建立在第一范式的基础上,每一个非主属性要完全函数依赖于候选键(或者说是主键,任一个候选键都可以做主键)。即非主键列完全依赖于主键,而不能是依赖于主键的一部分,必须满足两个条件:

  1. 必须有一个主键。
  2. 没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

第三范式(3NF)

建立在第二范式的基础上,任何非主属性不依赖于其它非主属性。即每一个非主属性都不传递依赖于该范式的候选键。即非主键列只依赖于主键,不依赖于其他非主键。

BC范式(BCNF)

建立第三范式的基础上,任何非主属性不能对主键子集依赖。即数据库表中如果不存在任何字段对任一候选键的传递函数依赖则符合BC范式。

总结:

1NF消去对主键的部分函数依赖后=2NF。

2NF消去对主键的传递函数依赖后=3NF。

3NF消去对候选键的部分函数依赖和传递函数依赖后 = BCNF。

BCNF是对3NF的改进,即在3NF的基础的又把范围从主码扩大为候选码。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127396.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何查看redis占用内存大小

    如何查看redis占用内存大小

    2021年11月3日
    44
  • Hibernate二级缓存问题[通俗易懂]

    Hibernate二级缓存问题[通俗易懂]相关概念和定义1、缓存的意义把一些不常修改,但是又经常用的数据存放到内存中,这样能减少与数据库的交互,提升程序的性能2、Hibernate中提供了两级缓存:第一级别的缓存是Session级别的缓存(比如说在调用get方法的时候,如果已经查询过一次了,第二次就不会查了,而是直接返回session缓存中已经存在的那个对象给你,不过这个只对当前Session有效,一旦又开一个新的Sess…

    2022年5月23日
    38
  • 职场人为什么需要理财[通俗易懂]

    职场人为什么需要理财[通俗易懂]早理财比晚理财好,保持财产增值的同时,运气好赶上一波风口,比如股市牛市,黄金牛市等,就能比那些不理财的人更快完成原始资本积累。理好财能给我们带来更好的安全感和成就感,职场人士也多了一份睡后收入,何乐而

    2022年8月3日
    7
  • sublime3激活码-激活码分享

    (sublime3激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

    2022年3月21日
    43
  • Vue的跨域解决方案

    Vue的跨域解决方案如何在vue里面优雅的解决跨域,路由冲突问题?当我们在路由里面配置成一下代理可以解决跨域问题:proxyTable:{‘/goods/*’:{target:’http://localhost:3000′},’/user/*’:{ target:’http://ocalhost:3000′}},这种配置方式在一定程度上解决了跨…

    2022年10月1日
    3
  • leetcode happy number

    leetcode happy number

    2021年9月10日
    82

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号