第二范式和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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 优化算法——模拟退火算法

    优化算法——模拟退火算法模拟退火算法原理模拟退火算法模拟退火算法过程模拟退火算法流程模拟退火算法的Java实现Java代码最后的结果模拟退火算法原理爬山法是一种贪婪的方法,对于一个优化问题,其大致图像(图像地址)如下图所示:其目标是要找到函数的最大值,若初始化时,初始点的位置在CC处,则会寻找到附近的局部最大值AA点处,由于AA点出是一个局部最大值点,故对于爬山法来讲,该算法无法跳出局部最大值点。若初始

    2022年7月18日
    14
  • linux修改密码永久有效[通俗易懂]

    linux修改密码永久有效[通俗易懂]password-X99999用户名称passwd用户名称

    2025年9月17日
    4
  • 简单理解伽马校正

    简单理解伽马校正伽马校正相关的资料说明很多,但其中不少内容都写的比较繁杂,令人难以理解,本文尝试简单解释一下伽马校正的相关内容~早期的CRT显示器存在非线性输出的问题,简单来说,你给CRT显示器输入(input)一个0.5(**注意,输入范围为[0,1]),CRT显示器的输出(output)并不是0.5,而是约等于0.218,输入与输出间存在一个指数大概为2.2的幂次关系:outp…

    2022年9月25日
    3
  • linux中vi编辑器保存文件命令_linux用vi编辑文件

    linux中vi编辑器保存文件命令_linux用vi编辑文件工具:Linux方法:1、首先进入Linux的命令行界面.在目录下创建一个用于测试的文本文件(touchfilename).这里就新建了一个test12文本文件.当然这个名字是可以随便取得.2、用”vitest12″命令进入vi命令行模式(vifilename).如果要想编辑文本文件.必须要转换到插入模式下,也就是按一下键盘上的”i”就可以了.这样就可以编辑文本,删除文本中的内容.按键盘上…

    2022年9月22日
    2
  • 查看是否安装了webpack_webpack不是内部或外部命令

    查看是否安装了webpack_webpack不是内部或外部命令查看当前项目webpack版本在项目package.json中的scripts脚本命令中写入以下内容”webpack”:”webpack–version”然后打开终端在项目根路径下运行:npmrunwebpack

    2022年8月10日
    26
  • 关闭Apache的目录浏览功能[通俗易懂]

    关闭Apache的目录浏览功能[通俗易懂]用apache搭建的网站,默认情况下,是可以支持目录浏览的,也就是说,在目录中没有首页文件如index.html,index.php时,如果直接访问一个目录,这时就会显示整个目录包含的文件,这可能带来安全问题。关闭方法:修改配置文件httpd.conf把OptionsIndexesFollowSymLinks注释掉示例:<Directory”/var/www/html”> OptionsIndexesFollowSymLinks</Directory&

    2022年7月12日
    20

发表回复

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

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