数据库复习之规范化理论应用(第八次上机内容)

声明:本文为作者复习数据库课程时简单记录的笔记,如有错误之处,敬请指出,谢谢。

一、理论基础

1.无损连接性(Lossless Join):设关系模式R(U,F)被分解为若干个关系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…Un,且不存在UnUj式,Fi为F在Uj上的投影,如果R与R1,R2,…,Rn自然连接的结果相等,则称关系模式R的分解具有无损连接性。

  (上面别看了,看下面!)

  简单来说,就是如果对分解后的新关系进行自然连接得到的元组的集合与原关系完全一致,则称为无损连接。

2.函数依赖保持性(Preserve Dependency):设关系模式R(U,F)被分解为若干个关系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…UN,且不存在UNUj式,Fi为F在Uj上的投影;如果F所蕴含的任意一个函数依赖一定也由(F1 U F2 …U Fn)所蕴含,则称关系模式R的分解具有函数依赖保持性。

  (概念复杂就别看了,脑壳疼)

  简单来说,如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持函数依赖的(注意:这是一个充分条件)。

3.规范化过程既要具有无损连接性,又要具有函数依赖保持性。(仅偏一方都会有问题),前者可以保证不丢失信息,后者可以减轻或解决各种异常情况。

4.非规范化技术:有时候可以适当降低甚至抛弃关系模式的范式,提高数据库运行效率。比如经常从两个表中查询数据,为了避免频繁连接,可以适当数据冗余。

  (1)表分割:水平分割,垂直分割。

  (2)非规范化设计的主要优点

  • 减少了查询操作所需的连接
  • 减少了外部键和索引的数量
  • 可以预先进行统计计算,提高了查询时的响应速度

  (3)非规范化存在的主要问题

  • 增加了数据冗余
  • 影响数据库的完整性
  • 降低了数据更新的速度
  • 增加了存储表所占用的物理空间

5.闭包概念

  • 属性集的闭包:给定关系R(U,F), 对F,F+中所有X→A的A的集合称为X的闭包,记为X+
  • 函数依赖的闭包: 若F为关系模式R(U)的函数依赖集,我们把F以及所有被F逻辑蕴涵的函数依赖的集合称为F的闭包,记为F+

    规定:若X为U的子集,X→Φ 属于F+

属性集闭包的用途:

  • 判断α是否为超码,通过计算α+(α在F下的闭包),看α+ 是否包含了R中的所有属性。若是,则α为R的超码。
  • 通过检验是否β∈α+,来验证函数依赖是否成立。也就是说,用属性闭包计算α+,看它是否包含β。

二、例题讲述(第八次上机)

基本概念讲述:http://www.cnblogs.com/AlvinZH/p/6856432.html

解题方法要点一:判定函数依赖X→Y是否能由F导出的问题,可转化为求X+并判定Y是否是X+子集的问题。(求F闭包的问题可转化为求属性集闭包的问题)

解题方法要点二:求属性集的闭包算法:

  1. 将A置入A+
  2. 对每一FD(函数依赖),若左部属于A+,则将右部置入A+
  3. 重复至A+不能扩大。

解题方法要点三:函数依赖推理规则:

  1. 若XY->Z,则X->Z,Y->Z(错误)
  2. 若X->Y, 则XZ->YZ
  3. 若X->Y, X->Z,则X->YZ
  4. 若X->Y,Z∈Y,则X->Z
  5. 若X->Y,Y->Z,则X->Z
  6. 若X->YZ,则X->Y,X->Z
  7. 若A->B,BC->D,则AC->D


例1.已知某个关系,具有属性:A,B,C,D,E,F。假设该关系有函数依赖F={AB->C, BC->AD, D->E,CF->B}, 判断AB->D,D->A是否蕴含于这些函数依赖中。

解答:前者转化为求属性集AB的闭包:{A,B,C,D,E},D是其闭包的子集,所以前者蕴含于这些函数依赖中。后者求属性集D的闭包:{D,E},A不是其闭包的子集,所以后者不蕴含其中。



例2.已知关系模式R(U,F),U={A,B,C,D,E,G},F={AB->C, C->A,BC->D, ACD->B, D->EG, BE->C, CG->BD, CE->AG},判断BD->AC是否属于F+

