当前位置:网站首页>【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂「建议收藏」
【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂「建议收藏」
2022-07-23 15:48:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
本来是为了复习数据库期末考试,结果找了一圈都没有发现比较好的解释,通过查阅资料和总结,为大家提供通俗易懂的解法,一听就会!并且配有速记口诀!介是你没有玩过的船新版本包含最小依赖集求法候选码求法
在模式分解之前,首先对于1NF,2NF,3NF,BCNF做一个简明扼要的介绍。
1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。
2NF要求属性完全依赖于主键,不能存在仅依赖主关键字一部分的属性。
3NF要求每一个非主属性既不部分依赖于码也不传递依赖于码。
BCNF消除了主属性对候选码的部分和传递函数依赖。
注:1.相对于BCNF,3NF允许存在主属性对候选码的传递依赖和部分依赖。
2.BCNF比较抽象,略作解释:在学生信息表里,学号是一个候选码,学号可确定学生姓名;(班级,学生姓名)也是一组候选码,有(班级,学生姓名)->学号,因此在主属性间形成了传递依赖。
3.若对概念不清晰,关于码、候选码、主属性、非主属性的解释可参看:
https://blog.csdn.net/sumaliqinghua/article/details/85872446#commentBox
我们的重点是讲解范式分解:
一、3NF分解
分为保持依赖和无损连接
为了说明求解保持依赖,我们先要会求最小依赖集
(1)最小依赖集求法:
口诀:右侧先拆单,依赖依次删。
还原即可删,再拆左非单。
通过求下面的最小依赖集对口诀进行解释,
(2)3NF分解:
口诀:
保函依赖分解题,先求最小依赖集。
依赖两侧未出现,分成子集放一边,剩余依赖变子集。
若要连接成无损,再添候选做子集。
下面通过几道例题讲解口诀:
例1.已知R(ABCDE), F={A ->D,E->D,D->B,BC->D,DC->A}求保持函数依赖的3NF分解,和具有无损连接性及保持函数依赖的3NF分解
第一步:保函依赖分解题,先求最小依赖集。先求出R的最小依赖集,可得F={A ->D,E->D,D->B,BC->D,DC->A}
第二步:依赖两侧未出现,分成子集放一边。首先可以发现没有不出现在两侧的元素不用单独分出一个子集,“剩余依赖变子集”然后我们将各依赖分别划分为子集得到:{AD} {ED} {DB} {BCD} {DCA},即为所求保持函数依赖的3NF分解
第三步:若要连接成无损,再添候选做子集。
(1)候选码的求解:所谓候选码即能决定整个关系的,我们通过找未出现在依赖右边的和两侧均未出现的元素即可求得,
(2)可以发现C E未出现在右边,因此候选码为{CE}。故所求具有无损连接性及保持函数依赖的3NF分解为{AD} {ED} {DB} {BCD} {DCA} {CE}
例2.关系模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},将关系模式分解为3NF且保持函数依赖
将关系模式分解为3NF且保持函数依赖:
第一步:保函依赖分解题,先求最小依赖集。先求出R的最小依赖集,
假设B->G冗余,则(B)+=BD,没有G故不冗余。
假设CE->B冗余,则(CE)+=CEGDA,没有B故不冗余。
假设C->A冗余,则(C)+=CD,故不冗余。
一次可以得到最小函数依赖集Fm={B->G,CE->B,C->A,B->D,C->D}
第二步:依赖两侧未出现,分成子集放一边,剩余依赖变子集。首先可以发现没有不出现在两侧的元素,然后我们将各依赖分别划分为子集得{BG} {CEB} {CA} {BD} {CD},即为所求保持函数依赖的3NF分解
第三步:若要连接成无损,再添候选做子集。找到R的一个候选码为{CE}。故所求具有无损连接性及保持函数依赖的3NF分解为{BG} {CEB} {CA} {BD} {CD} {CE} (注:范式分解并不唯一,正确即可)
二、BCNF分解:
将关系模式R<U,F>分解为一个BCNF的基本步骤是
1)先求最小依赖集,候码非码成子集
3)余下左侧全候码,完成BCNF题。
例.关系模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},将关系模式分解为3NF且保持函数依赖
将关系模式分解为3NF且保持函数依赖:
第一步:先求最小依赖集。可以发现CE->G多余,因此最小依赖集为F={B->G,CE->B,C->A,B->D,C->D}。
第二步:候码非码成子集。由于候选码为(CE)因此将CE->B划分出子集(BCE),而B->G,B->D左侧均不含主属性(C、E)中的任何一个故划分出(BG),(BD)
第三步:此时剩余依赖F={C->A,C->D}剩余元素{A,C,D}检查发现函数依赖左侧都是候选码即完成BCNF分解,如果不满足则继续分解余下的。
于是BCNF分解的最后结果为{(BG),(BD),(ACD),(BCE)}。
如有疑问请在评论区留言,如有帮助麻烦右上角点个赞~~蟹蟹
三、总结
1.闭包
2.候选码
3.最小依赖集
4.3NF分解
5.BCNF分解
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126601.html原文链接:https://javaforall.cn
边栏推荐
- MySQL六十六问,两万字+五十图详解含(答案解析)
- Data crawling and display of e-commerce platform based on scratch
- 机器学习(9)——特征工程(3)(补充)
- leetcode:剑指 Offer II 115. 重建序列【图论思维 + 入度考虑 + 拓扑排序】
- ContextLoaderListener vs DispatcherServlet
- Specify the port number in topology.yaml
- Eric6安装问题
- CreateFileMapping 函数「建议收藏」
- Trust guessing numbers game
- 一台Linux机器上启动多个redis实例
猜你喜欢

Sentinel 介绍与微服务整合

多线程编程

Keras之二分类问题

MySQL8.0.23四次重装都失败在 'Writing configuration file'

Salary high voltage line

配置Gom引擎登录器出现错误提示:没有发现必备补丁文件!

El input usage

MYSQL基础及性能优化

Use moment to get the date of the current day and the next day
![Leetcode: Jianzhi offer II 115. reconstruction sequence [graph theory thinking + in degree consideration + topological sorting]](/img/cc/1438381ccc8d7fe147bb9c5e7e1742.png)
Leetcode: Jianzhi offer II 115. reconstruction sequence [graph theory thinking + in degree consideration + topological sorting]
随机推荐
Sentinel introduction and microservice integration
IDEA Download Sources报错 Connection refused的解决方法
多线程编程
MySQL executes alter table XX add column with duplicate entry error
Use of computed in projects
What about the reason why GOM and GEE set up a black screen and the fact that individual equipment maps are not displayed?
Keras之二分类问题
Mpu9250 sensor
RS232 DB9 serial port device
aspose的仓库地址
Did not find the necessary patch file 'newopui.pak'?
VIM notes
Pdman, a database modeling tool comparable to PowerDesigner [easy to understand]
RS232 DB9串口设备
Distributed transaction solution
LDAP统一认证服务解决方案[通俗易懂]
“如今,99.9% 以上的代码都是垃圾!”
MySQL field modification
curl命令详解[通俗易懂]
Eric6安装问题