1第一范式:存在非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B。如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第一范式的。
那么符合第一模式的特点就有:有主关键字、主键不能为空、主键不能重复,、字段不可以再分。例如:
StudyNo | Name | Sex | Contact
20040901 john Male Email:kkkk@eenet,phone:222456
20040901 mary famale email:kkk@fffnet phone:123455
以上的表就不符合,第一范式:主键重复(实际中数据库不允许重复的),而且Contact字段可以再分
所以变更为正确的是:
StudyNo | Name | Sex | Email | Phone
20040901 john Male kkkk@eenet 222456
20040902 mary famale kkk@fffnet 123455
2第二范式:存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B-->C。如果关系模式R是第一范式的,而且关系中每一个非主属性不部分依赖于主键,称R是第二范式的。所以第二范式的主要任务就是:满足第一范式的前提下,消除部分函数依赖。
StudyNo | Name | Sex | Email | Phone | ClassNo | ClassAddress
01 john Male kkkk@eenet 222456 200401 A楼2
01 mary famale kkk@fffnet 123455 200402 A楼3
这个表完全满足于第一范式,主键由StudyNo和ClassNo组成,这样才能定位到指定行。但是,ClassAddress部分依赖于关键字(ClassNo-〉ClassAddress,所以要变为两个表:
表一
StudyNo | Name | Sex | Email | Phone | ClassNo
01 john Male kkkk@eenet 222456 200401
01 mary famale kkk@fffnet 123455 200402
表二
ClassNo | ClassAddress
200401 A楼2
200402 A楼3
3第三范式
不存在非主属性对码的传递性依赖以及部分性依赖 ,
StudyNo | Name | Sex | Email | bounsLevel | bouns
20040901 john Male kkkk@eenet 优秀 $1000
20040902 mary famale kkk@fffnet 良 $600
这个完全满足了第二范式,但是bounsLevel和bouns存在传递依赖,更改为:
StudyNo | Name | Sex | Email | bouunsNo
20040901 john Male kkkk@eenet 1
20040902 mary famale kkk@fffnet 2
bounsNo | bounsLevel | bouns
1 优秀 $1000
2 良 $600
这里可以用bounsNo作为主键,基于两个原因
(1)不要用字符作为主键。可能有人说:如果我的等级一开始就用数值就代替呢?
(2)但是如果等级名称更改了,不叫 1,2 ,3或优、良,这样就可以方便更改,所以一般优先使用与业务无关的字段作为关键字。
一般满足前三个范式就可以避免数据冗余。
扩展资料:
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
参考链接:
百度百科-数据库范式
由语义得函数依赖:
课程号->课程名
课程号->学分
课程名->学分
L类:课程号
N类:专业
(课程号,专业)+ ={课程号,课程名,学分,专业}
所以该关系的码:(课程号,专业)
函数依赖
因为非主属性部分依赖于码
所以其最高范式为第一范式
不懂可以问
范式,一般意义上是指关系数据库的设计范式
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
第一范式(1NF)无重复的列所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。第二范式(2NF)属性在1NF的基础上,非码属性必须完全依赖于码[在1NF基础上消除非主属性对主码的部分函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如在员工表中的身份z号码即可实现每个一员工的区分,该身份z号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份z号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。(该主键的添加是在ER设计时添加,不是建库时随意添加)
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。第三范式(3NF)属性在1NF基础上,任何非主属性不依赖于其它非主属性[在2NF基础上消除传递依赖]
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。巴德斯科范式(BCNF)属性在1NF基础上,任何非主属性不能对主键子集依赖[在3NF基础上消除对主码子集的依赖]
巴德斯科范式(BCNF)是第三范式(3NF)的一个子集,即满足巴德斯科范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴德斯科范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。
对于BCNF,在主码的任何一个真子集都不能决定于非主属性。关系中U主码,若U中的任何一个真子集X都不能决定于非主属性Y,则该设计规范属性BCNF。例如:在关系R中,U为主码,A属性是主码中的一个属性,若存在A->Y,Y为非主属性,则该关系不属性BCNF。
一般关系型数据库设计中,达到BCNF就可以了!
提问者评价
谢谢!
下面以一个学校的学生系统为例分析说明,这几个范式的应用。 数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。
首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程名称、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,所关心的问题有如下几个方面。
学生有那些基本信息
学生选了那些课,成绩是什么
每个课的学分是多少
学生属于那个系,系的基本信息是什么。 首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
问题分析
因此不满足第二范式的要求,会产生如下问题
数据冗余:同一门课程由n个学生选修,学分就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
更新异常:
1)若调整了某门课程的学分,数据表中所有行的学分值都要更新,否则会出现同一门课程学分不同的情况。
2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有学号关键字,课程名称和学分也无法记录入数据库。
删除异常 :假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
解决方案
把选课关系表SelectCourse改为如下三个表:
学生:Student(学号,姓名,年龄,性别,系别,系办地址、系办电话);
课程:Course(课程名称,学分);
选课关系:SelectCourse(学号,课程名称,成绩)。 接着看上面的学生表Student(学号,姓名,年龄,性别,系别,系办地址、系办电话),关键字为单一关键字学号,因为存在如下决定关系:
(学号)→ (姓名,年龄,性别,系别,系办地址、系办电话
但是还存在下面的决定关系
(学号) → (系别)→(系办地点,系办电话)
即存在非关键字段系办地点、系办电话对关键字段学号的传递函数依赖。
它也会存在数据冗余、更新异常、插入异常和删除异常的情况。(数据的更新,删除异常这里就不分析了,可以参照211进行分析)
根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:
学生:(学号,姓名,年龄,性别,系别);
系别:(系别,系办地址、系办电话)。
上面的数据库表就是符合I,Ⅱ,Ⅲ范式的,消除了数据冗余、更新异常、插入异常和删除异常。
数据库中的范式问题.理论和时间要结合.
第一范式:当且仅当一个关系变量的所有的合法的值中,每一个元组的每个属性只含有
一个值时,该关系变量属于1 N F。
第二范式:(假定只有一个候选码,且该候选码是主码)当且仅当一个关系变量属于
1 N F,且该关系变量的每一个非码属性都完全函数依赖于主码时,该关系变量属于2 N F。
第三范式(假定关系变量只有一个候选码,且该候选码是主码):当且仅当一个关系变
量属于2 N F且该关系变量的所有非码属性都不传递依赖于主码时,该关系变量属于3 N F。
注意:“不传递依赖”蕴涵不互相依赖,从这个意义上说,该术语的解释和本节开始的
解释一样。
多值依赖: R是一个关系变量, A、B和C是R的属性的子集。那么我们说B多值依赖于A
—符号如下:A→→B(读做“A多值决定B”,或简单地称为“ A双箭头B”)—当且仅当
对于每一个可能的合法R值,B值的集合对于给定的一组( A值,C值)只依赖于A的值,而与
C的值无关。
很容易看出—参见[ 1 2 1 3 ]—对于给定的变量R{A,B,C},多值依赖A→→B存在,当且
仅当多值依赖A→→C也存在。这样M V D总是成对的一起出现。因此通常用一种语句来表示它
们:A→→B|C。例如:C O U R S E→→T E A C H E R | T E X T。
在前面我们已经提到,多值依赖是一般化的函数依赖,在这种意义上讲每一个F D都是
M V D。更精确地说,一个F D就是一个只有一个依赖值(右边的)与一个给定的决定值相符合
的M V D。因此,如果A→B,那么一定A→→B。
第四范式:只要存在R的属性的子集A和B,满足非平凡的多值依赖,并且R的所有属
性也都函数依赖于A,这样的关系变量R满足4 N F。
换句话说,在R中的唯一的非平凡的依赖(函数依赖或多值依赖)是K→→X形式(例如:
一个超码K对另一个属性X的函数依赖)。同样,如果R是B C N F,并且R中的所有非平凡的多值
依赖事实上都是“非码函数依赖( FDs out of key)”,则R是4 N F的。因此特别要注意的是,
4 N F包含了B C N F。
第五范式:一个关系变量R是第五范式—也称为投影-连接范式( P J / N F)—当且仅当
R的每一个非平凡的连接依赖都被R的候选码所蕴涵。
注意:下面解释一下对于一个J D“被候选码所蕴涵”的含义。
关系变量S P J并不是5 N F;它满足一个特定的连接依赖,即3 D约束。这显然没有被其唯一
的候选码(这个候选码是其所有的属性值的组合)所蕴涵。可以表示其区别如下:关系变量
S P J并不是5 N F,因为( a)它是可以被3分解的;(b)可3分解性并没有为其{ S #,P #,J # }是
一个候选码的事实所蕴涵。相反, 3分解后,由于三个投影S P、P J和J S根本不包括任何(非平
凡的)连接依赖,因此它们都是5 N F。
以上就是关于举例说明一下怎么算是第一范式、第二范式、第三范式全部的内容,包括:举例说明一下怎么算是第一范式、第二范式、第三范式、数据库,判断范式问题。、有没有大神会做数据库的题,是关于判断第几范式的,1NF,2NF,3NF,BCNF,第4和第六道不懂等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)