解答:本题换了一种问法,道理是一样:判断BD->AC成不成立。转化为求BD的闭包:{B,D,E,G,C,A},AC是其子集,所以属于。



例3.给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,A2→A4},R的候选关键字为__A__。

  A. A1  B. A1A3  C. A1A3A4  D. A1A2A3

解答:求候选关键字,先求哪个属性集的闭包包含所有属性(超码)。A1的闭包:{A1,A2,A3,A4},符合要求。



例4.设有关系模式R(职工名,项目名,工资,部门名,部门经理)。如果规定,每个职工可以参加多个项目,各领一份工资(一人一项目同时确定工资);每个项目只属于一个部门管理;每个部门只有一个经理。

①试写出关系模式R的基本函数依赖和关键码.

  基本函数依赖:(职工名,项目名)→工资,项目名→部门名,部门名→部门经理

  关键码:(职工名,项目名)
②说明R不是2NF的理由,并把R分解成2NF.

  2NF特点:不存在非主属性对候选码的部分函数依赖。

  (画图好理解qwq)

  这里(职工名,项目名) P→部门名,存在非主属性对候选码的部分函数依赖,所以不属于2NF。

  分解为2NF:R1(职工名,项目名,工资)、R2(项目名,部门名,部门经理)。
③进而把R分解成3NF,并说明理由。

  分析:3NF特点:非主属性对候选码没有部分函数依赖,也没有传递依赖。很明显这里有传递依赖:项目名 t→ 部门经理,需要进一步拆分。

  分解:R1(职工名,项目名,工资)、R2(项目名,部门名),R3(项目名,部门经理)。

  理由:上述三个表的码分别为(职工名,项目名)、(项目名)、(项目名),每一个非主属性对候选码没有部分函数依赖,也没有传递函数依赖。



例5.设有关系模式R(A,B,C,D,E,F),其函数依赖集F={E->D, C->B, CE->F, B->A}。

①指出R的主键并说明原因。

  分析:求主键,先求哪个属性集的闭包包含了所有属性。
  解答:主键为CE,因为属性集CE的闭包为{C,E,D,B,F,A},包含了所有属性。
②R最高属于第几范式。

  分析:助教说一般都是第一范式,当然需要简单分析一下,方便第三题:)
  解答:最高属于第一范式,因为存在非主属性对候选码的的部分函数依赖:C->B。
③分解R为3NF。

  分析:这个画图真的好理解,先分解为第二范式,然后再分解为第三范式。

  第二范式:(E,D)、(C,B,A)、(C,E,F)(消除非主属性部分函数依赖)
  第三范式:(E,D)、(CB)、(BA)、(C,E,F)(消除非主属性传递函数依赖)



解题要点四:判断一个模式分解是否具有无损连接性

1.无损连接定理:关系模式R(U,F)的一个分解,ρ={R1<U1,F1>,R2<U2,F2>}具有无损连接的充分必要条件是:U1∩U2→U1-U€F或U1∩U2→U2-U1€F+

  简单来说,就是

  注:上述定理只能判断分成两个关系的判定,如果分成三个及以上的话,怎么办呢(考试不会考这么难的,放心),书上197页有表格法,深入学习:http://blog.csdn.net/qq379666774/article/details/16969493

2.推论(充分条件):如果R1∩R2是R1或R2的超码(U部分依赖于K,则称K为超码),则R上的分解(R1,R2)是无损分解。

  注:注意这里是充分条件,当所有的约束都是函数依赖时它才是必要条件(例如多值依赖就是一种非函数依赖的约束),不过这已经足够了,常用这个。



例6.R(A,B,C,D,E),R的函数依赖集F={A->BC,CB->E,B->D,E->A}. 判断R1(A,B,C),R2(A,D,E)是否是无损连接。

解答:R1∩R2=(A),A的闭包为{A,B,C,E,D},发现A是R1的超码,甚至是主键,所以是无损连接。(注意是充分条件)



解题要点五:判断一个模式分解是否有函数依赖保持性:

1.充分条件:如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的。

