㈠ 数据库模式分解的原则是什么
关系模式的分解准则
关系模式的规范化过程是通过对关系模式的分解来实现的。把低一级的关系模式分解为若干个高一级的关系模式。这种分解不是唯一的。
规范化的方式是进行模式分解,模式分解的原则是与原模式等价,模式分解的标准是:
模式分解具有无损连接性
模式分解能够保持函数依赖
举例:关系规范化过程
第一范式(1NF):如果一关系模式,它的每一个分量是不可分的数据项,即其域为简单域,则此关系模式为第一范式。
例:将学生简历及选课等数据设计成一个关系模式STUDENT, 其表示为:
STUDENT(SNO,SNAME,AGE,SEX,CLASS,DEPTNO,DEPTNAME,CNO,
CNAME,SCORE,CREDIT)
设该关系模式满足下列函数依赖:
F={SNO-->SNAME, SNO-->AGE, SNO-->SEX, SNO-->CLASS,CLASS-->DEPTNO, DEPTNO-->DEPTNAME, CNO-->CNAME,SNO.CNO-->SCORE, CNO-->CREDIT}
由于该关系模式的每一属性对应的域为简单域,即其域值不可再分,符合第一范式定义,所以STUDENT关系模式为第一范式。
第二范式(2NF):若关系模式R?1NF,且每个非主属性完全函数依赖于码,则称R?2NF。
分析一下关系模式STUDENT, 它是不是2NF ?
属性组(SNO,CNO)为关系STUDENT的码。
例如:SNAME非主属性,根据码的特性具有:SNO.CNO??SNAME
根据STUDENT关系模式已知函数依赖集,下列函数依赖成立:SNO??SNAME
所以SNO.CNO??SNAME, SNAME对码是部分函数依赖。同样方法可得到除SCORE属性外,其它非主属性对码也都是部分函数依赖。所以STUDENT关系模式不是2NF。
当关系模式R是1NF而不是2NF的模式时,对应的关系有何问题呢?我们分析STUDENT关系模式,会有下列问题:
存在大量的冗余数据:当一个学生在学习多门课程后,他的人事信息重复出现多次。
根据关系模型完整性规则,主码属性值不能取空值。那么新生刚入学,还未选修课程时,该元组就不能插入该关系中。这种情况称为插入异常。
同样还有删除异常,则会丢失信息
解决上述问题方法是将大的模式分解成多个小的模式,分解后的模式可满足更高级的范式的要求。
㈡ 数据库求教如何分解BCNF~
答案是{AC},{CD},{ABE}。因为A->;C,C->;D,所以A->;D,先把这ACD三个从总表中分出来,得出{ACD}和{ABE},由于A->;D,需要经过C,所以这属于传递依赖,因此{ACD}又可以分为{AC}和{CD}。
(2)数据库bcnf分解扩展阅读:
数据库管理系统是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;
或依据所用查询语言来作分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
㈢ 如何将关系模式分解到BCNF
1,范式
7大范式:1NF, 2NF,3NF,BCNF,4NF,5NF,6NF
什么叫normalization?Denormalization?
Normalization是数据库规范化,denormalization是数据库逆规范化.
在设计和操作维护数据库时,关键的步骤就是要确保数据正确地分布到数据库的表中.使用正确的数据结构,不仅便于对数据库进行相应的存取操作,而且可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等).正确进行表设计的正式名称就是"数据库规范化".目的:减少数据库中数据冗余,增进数据的一致性.
范式概念:
1)1NF:目标就是表中每列都不可分割;
2)2NF:目标就是表中的每行都是有标识的.前提是满足了1NF. 当关键字为单field时,一定满足2NF.当关键字为组合field时(即超过一个field),不能存在组合关键字中有某个字段能够决定非关键字段的某部分.非主field非部分依赖于主field,即非关键字段必须完全依赖于一组 组合关键字,而不是组合关键字的某一部分.
3)3NF:目标是一个table里面所有的列不依赖于另外一个table里面非关键的列.前提是满足了2NF,不存在某个非关键字段决定另外一个非关键字段.即:不存在传递依赖(关键字x->非关键属性y->非关键属性z)
4)BCNF:前提是满足了2NF,不存在某个非关键字段决定另外一个非关键字段.也不存在某个关键字段决定另外一个关键字段.即:在3NF基础上,加上约束:不存在某个关键字段决定另外一个关键字段.
1 第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库.所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性.如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系.在第一范式(1NF)中表的每一行只包含一个实例的信息.例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次.简而言之,第一范式就是无重复的列.
2 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF).第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分.为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识.如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分.这个惟一属性列被称为主关键字或主键、主码.第二范式(2NF)要求实体的属性完全依赖于主关键字.所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系.为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识.简而言之,第二范式就是非主属性非部分依赖于主关键字.
3 第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF).简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息.那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中.如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余.简而言之,第三范式就是属性不依赖于其它非主属性.
例子:
第一范式(1NF):数据库表中的字段都是单一属性的,不可再分.这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等.
例如,如下的数据库表是符合第一范式的:字段1 字段2 字段3 字段4
而这样的数据库表是不符合第一范式的:字段1 字段2 字段3 字段4 字段31字段32
很显然,在当前的任何关系数据库管理系统(S)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些S不允许你把数据库表的一列再分成二列或多列.因此,你想在现有的S中设计出不符合第一范式的数据库都是不可能的.
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字.
假定选课关系表为Ss(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
这个数据库表不满足第二范式,因为存在如下决定关系:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
即存在组合关键字中的字段决定非关键字的情况.
由于不符合2NF,这个选课关系表会存在如下问题:1) 数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了门课程,姓名和年龄就重复了-1次.2) 更新异常:若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况.3) 插入异常:假设要开设一门新的课程,暂时还没有人选修.由于还没有"学号"关键字,课程名称和学分也无法记录入数据库.4) 删除异常:假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除.但是,与此同时,课程名称和学分信息也被删除了.很显然,这也会导致插入异常.
把选课关系表Ss改为如下三个表:
学生:Sn(学号, 姓名, 年龄);
课程:s(课程名称, 学分);
选课关系:Ss(学号, 课程名称, 成绩).
这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常.
另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字.
第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式.所谓传递函数依赖,指的是如果存在"A → → "的决定关系,则传递函数依赖于A.因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段 → 非关键字段x → 非关键字段y
假定学生关系表为Sn(学号, 姓名, 年龄, 所在[]学院[], 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:
(学号) → (姓名, 年龄, 所在[]学院[], 学院[]地点, []学院[]电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号) → (所在[]学院[]) → ([]学院[]地点, []学院[]电话)
即存在非关键字段"[]学院[]地点"、"[]学院[]电话"对关键字段"学号"的传递函数依赖.
它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知.
把学生关系表分为如下两个表:
学生:(学号, 姓名, 年龄, 所在[]学院[]);
[]学院[]:([]学院[], 地点, 电话).
这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常.
鲍依斯-科得范式(BCNF):在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BCNF.
假设仓库管理关系表为Ssanag(仓库, 存储物品, 管理员, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品.这个数据库表中存在如下决定关系:
(仓库, 存储物品) →(管理员, 数量)
(管理员, 存储物品) → (仓库, 数量)
所以,(仓库, 存储物品)和(管理员, 存储物品)都是Ssanag的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的.但是,由于存在如下决定关系:
(仓库) → (管理员)
(管理员) → (仓库)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式.它会出现如下异常情况:1) 删除异常:当仓库被清空后,所有"存储物品"和"数量"信息被删除的同时,"仓库"和"管理员"信息也被删除了.2) 插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员.3) 更新异常:如果仓库换了管理员,则表中所有行的管理员都要修改.
把仓库管理关系表分解为二个关系表:
仓库管理:Ssanag(仓库, 管理员);
仓库:Ss(仓库, 存储物品, 数量).
这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常.
简言之数据库五大范式:
第一范式:对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性.
(第一范式是通过把重复的组放到每个独立的表中,把这些表通过一对多关联联系起来这种方式来消除重复组的)
第二范式:第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键.主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成.一旦创建,主键无法改变,外键关联一个表的主键.主外键关联意味着一对多的关系.(第二范式处理冗余数据的删除问题.当某张表中的信息依赖于该表中其它的不是主键部分的列的时候,通常会违反第二范式)
第三范式:第三范式要求非主键列互不依赖.(第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性.我们为没有与表的主键关联的所有信息建立了一张新表.每张新表保存了来自源表的信息和它们所依赖的主键)
第四范式:第四范式禁止主键列和非主键列一对多关系不受约束
第五范式:第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余.
㈣ 请问数据库设计中BCNF范式是什么意思
BCNF范式在3NF基础上消除对主码子集的依赖。
以仓库管理关系表为例:仓库号,存储物品号,管理员号,数量。首先该表满足第三范式,也就是说一个管理员只在一个仓库工作,一个仓库能够存储多种物品。表中存在有如下依赖关系:
(仓库号,存储物品号)——>(管理员号,数量)
(管理员号,存储物品号)——>(仓库号,数量)
由以上依赖关系可以得知(仓库号,存储物品号)和(管理员号,存储物品号)为表关系中的候选码。
表中唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库号)——>(管理员号)
(管理员号)——>(仓库号)
即存在关键字段决定关键字段的情况,因此其不符合BCNF。
解决方法:把仓库管理关系表分解为两个关系表仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合BCNF的,并消除了删除异常、插入异常和更新异常。
(4)数据库bcnf分解扩展阅读:
巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式。
也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。
参考资料来源:网络-数据库范式
㈤ 3NF 与BCNF 有什么区别 求举个例子说明下~谢谢
范式是数据库中的关于关系模式的分类,是越来越严苛的分类。
一、区别
1、第三范式指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。第三范式就是在第二范式的基础上再消除表中有可能存在某些数据元素依赖于其他非关键字数据元素的现象。
2、BC范式是指对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键。BC比第三范式更严苛的条件是:要求R为第二范式且非键属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。即决定因素为候选码。
二、举例
以下关系模式满足第三范式
学生:(学号,姓名,年龄,所在学院);
学院:(学院,地点,电话)。
其中的关系函数为:学号->姓名、学号->年龄、学号->学院、学院->地点、学院->电话。可以看出所有的关系函数均为一候选码为决定因素(函数的前半部分)那么可以说此关系模式满足BCNF。
(5)数据库bcnf分解扩展阅读
数据库范式概念引入原因
规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。
遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
一个关系模式接着分解可以得到不同关系模式集合,也就是说分解方法不是惟一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空问,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。
实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。
㈥ 数据库系统方面的问题,求最小函数依赖集、候选码、分解满足范式的关系模式
1.F={A->B,C->D,AE->F,F->G}已经是F的最小函数依赖集
2.R的候选码:ACE
3.R分解为:R1(A,B,C,D,E)和R2(F,G)均满足BCNF范式
㈦ 如何将一个关系模式分解成无损连接的BCNF
∵(BE)+=ABCDE,,B+=BC不属于ABCDE,E+=E不属于ABCDE。
∴BE为R的关键字。
考虑A→C,不包含关键字。
∴将R分解为R11(AC)R12(ABDE)F11的函数依赖为{A→C},F12的函数依赖为(AD)。
∵F11∈BCNF,F12不属于BCNF,继续分解。
将的R12分解为R21(AD),R22(ABE)。
F21的函数依赖为{A→D},F22的函数依赖为{BE→A}。
∵R21∈BCNF,R22∈BCNF。
∴R的一组BCNF模式分解为R11(AC),R21(AD),R22(ABE)。
注:分解的结果可能不唯一。
(7)数据库bcnf分解扩展阅读:
推导:
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。
若对于R(U)的任意两个可能的关系r1、r2,若r1[x]=r2[x],则r1[y]=r2[y],或者若r1[y]不等于r2[y],则r1[x]不等于r2[x],称X决定Y,或者Y依赖X。
上面一段话是某些教材上的话,比较不好理解。比如在设计学生表时,一个学生的学号能决定学生的姓名,也可称姓名属性依赖于学号,对于现实来说,就是如果知道一个学生的学号,就一定能知道学生的姓名。
这种情况就是姓名依赖于学号,这就是函数依赖,函数依赖又分为非平凡依赖,平凡依赖;从性质上还可以分为完全函数依赖、部分函数依赖和传递函数依赖。
Y=f(x)
1、数据依赖
在计算机科学中,数据依赖是指一种状态,当程序结构导致数据引用之前处理过的数据时的状态。其中最重要的是函数依赖和多值依赖。
2、函数依赖
设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X。
3、平凡函数依赖
当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。