一、目的、

在查阅数据库设计理论时,发现《数据库系统概论》第5版的概念定义与网上质料有很大不同,不方便大学生做参考质料,并且有一些内容已经没有现实意义了,(如第二范式)。

二、适合阅读人群、

本文内容根据大学教材《数据库系统概论》中文第五版,以自己的理解总结出来的经验,以具体题目来强化概念,在提升做题技巧的基础上增强对概念的理解。适合考试复习参考!

三、内容、

约定概念、符号:A属性,α、β属性集,R关系模式。

、第一范式:

定义:关系模式R中所有属性都是原子域(atom)

、基于函数依赖的范式:

1、约定符号:F函数依赖集,F*函数依赖闭包集

函数依赖定义:如果存在模式(A,B),则A可以做主码,定义为:A→B,例图2

平凡函数依赖(trivial): 
存在α→β,它们在所有的关系中都是满足的(基于现实中的事实判断)。一般的:β包含于α,则依赖是平凡的(数学抽象判断)。

、平凡依赖举例:

R1(学生ID,学生性别,年龄) 学生ID→学生性别 
R2(A,B,C,D,F) F{ AB→B} 此处α={A,B},β={B}

2、BCNF范式定义:

具函数依赖集F的关系模式R属于BCNF范式的条件是:对于所有F*中α→β所有函数依赖,以下至少有一个成立: 
●α→β是平凡的函数依赖 
●α是模式R中的一个超码

3、要求更加宽松的范式,3NF定义:

具有函数依赖集F的关系模式R属于3NF范式的条件是:对于所有F*中所有α→β函数依赖,以下至少有一个成立: 
●α→β是平凡的函数依赖 
●α是模式R中的一个超码 
●α-β中的每一个属性A都包含在R的一个候选码中

4、函数依赖理论

约定符号:F*、α*属性集闭包

一、—-函数依赖集闭包(F*)

&逻辑蕴涵定义:给定函数依赖集F,由F出发,可以证明其他的函数也成立,就称这些函数依赖被F逻辑蕴涵。

函数蕴涵举例:

假设关系模式R={A,B,C,G,H,I}及函数依赖集F{A→B,A→C,CG→H,CG→I,B→H} 
则函数依赖: A→H被逻辑蕴涵(可由函数依赖定义推到) 
&(F*)定义:F逻辑蕴涵的所有函数依赖的集合

armstrong定理(正确有效、完备的) 
●自反律:若α为为一属性集且β⊆α,则有α→β。 
●增补律:若有α→β且λ为一属性集,则有λα→λβ。 
●传递律:若有α→β及β→λ,则有α→λ。 
派生的规则(简化计算),可由Armstrong推导出 
●合并律:若有α→β及α→λ,这则有α→βλ。 
●分解律:若有α→βλ,则有α→β及α→λ。 
●伪传递律:若有α→β及λβ→ σ ,则有α→σ。

函数依赖集闭包举例:

假设关系模式R={A,B,C,G,H,I}及函数依赖集F{A→B,A→C,CG→H,CG→I,B→H} 
推导: 
A→H,传递律; 
CG→HI,合并律; 
AG→H,伪传递律; 
上面求出的函数依赖并不完整,求F的闭包F*的算法可查阅《数据库系统理论》

二、—-属性集闭包:

如果有α→B,我们就称B被函数α函数确定。判断一个集合α是否为超码,可设计一个有α函数确定的属性集(α*)算法,如果确定的属性集包含了R关系模式所有属性,则集合α是超码。 
属性集闭包的作用:

&属性集闭包定义:令α为一属性集,我们称函数依赖集F下有α函数确定的所有属性的集合为F下α的闭包,记为α*。 
算法:

result:=α 
while(result发生变化) 
for each 函数依赖β→λ inF do

begin

if β⊆result then result:=result∩λ ; 
end