2.如果上述判断失败,并不能断言分解不是保持依赖的,因为只是充分条件,还要使用下面的通用方法来做进一步判断。

  算法:对F上的每一个α→β使用下面的过程:

result:=α;
while(result cahnges) do
    for each 分解后的Ri
        t=(result∩Ri)+ ∩Ri
        result=result∪t

  其中的(result∩Ri)+属性闭包是在函数依赖集F下计算出来的。如果result中包含了β的所有属性,则函数依赖α→β成立。分解是保持依赖的当且仅当上述过程中F的所有依赖都被保持。



例7.设关系模式R<U, F>,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足 ___A__。

A.具有无损连接性、保持函数依赖
B.不具有无损连接性、保持函数依赖
C.具有无损连接性、不保持函数依赖
D.不具有无损连接性、不保持函数依赖

解答:先判断无损连接。R1∩R2={C},计算C+={C,D},可见C是R2的超码,该分解是一个无损分解。

再判断保持依赖。A→BC,BC→E, E→A都在R1上成立(也就是说每一个函数依赖左右两边的属性都在R1中),C→D在R2上成立,因此给分解是保持依赖的。(利用充分条件就可以判断)。



例8.给定关系模式R<U, F>,U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候选关键字为_(1)D_,则分解ρ={R1(ABCE),R2(CD)}满足_(2)D_ 。

(1)A.ABD    B.ABE    C.ACD    D.CD
(2) A.具有无损连接性、保持函数依赖
     B.不具有无损连接性、保持函数依赖
     C.具有无损连接性、不保持函数依赖
     D.不具有无损连接性、不保持函数依赖

解答:第一问,计算各个选项的闭包。

(ABD)+ = {A,B,D,E}
(ABE)+ = {A,B,E}
(ACD)+ = {A,B,C,D,E}
(CD)+ = {A,B,C,D,E}

选D。

第二问,先判断无损连接。R1∩R2={C},计算C+={C}。C既不是R1也不是R2的超码,但这不能判断该分解不具有无损分解性,因为这个判断方法是充分条件。我们用定理来判断:

U1 ∩ U2={C},其闭包为{C}

U1-U2={ABE}

U2-U1={D}

所以U1∩U2→U1-U€F+ 和U1∩U2→U2-U1€F+都不成立,即不具有无损连接性。

再判断保持依赖:

B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,但是还需做进一步判断。

我们对D→A应用算法:

result=D
对R1,result∩R1=ф,t=ф,result=D
再对R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D,result=D
一个循环后result未发生变化,因此最后result=D,并未包含A,所以D→A未被保持,所以该分解不是保持依赖的。

选D。

作者: AlvinZH

出处: http://www.cnblogs.com/AlvinZH/

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-11-03 03:46:35

数据库复习之规范化理论应用(第八次上机内容)的相关文章

数据库复习之规范化理论

声明:本文为作者复习数据库课程时简单记录的笔记,如有错误之处,敬请指出,谢谢. 6.1问题的提出 1.一个关系模式是一个五元组,形如R(U,D,DOM,F).其中D.DOM与模式设计关系不大,可以看作三元组R<U,F>. 关系名R是符号化的元组定义: U为一组属性: D为属性组U中的属性所来自的域: DOM为属性到域的映射: F为属性组U上的一组数据依赖. 2.数据依赖:一个关系内部属性与属性之间的一种约束关系.最重要的是函数依赖(FD)和多值依赖(MVD),还有一个叫连接依赖. 3.分析关系

数据库复习1——数据库体系结构和关系系统

数据库复习 CH2 数据库体系结构 2.1 数据库体系结构层次 数据库体系结构可以分成3个层次: 外部层次 概念层次 内部层次 外部层次是指每个用户用不同的高级语言来访问数据库所面对的接口,概念层次数据库信息的表示以及模的式定义(包括安全性和完整性约束等等),而内部层次就是的存储表示(非物理记录也非机器相关),数据库的设计需要保证这三个层次之间的独立性: 概念层和内部层之间物理数据的独立性 外部层和概念层之间逻辑数据的独立性 2.2 DBA和DBMS DBA(数据库管理员)必须很好的了解企业的数

数据库复习11——关系模式与范式

