-
2020-07-27 23:19:57
模式分解
第一范式:关系模式R中的每个关系rd的属性值都是不可再分的原子值。
第二范式:关系模式R是1NF,不存在局部依赖,那么称R是2NF。
第三范式:关系模式R是2NF,不存在传递依赖,那么称R是3NF
此处只讲模式分解的具体方法,讲解参考施伯乐《数据库系统教程》4.4节关系模式的范式。
给定1NF如下:
(学号,姓名,系名,系主任,课程名,分数)一、1NF与2NF的转换
方法定义(引自施伯乐书籍):
设关系模式R(U),主键是W,R上还存在FD X—>Z,并且Z是非主属性和X∈W,那么W—>Z就是一个局部依赖。此时应把R分解成两个模式:
R1(XZ),主键是X;
R2(Y),Y=U-Z,主键仍是XZ,外键X(参照R1)。
利用外键和主键的链接,可以重新得到R。
如果R1和R2还不是2NF,重复上述过程,一直到每一个关系模式都是2NF为止。看上去有点绕,其实很简单:
- 确定模式R的主键W(此处为
学号,课程名
) - 看主键X的真子集是否存在FD(函数依赖)X->Z,其中X是W的真子集,Z是非主属性。如果存在函数依赖X–>Z,则模式R可以进行分解;否则就不能分解,结束
- RI就为(X,Z)
- R2为(U-Z)
- 继续对R1和R2重复上述步骤
给定
(学号,姓名,系名,系主任,课程名,分数)
为例,进行模式分解:
U=(学号,姓名,系名,系主任,课程名,分数)- 确定主键X=(学号,课程名)
- 确定存在依赖,学号->(姓名,系名,系主任),即X=学号,Z=(姓名,系名,系主任)
- R1(学号,姓名,系名,系主任),即XZ=(学号,姓名,系名,系主任)
- R2(学号,课程名,分数),即Y=U-Z=(学号,课程名,分数)
- 再次判断是否有局部依赖
分解后得到2NF:
R1(学号,姓名,系名,系主任)
R2(学号,课程名,分数)二、2NF与3NF转换
方法定义:
设关系模式R(U),主键是W,R上还存在FD X—>Z,并且Z是非主属性,Z∉X,X不是候选键,这样W—>Z就是一个传递依赖。此时应把R分解成两个模式:
R1(XZ),主键是X
R2(Y),其中Y=U-Z,主键仍是W,外键是X(参照R1)。
利用外键和主键匹配机制,可以得到R
如果R1和R2还不是3NF,重复上述过程,一直到每一个关系模式都是3NF为止。对上面分解后的2NF进行分解
R1(学号,姓名,系名,系主任)
R2(学号,课程名,分数)
模式分解:
1.先判断R1,主键是学号,即W=学号;
2.存在传递依赖,学号—>系名—>系主任,即X=系名,Z=系主任;如不存在依赖则结束
3.得到R11(系名,系主任),即XZ=(系名,系主任);
4.得到R12(学号,姓名,系名),即Y=U-Z=(学号,姓名,系名);
5.对R2同样进行上述判断;
6.对分解后模式重复上述步骤分解后得到3NF:
R11(系名,系主任)
R12(学号,姓名,系名)
R2(学号,课程名,分数)更多相关内容 - 确定模式R的主键W(此处为
-
范式分解
2017-04-18 19:06:58在数据库设计中范式分解是我们经常会用到的一种优化方法,这部分的概念还是非常的多的,接下来我会首先介绍范式分解的相关概念,然后具体介绍范式分解的方法。相信静下心来读完这边文章对你应该会有点帮助,如果你...在数据库设计中范式分解是我们经常会用到的一种优化方法,这部分的概念还是非常的多的,接下来我会首先介绍范式分解的相关概念,然后具体介绍范式分解的方法。相信静下心来读完这边文章对你应该会有点帮助,如果你准备好了,那么就让我们开始吧~
第一部分 相关概念
1. 函数依赖(FD)
如果A->B,称为A决定B,即当A确定时,B的值唯一
2. 闭包(Closure)
求闭包的过程很简单,比如求A的闭包(A+),只需找到所有只有A在左边的函数依赖,将所有的右边的都加到A的闭包中来,遍历所有的函数依赖,最后不要忘记加上A自己
闭包可以用来求关系模式的key:对于R(A,B,C),若A+ = ABC , 那么可以判定A是R的key。3. 平凡依赖(trivial FD)
称A->A这样的函数依赖为一个平凡的依赖,当然由此我们也知道了非平凡依赖是什么了。
4. 主属性
所有的候选键包含的属性集合是主属性集合
相应的非主属性是所有候选码都不包含的属性5. 范式(Normal Form)
1.第一范式
每个属性都具有原子性,是不可再被细分的
2.第二范式
定义:如果关系模式R是第一范式的,而且关系中每一个非主属性不部分依赖于主键,称R是第二范式的。
所以第二范式的主要任务就是
满足第一范式的前提下,消除部分函数依赖。
什么叫部分依赖呢,比如AB是R(A,B,C)的主键,那么如果有A->C,这就是一个部分函数依赖3.第三范式
在第二范式的基础上,不存在非主属性对码的传递性依赖
举个例子: R(A,B,C),A是主键,如果同时有A->B和B->C,这就是一个传递依赖了4.BC范式
对于所有的非平凡依赖,它的左边必须是一个超码
即在第三范式的基础上,消除了对主属性对码的部分和传递依赖5.第四范式
和BC范式非常相像,对于所有的非平凡多值依赖,左边必须是超码
6. 正则覆盖
&无关项(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。例子:R(A,B,C)
F={A->BC, B->C, A->B, AB->C}F={A->BC, B->C, AB->C}
F={A->BC, B->C}
F={A->B, B->C}
那么了解正则覆盖有什么作用呢?
可证明Fc与F具有相同的闭包,即验证是否满足Fc等价于验证是否满足F,这一点我们一会儿验证范式分解是否正确会用到。7. 无损连接(lossless join)
如果我们把R分解为R1和R2,此分解是无损的必须满足:α=R1∩R2是R1或者是R2的超码。
8. 依赖保持(dependency preserving)
需要验证 {F1 并 F2 并 F3。。。} += F+,即每一个分解出的R包含的函数依赖的并集的闭包和原集F的闭集相等。
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(注意这是一个充分条件!)。如果上一点不成立,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步判断。
对F的每一个A->B 使用以下流程这里的属性闭包是在函数依赖集F下计算出来的。如果result中包含了β的所有属性,则函数依赖α→β。分解是保持依赖的当且仅当上述过程中F的所有依赖都被保持。
当然这个是非常麻烦的,因为要验证所有的函数依赖。所以待会我们会介绍运用正则覆盖简化函数依赖集,减少工作量。
第二部分 范式分解
好了,以上部分是我们要用到的所有相关概念,如果有的概念不是很清楚,建议你看看别的博主的文章,这方面的资料还是很多的。
以下是范式分解的流程:
这样分解后得到的就满足BC范式了
在分解完之后很重要的一点是要对无损性和依赖保持进行检查,如果不能满足,那么宁愿退化成第三范式。 -
数据库范式概念以及范式分解详解
2021-01-03 15:50:49三范式分解(范式分解最终的答案并非是唯一的,和分解的顺序有关!) 三范式分解为保持函数依赖的分解 步骤如下: 例题: 设R,其中: U={C, T, H, R, S, G, X, Y, Z}, F={C→T, CS→G, HR→C,HS→ R, TH→ R, C→X}...-
几个重要知识点
-
平凡函数依赖与非平凡函数依赖
- X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
- X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
-
完全函数依赖与部分函数依赖
在R(U)中,
- 如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → Y。
- 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → Y
-
候选码
设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。
千万需要记住的是候选码与超码之间的区别
-
超码
如果U部分函数依赖于K,即K → U,则K称为超码(Surpkey)。
候选码是最小的超码,即K的任意一个真子集都不是候选码。
-
主码
主码是候选码中的任意一个
-
主属性与非主属性
- 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
- 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
-
全码
整个属性组是码,称为全码(All-key)
-
-
范式
-
第一范式
每个属性不可分割
-
第二范式
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
-
第三范式
消除非主属性对于码的传递依赖
若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。 -
BC范式
消除主属性对码的部分和传递函数依赖
判断:在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
-
无损连接与保持函数依赖性
- 无损连接
无损连接判断
- 保持函数依赖性
一个无损连接的分解不一定具有依赖保持性,反之亦然 !
-
三范式分解(范式分解最终的答案并非是唯一的,和分解的顺序有关!)
-
三范式分解为保持函数依赖的分解
步骤如下:
例题:
设R<U, F>,其中:
U={C, T, H, R, S, G, X, Y, Z},
F={C→T, CS→G, HR→C,HS→ R, TH→ R, C→X}, 将R 分解为3NF,且保持函数依赖。
解:
-
求F的最小函数依赖集
该函数依赖集已经是最小化的
- 查看是否有一个函数依赖X->A,且XA=R。
可以很清楚的看到,并没有这种函数依赖。
-
查看R中的某些属性是否并不在F中出现过
可以很清楚的看到有YZ
-
将最小函数依赖集中的每一个依赖左右两边放到一起
则分解为ρ ={YZ, CTX, CSG, HRC, HSR, THR}
注:这里的CTX放到一起时因为C → \rightarrow →T,C → \rightarrow →X
-
三范式分解既具有无损连接性又能保持函数依赖的分解
非常简单!在原来的基础上加上候选码中的任意一个即可。
例如此题中的候选码为HS
那么在原来的ρ中添加HS即可,但是此处需要注意
∵ HS⊆ HSR
∴ τ= ρ ={CTX, CSG, HRC, HSR, THR, YZ}为满足要求的分解
-
-
BCNF分解(范式分解最终的答案并非是唯一的,和分解的顺序有关!)
-
如何判定BCNF范式呢?
很简单!就是看每个函数依赖的左边是否包含候选码,如果其中有一个不含候选码,则不为BCNF范式。
-
将关系模式转换为BCNF 的无损连接的分解
递归下去,直到出现 Φ \Phi Φ或者出现最终的一个依赖符合BCNF约束则停止分解
例子1:
已知 R (A, B, C), AB为码, 且B->C存在
可知:R不满足BCNF
设 α \alpha α = B, β \beta β = C
则 R 可分解为:
( α \alpha α ⋃ \bigcup ⋃ β \beta β) = (B, C)
(R – ( β \beta β − - − α \alpha α)) = (A, B) 例子2:
-
-
-
-
数据库关系运算范式分解例题
2020-11-21 18:26:06一、 1.假设A能推B:那么每个A1所对应的B的属性值应该一样,由于B的第一行和第三行分别是B1和B3,故A不能推B。 2.假设A能推C:那么每个A1所对应的C的属性值应该一样,由于C的第一行和第三行分别是C1和C2,故A不能推C...一、
1.假设A能推B:那么每个A1所对应的B的属性值应该一样,由于B的第一行和第三行分别是B1和B3,故A不能推B。
2.假设A能推C:那么每个A1所对应的C的属性值应该一样,由于C的第一行和第三行分别是C1和C2,故A不能推C。
3.假设A能推D:那么每个A2所对应的D的属性值应该一样,由于D的第四行和第五行分别是D1和D2,故A不能推D。二、
对B和C和D,以及AB,AC,AD,BC,BD分别作上述假设,
发现只存在C推D,AB推C,AB推D三种关系,
那么主键为AB。
由于没有非主属性部分依赖于主属性(即非主属性们均完全依赖于主属性),故为2NF。
从C推D,AB推C里,得知非主属性D传递依赖于主属性AB(尽管AB可以直接推D,这里仍存在传递依赖),则消除该传递依赖即可满足3NF。
分为**R1(ABC),R2(CD)**即可。 -
【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂
2019-01-10 18:26:14在模式分解之前,首先对于1NF,2NF,3NF,BCNF做一个简明扼要的介绍。 1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。 2NF要求属性... -
三大范式及BCNF范式分解集合
2020-03-22 10:20:07遇到范式更是难解,真就自己阅读自学。好诗好诗 范式简介 数据库范式是一种规范。类似同心圆,最外面一层要求最低,最里面要求最高。 规范的要求从低到高分别为:1NF 2NF 3NF BCNF 4NF 5NF 在日常使用中数据库能达到... -
【函数依赖范式分解】 模式分解算法.doc
2021-09-20 09:54:59【函数依赖范式分解】 模式分解算法.doc -
三范式分解算法
2018-05-28 20:21:00三范式是BC范式的放宽 三范式条件(满足一个即可): 1. α–>β是平凡的函数依赖,除了子集和父集的函数依赖,大多的函数依赖都是非平凡的 2. α是关系模式R的一个超码 ...三范式分解算法伪代码如下: //在关... -
数据库原理的范式分解
2021-06-03 10:22:27数据库原理上面没有讲闭包啥的呀,闭包是在哪讲的???</p> -
范式分解过程
2013-03-10 17:56:54哎呀,这个图好像说得不对吧,第一步说不符合第三范式,其实是不符合第二范式。对于同一个人可以有多种权限这种场景下,这个表是没有主键的呀。 我现在感觉这个示例完全不对了,一直分析道倒数第二步,都不满足第二... -
分解三范式和BC范式
2020-03-13 11:47:21R={A B C D E F} F={AE->...在分解三范式和BC范式之前先求候选键 具体做法如下: L:CE (CE只在箭头的左边) LR:ABD (ABD在箭头的左右两边都有) R:F (F 只在箭头的右边) 事务的基本属性: 原子性... -
BCNF和第三范式的分解算法
2019-12-20 19:18:25范式概念 对于数据库的范式概念我们是经常会用到的,临近期末考试,我自己总结了一下,要不然总是一下子就忘记了。 第一范式:如果一个关系模式R的每个元素都是不可分割即原子的单元,则称这个范式是第一范式。 BCNF... -
数据库系统原理范式分解——保持函数依赖与无损连接性练习题
2020-07-03 12:57:52依赖又无损连接地分解成第三范式,分解正确 的是 A.p={R1(A2,A3, A5), R2(A1,A3,A6), R3(A2,A4,A6) } B.p={R1(A2,A3, A5), R2(A1,A3,A6), R3(A2,A4,A6),R4(A1,A2) } C.p= {R1(A2,A3.A5), R2(A1,A2,A3,A -
数据库考试-范式分解
2010-01-04 22:34:34范式的分解,如何把其他范式分解成第三范式。 -
BCNF范式及其分解方法(对一次Lab作业的总结)
2020-12-24 20:35:58BCNF是比第三范式更严格一个范式。它要求关系模型中所有的属性(包括主属性和非主属性)都不传递依赖于任何候选关键字。也就是说,当关系型表中功能上互相依赖的那些列的每一列都是一个候选关键字时候,该满足BCNF。... -
数据库范式判断及分解技巧
2019-01-12 20:44:11数据库中的范式是考试中必考的重点,也是应用中比较实用的操作标准。不说废话了,下面将分段来从不同深度开始说。 【前驱知识补充】 函数依赖 简单通俗地说就是属性之间是否有确定的关系,比如:学生表(学号,姓名... -
对数据库范式的理解以及无损分解技巧
2020-02-12 20:53:301NF范式 属性列是不可拆的(原子的) 2NF范式 非主属性完全依赖于候选码 3NF范式 在2NF的基础上不存在非主属性传递依赖于候选码(所有非主属性直接依赖于候选码) BCNF范式 所有依赖的左边都包含候选码 ... -
数据库考试题 模式分解例题 范式规范化 3NF BCNF
2009-01-12 11:19:40关于数据库的考题 练习题 很有帮助 范式分解的例题 E-R图 -
数据库BC范式(BCNF)判断和分解
2020-05-13 12:33:49书中的概念: 关系模式R〈U,F〉∈1NF。若X→Y且Y不包含X时X必含有码,则R〈U,F〉∈BCNF。 也就是说,关系模式R〈U,F〉中,若每一个决定因素都包含码,则R〈U,F〉∈BCNF... 所以要想使模式满足BC范式,本例有两种分解方式。 -
软考个人补漏 数据库三大范式 模式分解有损无损
2018-10-16 00:21:32◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 考虑这样一个表:【联系人】(姓名,性别,电话) 如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF... -
数据库范式的分解
2021-05-09 15:04:210x00 满足3NF的函数依赖保持的分解 0x01 满足3NF的函数依赖保持和无损连接的分解 即在第一个算法基础上加上一个候选码 0x02 满足BCNF的无损连接分解 … -
3.4.3范式,保持函数依赖性,无损连接性,模式分解的算法
2022-03-28 10:49:54文章目录范式1NF2NF3NF(通常)BCNF保持函数依赖其中函数依赖集F用最小函数依赖集无损连接性模式分解的算法R转换为3NF既有无损连接性又保持函数依赖性的分解算法 范式 1NF 不能以集合、序列等作为属性。 2NF 非主... -
对数据库三大范式及BC范式的理解
2020-12-14 22:50:471.第一范式:数据库的字段是单一属性,不可再分 不能是复合属性,如果存在,应该拆分为多个属性 不能是多值属性,如果存在,应该建立一个实体,而让此属性与其存在1对多的关系) 不能是重复属性 2.... -
数据库范式(如何拆分符合第三范式的表)
2020-10-24 14:52:42文章目录数据库范式(如何拆分3NF的表)分类第一范式概念第一范式存在的问题第二范式几个概念1.函数依赖2.完全函数依赖3.部分函数依赖4.传递函数依赖5.码创建符合2NF的表第二范式存在的问题第三范式总结(个人理解)... -
关于BC范式分解问题
2017-04-25 18:16:53分解为BC范式后为:T1(学号,姓名,性别,班级,学院,余额);T2(学号,日期,时间,饭卡机代号,消费金额); T3(学号,日期,时间,操作员代号,充值金额);T4(学号,日期,时间,操作员代号,饭卡机代号)... -
关系模式的分解与范式
2017-05-08 16:40:261. 为什么要研究数据库关系模式的分解? 答:因为现有的模式可能会存在一些数据增删改的弊端,比如说:数据冗余太大,更新异常,插入异常,删除异常。因此为了完善数据库的增删改查的功能,需要寻找一种等价的关系... -
【数据库系统原理】第三章 BC范式、第三范式和第四范式
2022-04-04 11:47:12文章目录第三章 关系数据库设计理论3.5 BC范式和第三范式BC范式(BCNF)第三范式(3NF)3.6 多值依赖定义平凡多值依赖多值依赖的推论多值依赖的特性第四范式(4NF) 第三章 关系数据库设计理论 3.5 BC范式和第三范式... -
BCNF分解算法
2018-05-28 19:53:35存在一个关系模式R,并且此关系模式中存在α→βα→βα \to β 违反了BC范式分解条件 设 将此关系模式R 分解为 {R_i} ,其中 i 为1,2,3,4…..n BC分解算法如下所述: result = R R_1 = 空集 for i in 1,2,3,4..... -
BCNF无损分解例题
2022-01-06 11:24:08模式分解BCNF无损连接