属性依赖集闭包举例:

 例如,已知关系模式R(U,F),U={A,B,C,D,E,G},F={AB→C,D→EG,C→A,BE→C,BC→D,AC→B,CE→AG},求(BD)+ 
   解: 
   ① (BD)+ = {BD}; 
   ② 计算(BD)+ ,在F中扫描函数依赖,其左边为B,D或BD的函数依赖,得到一个D→EG。所以,(BD)+= {BDEG}。 
   ③ 计算(BD)+,在F中查找左部为BDEG的所有函数依赖,有两个:D→EG和BE→C。所以(BD)+={(BD)∪EGC}={BCDEG}。 
   ④ 计算(BD)+,在F中查找左部为BCDEG子集的函数依赖,除去已经找过的以外,还有三个新的函数依赖:C→A,BC→D,CE→AG。得到(BD)+={(BD)∪ADG}={ABCDEG}。 
   ⑤ 判断(BD)+=U,算法结束。得到(BD)+={ABCDEG}。 
  说明:上面说明(B,D)是该关系模式的一个超码。 
   
属性集闭包的作用: 
1:判断α是否为超码,通过计算α,看α是否包含了R中所有属性。 
2:通过验证是否β⊆α*,验证函数依赖α→β是否成立(证明正则覆盖)

三、—正则覆盖(canonical cover):

&无关项(extraneous attribute)定义:若果去除函数依赖中的属性不会改变函数依赖的闭包,就称该属性是无关的。 
形式定义: 
●如果A∈α并且F逻辑蕴涵(F-{α→β})U{(A-α)→β},则A在α是无关的 
●如果A∈β并且函数依赖{F-{α→β})U{α→(β-A)}逻辑蕴涵F,则A在β是无关的(下面有例题)

检验方法: 
令R为一关系模式,F是在R上成立的给定的函数依赖集。考虑依赖α→β上的属性A。 
●如果A∈α,令λ=α-{A},并且计算λ→β是否可以由F推出。 
●如果A∈β,F’=(F-{α→β})U{α→(β-A)},并检验α→A是否能够由F’推出。

&正则覆盖定义:F的正则覆盖Fc是一个依赖集,使得F与Fc相互逻辑蕴涵。此外,还包含如下性质: 
●Fc中任何函数依赖都不含无关属性。 
●Fc中函数依赖左半部分都是唯一的。即,Fc中不存在α1→β1,α2→β2,满足α1=α2。

正则覆盖举例:

可证明Fc与F具有相同的闭包,验证是否满足Fc等价于验证是否满足F。 
设:R(A,B,C)及F{A→BC,B→C,A→B,AB→C} 
求Fc? 
解 
法一:运用算法和定义 
令Fc=F={A→BC,B→C,A→B,AB→C} 
①合并A→BC,A→B 为:A→BC 
得:Fc={A→BC,B→C,AB→C} 
②A在AB→C中是无关的,因为Fc逻辑蕴涵(Fc-{α→β})U{(A-α)→β}={B→C,AB→C} 
得Fc={A→BC,B→C} 
③ C在A→BC中是无关的,(Fc-{α→β})U{α→(β-A)}={A→B,B→C}逻辑蕴涵Fc。 
得:Fc={A→B,B→C} 
法二:可利用上面检验方法检验。(略)

四—无损连接:

设关系模式R与函数依赖集F,R分解为R1,R2,此分解是无损的必须满足:α=R1∩R2是R1或R2的超码,可利用属性集闭包验证。

五、—-保持依赖:

保持依赖的判断: 
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。 
如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步判断。 
该方法的表述如下: 
算法二: 
对F上的每一个α→β使用下面的过程: 
result:=α;

while(result发生变化)do

for each 分解后的Ri

t=(result∩Ri)+ ∩Ri 
result=result∪t

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

无损连接与保持依赖举例:

●设关系模式R(U,F),其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足 (43) 。 
(43) A.具有无损连接性、保持函数依赖 
B.不具有无损连接性、保持函数依赖 
C.具有无损连接性、不保持函数依赖 
D.不具有无损连接性、不保持函数依赖

先做无损链接的判断。R1∩R2={C},计算C+。 
Result=C 
由于C→D,C∈result,所以result=result∪D=CD 
可见C是R2的超码,该分解是一个无损分解。 
再做保持依赖的判断。 
A→BC,BC→E, E→A都在R1上成立(也就是说每一个函数依赖左右两边的属性都在R1中),C→D在R2上成立,因此给分解是保持依赖的。

选A。

再看一个复杂点的例题。

●给定关系模式R(U,F),U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候选关键字为 
(40) ,则分解ρ={R1(ABCE),R2(CD)}满足 (41) 。 
(40) A.ABD 
B.ABE 
C.ACD 
D.CD 
(41) A.具有无损连接性、保持函数依赖 
B.不具有无损连接性、保持函数依赖 
C.具有无损连接性、不保持函数依赖 
D.不具有无损连接性、不保持函数依赖

看见了吧,和前面一题多么的相像! 
对于第一问,分别计算ABCD四个选项的闭包, 
(ABD)+ = { ABDE } 
(ABE)+ = { ABE } 
(ACD)+ = { ABCDE } 
(CD)+ = { ABCDE } 
选D。

再看第二问。 
先做无损链接的判断。R1∩R2={C},计算C+。 
result=C 
因此C既不是R1也不是R2的超码,该分解不具有无损分解性。 
再做保持依赖的判断。 
B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,因此需做进一步判断。 
由于B→A,A→E,AC→B都是被保持的(因为它们的元素都在R1中),因此我们要判断的是D→A是不是也被保持。

对于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。

、基于多值依赖的范式:

4NF定义:

4NF是比BCNF更加严格的范式,属于BCNF的范式一定属于4NF范式,但属于4NF不一定属于BCNF

、范式判断

方法: 
充分运用属性集闭包判断是否属于BCNF, 
再判断是否属于3NF,此处主要要求是候选码,把判断出来的超码进行拆分,在求独自的属性闭包集,判断是否是超码。是,则不是候选码,反之亦然。(候选码:最小的超码)。

四、BCNF与3NF比较:

4NF定义:

4NF是比BCNF更加严格的范式,属于BCNF的范式一定属于4NF范式,但属于4NF不一定属于BCNF

五、关系型数据库设计总结:

关系数据库(范式判断、函数依赖、无损分解、正则覆盖)相关推荐

  1. 数据库部分函数依赖、传递函数依赖的区别以及范式判断

    说到部分函数依赖,传递函数依赖,必须谈到2个概念,"非主属性"和"主属性". 主属性:组成候选码的属性,就是主属性.例如,属性集{学号,姓名,身份证号码,联系电 ...

  2. 关系数据库范式粗略理解

    粗略看了一下关系数据库范式介绍,简单记录一下自己的理解 第一范式:指属性达到原子性,即属性不可再进行分割了.例如一张person 表,其中有个字段是个人信息p_info,这个个人信息可再分割成姓名,性 ...

  3. 3.6.2数据库系统-范式判断:范式分类、第一范式、第二范式、第三范式、BC范式

    3.6.2数据库系统-范式判断:范式分类.第一范式.第二范式.第三范式.BC范式 范式分类 第一范式 例题 第二范式 例题 第三范式 例题 BC范式 例题 范式分类 逐步优化以解决问题:插入异常.删除 ...

  4. 数据库范式判断及分解技巧

    这个博客就当自己的笔记了,写的不好不对的地方,大家多多指教啦.数据库中的范式是考试中必考的重点,也是应用中比较实用的操作标准.不说废话了,下面将分段来从不同深度开始说. [前驱知识补充] 函数依赖 简 ...

  5. 超码、候选码、主码(主键)、主属性、非主属性、关系数据库中的依赖、关系数据库范式、反范式

    超码:可以区分记录的一个属性或多个属性的集合. 候选码:超码的最小集,即包含最少属性的超码.超码的最小集可以有多个,即多个集合大小相同,但元素构成不完全相同的最小集. 主码(主键):被选中的一个候选码 ...

  6. 主码求法,范式判断,最小函数依赖求法

    发现在模式分解这里还是有网络上的资源蛮少,讲这个东西的人蛮少.而且大家发表的文章,几乎是一模一样的,说的话,举得的例子.所以,写一个尽量让大家都能理解的方法.我现在就说一哈,书本上的定义,我自己的理解 ...

  7. 关系数据库范式(1NF,2NF,3NF,BCNF,4NF,5NF)全解析

    1 范式的基本概念 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小.没有冗余的数据库未必是最好的数据库 ...

  8. 关系数据库范式及1NF、2NF、3NF和BCNF

    关系规范化技术涉及一系列规则,实施这些规则,可以确保关系数据库被规范到相应程度.规范化范式(Normal Forma,NF)是关系表符合特定规范化程度的模式.规范化范式的种类与函数依赖有着直接的联系. ...

  9. 关系数据库基础:函数依赖知识笔记

    1.函数依赖的定义 设R(U)是属性集U.上的关系模式,X, Y是U的子集.若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X集合上的属性值相等,而在Y上的属性值不等, 则称X函数确定Y ...

  10. 关系数据库——范式/反范式的利弊权衡和建议

    范式(避免数据冗余和操作异常) 函数依赖 A->B  A和B是两个属性集,来自同一关系模式,对于同样的A属性值,B属性值也相同 平凡的函数依赖 X->Y,如果Y是X的子集 非平凡的函数依赖 ...

最新文章

  1. golang 操作 ini配置文件
  2. 【Android工具】更正视频流媒体播放器测试情况
  3. ribbon负载均衡@LoadBalanced
  4. portal for arcgis 10.4的安装和配置及遇到的问题
  5. ACL2020 | FastBERT:放飞BERT的推理速度
  6. 《TableStore最佳实践:轻松实现轨迹管理与地理围栏》
  7. Javaimport以及Java类的搜索路径
  8. MYSQL C API风格demo
  9. Joomla网站的移植步骤
  10. C语言程序设计知识必备pdf,C语言程序设计基础知识要点.pdf
  11. 魔兽世界模型文件.m2 在D3D下的渲染
  12. 360 网站服务器漏洞扫描,360Webscan
  13. 团队协作工具,如何加强团队协作能力
  14. 今天开机发现,在光标左边多了一个长方形的带有箭头的,怎么去掉?
  15. 【转】推荐系统入门实践:世纪佳缘会员推荐(完整版)
  16. matlab里面sin函数是角度,matlab-如何用matlab编写sin函数要求定义一 – 手机爱问
  17. Python小测验(01)
  18. Linux如何ping本机IP,Linux ping6 本地ipv6地址无效的参数
  19. java redis使用卡死_注意!Redis使用不当可能导致应用卡死
  20. javascript中的prototype原型、_proto_属性、原型链

热门文章

  1. 微信朋友圈装x代码_微信朋友圈写入代码 微信朋友圈代码大全
  2. Verilog学习 | 数字下变频与脉冲压缩的综合仿真与硬件实现
  3. USB转串口那些事儿—USB转串口工作原理及应用
  4. 【Front Plant Sci】LvMYB5 和 LvMYB1转录因子调控百合花青素合成
  5. 最新谷歌算法面试真题:将字符串翻转到单调递增
  6. 快捷键: Windows下利用微信快速截图
  7. GAN-评价指标IS以及FID、KID
  8. 关于将Tesorflow的SavedModel模型转换成tflite模型
  9. 2021年新安全生产法知识考试题库
  10. 接入交换机下pc获取不了ip问题处理