数据库复习 CH11 关系模式与范式 11.1 关系模式的设计 数据库模式(Schema)是数据库中全体数据的逻辑结构和特征的描述,关系型数据库的模式又叫关系模式,我所理解的关系模式就是数据库中表结构的定义以及多张表之间的逻辑联系 关系模式的设计就是根据一个具体的应用,把现实世界中的关系用表的形式来表示的逻辑设计过程,不规范的关系模式设计会带来以下的问题: 数据冗余 更新异常 插入异常 删除异常 举ppt中例子说明四种问题,如下表中描述了老师信息(一个老师一个地址,可以教多门课,一门课只有一名老

数据库复习3——数据库完整性

数据库复习 CH5 完整性 5.1 完整性约束 数据库完整性是指数据库中数据在逻辑上的一致性.正确性.有效性和相容性,那么完整性约束就是指用户插入.修改和删除操作时,DBMS为了保证数据库逻辑上的一致性.正确性.有效性和相容性所必需要检查的约束条件 C.J.Date在<An Introduction to Database Systems>一书中描述了四种完整性约束: 类型约束 属性约束 关系变量约束 数据库约束 C.J.Date提出的理论多半是建立在他自创的Tutorial D这个概念型数据

数据库复习7——恢复

数据库复习 CH14 恢复 13.1 恢复的概念 数据库系统中恢复是指让数据库从发生某些"失败"后的不一致的状态恢复到正常的一致状态的行为,恢复的基础是冗余(物理上冗余,非逻辑上) 这些失败包括了: 事务失败:包括逻辑错误(事务不满足某些条件不能执行)和系统错误(DBMS强制终止事务,如事务发生死锁) 系统崩溃:断电.物理硬件损坏.软件系统(如OS)崩溃,本章假设系统崩溃不会改变非易失存储器 磁盘失败:磁盘存储发生错误,本章假设可利用检查和监测磁盘失败 大体上,恢复策略分成两个步骤:

数据库复习5——安全性

数据库复习 CH7 安全性 7.1 数据库安全性介绍 如果说完整性是针对授权用户的数据库保护措施,那么安全性就是针对非授权用户的数据库保护措施 安全性问题涉及的层面很多,非法用户可以从以下各层面对数据库的窃取或篡改: 层面 窃取或篡改行为 应对措施 数据库系统 获取高级用户数据库权限 身份验证,权限和可获取数据对等 操作系统 获取操作系统root权限想干啥就能干啥,不仅仅限于对数据库的操作了 提升操作系统安全级别 网络 通过网络窃听和身份伪装也能窃取线上机密数据 身份验证和加密传输 物理 物理上

数据库复习10——PL/SQL

数据库复习 CH10 PL/SQL 10.1 PL/SQL简介 PL/SQL是Oracle对SQL的过程化的扩展,PL/SQL可以实现SQL相关的过程化程序,并且能够以存储过程和函数的方式让一段SQL业务逻辑驻留在SQL服务器中,以便减少客户机计算任务并减少网络I/O 10.2 PL/SQL编程基础 (1)简介 PL/SQL编程框架为: DECLARE <Variable List> BEGIN <Extented SQL Execution> EXCEPTION <Exce

数据库复习6——事务

数据库复习 CH13 事务 13.1 事务的概念 事务是作为单个逻辑工作单元执行的一系列数据库操作,这些操作可能会修改多个表中的多个元组 事务正常执行的结构是: begin; SQL execution 1 SQL execution 2 ... SQL execution N commit; begin标志开始一个事务,多个SQL语句就是事务逻辑工作单元,commit(提交)是结束当前事务并提交事务内数据变更,让其生效 数据库一致性在事务上表现的比较特殊,具体来说:事务执行的过程中可以让数据库

数据库复习4——视图

数据库复习 CH6 视图 6.1 视图的概念 视图是从一个或多个表(或视图)导出的虚表,DBMS仅在数据字典中存放视图的定义,而视图的数据仍然实际存储于导出它的基表中 Tutorial D中定义视图的基本语句如下: VAR <view_name> VIEW (<relational_condition>) {<property_list>}; 那么视图有什么作用呢? 为hidden data提供安全性,即屏蔽某些不希望外界用户看到的机密数据 提供一种简写的方式,有了视图