3NF 与BCNF 有啥区别? 求举个例子说明下~谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3NF 与BCNF 有啥区别? 求举个例子说明下~谢谢相关的知识,希望对你有一定的参考价值。
有经验的来举2个例子~不要复制粘贴的
范式是数据库中的关于关系模式的分类,是越来越严苛的分类。
一、区别
1、第三范式指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。第三范式就是在第二范式的基础上再消除表中有可能存在某些数据元素依赖于其他非关键字数据元素的现象。
2、BC范式是指对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键。BC比第三范式更严苛的条件是:要求R为第二范式且非键属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。即决定因素为候选码。
二、举例
以下关系模式满足第三范式
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。
其中的关系函数为:学号->姓名、学号->年龄、学号->学院、学院->地点、学院->电话。可以看出所有的关系函数均为一候选码为决定因素(函数的前半部分)那么可以说此关系模式满足BCNF。
扩展资料
数据库范式概念引入原因
规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。
遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
一个关系模式接着分解可以得到不同关系模式集合,也就是说分解方法不是惟一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空问,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。
实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。
参考资料来源:百度百科-数据库范式
一、含义不同
1、3NF:即第三范式是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。
2、BCNF:中文叫巴斯范式,是由Boyce和Codd提出的,比3NF又进了一步,通常认为是修正的第三范式。
例如:设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有超码,那么R∈BCNF。
满足BCNF条件有:所有非主属性对每一个候选键都是完全函数依赖; 所有的主属性对每一个不包含它的候选键,也是完全函数依赖;没有任何属性完全函数依赖于非候选键的任何一组属性。
二、级别不同
1、3NF:满足3NF范式需要先满足第一范式跟第二范式。
2、BCNF:满足BCNF范式需要先满足3NF范式。
三、应用场景不同
1、3NF:用于数据库设计初级阶段。
2、BCNF:用于数据库设计的详细阶段。用来效验数据库设计是否合理。
参考资料链接:百度百科-BCNF
参考资料链接:百度百科-3NF
参考资料链接:百度百科-数据库范式
参考技术B BC范式的函数依赖左部一定包含码。而3范式没有这个要求。例子:
关系模式(学生,老师,课程) 其中每一个老师只教一门课,每门课有若干老师,某一学生选一门课就对应一个老师。 由语义得如下函数依赖:
(学生,课程)→老师。
(学生,老师)→课程。
老师→课程。
码是:学生,老师;学生,课程
主属性是:学生,老师,课程
显然,没有非主属性的传递依赖,也没有非主属性部分函数依赖,所以为三范式。
但是!! 老师→课程 这个函数依赖左部不包含码 只有码的一部分 所以达不到BC范式追问
码,是指主键 和 候选键吗? 主属性和码是是同一个意思吗?
追答主属性是码中包含的属性,码是能够确定表中所有元素的属性集合
本回答被提问者和网友采纳MIPS中j,jr,jal这三个跳转指令有啥区别,最好能举下例子说明下,谢谢了
j是最简单的跳转j 1111 意思就是跳转到地址1111
jr和jal与程序调用函数有关。程序调用函数,当函数调用结束后需要重新继续执行原来的程序,所以在调用函数之前,必须先存储函数返回起始点地址,用于存储这一地址的寄存器在MIPS中是$ra。
jal的意思就是跳转到某个地址同时把返回调用点的地址存储在$ra中。而jr用法一般是“jr $ra”,一般是函数调用结束后,用于跳转到返回地址。
更详细的信息可以参考《计算机组成与设计 硬件/软件接口》,David A. Patterson, John L. Hennessy 参考技术A
1、j是最简单的跳转。
2、jr和jal与程序调用函数有关。程序调用函数,当函数调用结束后需要重新继续执行原来的程序,所以在调用函数之前,必须先存储函数返回起始点地址。
3、jal是跳转到某个地址同时把返回调用点的地址存储在$ra中。
j1111 意思就是跳转到地址1111,而jr用法一般是“jr $ra”,一般是函数调用结束后,用于跳转到返回地址。
MIPS(Million Instructions Per Second):单字长定点指令平均执行速度 Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。这是衡量CPU速度的一个指标。像是一个Intel80386 电脑可以每秒处理3百万到5百万机器语言指令,即我们可以说80386是3到5MIPS的CPU。MIPS只是衡量CPU性能的指标。
跳转指令的基本格式
<opcode><cond>S <Rd>,<Rn>,<opcode2>
其中,<>内的项是必须的,内的项是可选的,如<opcode>是指令助记符,是必须的,而<cond>为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。
eg:j 2500 //跳转到目标地址10000,指令中的地址是字地址,所以需要乘以4,转换成字节地址。
jal 跳转并链接
eg:jal 2500 //$ra=PC+4, PC=10000,指令中的地址也是字地址,乘以4转换成字节地址。一般用于主程序调用函数时候的跳转,设置函数的返回地址为主程序中跳转指令的下一个指令,意思就是执行完函数就得回到主程序继续执行。寄存器$ra专门用来保存函数的返回地址。
jr 跳转到寄存器所指的位置
eg:jr $ra //跳转到寄存器中的地址。一般用于函数执行完返回主函数时候的跳转。
以上是关于3NF 与BCNF 有啥区别? 求举个例子说明下~谢谢的主要内容,如果未能解决你的问题,请参考以下文章