数据库三范式和BC范式
文章目录
- 范式
- 什么是范式
- 函数依赖
- 1. 函数依赖的定义
- 2. 平凡函数依赖与非平凡函数依赖
- 3. 完全函数依赖和部分函数依赖
- 4. 传递函数依赖
- 第一范式(1NF)——码
- 定义
- 目标
- 第二范式2NF——全部是码
- 定义
- 目标
- 第三范式3NF——仅仅是码
- 定义
- 目标
- Boyce-Codd范式BCNF
- 定义
- 做题方法
- 求候选码
- 判断最高满足哪种范式
- 例题
- 【例1】对于关系模式`r(R)`=r(A,B,C,D),判断下列关系模式`r(R)`的候选码和最高满足哪种范式?
范式
什么是范式
范式 是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。
满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
函数依赖
在学习范式前,我们还需要了解函数依赖。
1. 函数依赖的定义
函数依赖(functional dependency,FD)是一种完整性约束,是现实世界事物属性之间的一种制约关系,它广泛地存在于现实世界中。
图1可称α函数确定β,或β函数依赖于α,记作α→β。
2. 平凡函数依赖与非平凡函数依赖
3. 完全函数依赖和部分函数依赖
注:可以看出,当α是单属性是,α→β完全函数依赖总是成立的。
4. 传递函数依赖
若α→β,β→γ和α→γ都是非平凡函数依赖,且β→α不成立,则称α→γ是传递函数依赖。
第一范式(1NF)——码
定义
如果一关系模式r(R)
的每个属性对应的域值都是不可分的,则称r(R)
属于第一范式(1NF),记为r(R)
∈1NF。
目标
将基本数据划分成称为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。
第二范式2NF——全部是码
定义
如果一个关系模式r(R)
∈1NF,且所有非主属性都完全依赖于r(R)
的候选码,则称r(R)
属于第二范式(2NF),记作r(R)
∈2NF。
设有一关系模式
r(R)
,α ⊆ R。若α包含在
r(R)
的某一个候选码中,则称α主属性,否则α为非主属性。如:
r(R)
=r(A,B,C,D),候选码为AB和AD,那么A、B、D就是主属性,C是非主属性。
也就是说,对于满足1NF的关系模式,如果有复合候选码(即多个属性共同构成的候选码),那么非主属性不允许依赖于部分的候选码属性,必须完全依赖于全部的候选码属性——全部是码。
目标
将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性通过关系模式分解到其他表当中。
第三范式3NF——仅仅是码
定义
如果一个关系模式r(R)
∈2NF,且所有非主属性都直接依赖于r(R)
的候选码(即不存在非主属性传递依赖于候选码),则称r(R)
属于第三范式(3NF),记为r(R)
∈3NF。
也就是说,对于满足2NF的关系模式,非主属性不能依赖于另一个(组)非主属性(这样就形成了对于候选码的传递依赖),即非主属性只能直接依赖于候选码——仅仅是码。
目标
将不直接依赖于候选码(即传递依赖于候选码)的非主属性通过关系模式分解到其它表中去。
总之,所有的非主属性应该直接依赖于(即不能存在传递依赖,这是3NF的要求)全部候选码(即必须完全依赖,不能存在部分依赖,这是2NF的要求)。
Boyce-Codd范式BCNF
定义
给定关系模式r(R)
∈1NF,函数依赖集F,若F+(F的闭包)中的所有函数依赖α→β至少满足下列条件之一:
- α→β是平凡函数依赖(即β⊆α)
- α是
r(R)
的一个超码(即α中包含r®的候选码)
则称r(R)
属于Boyce-Codd范式,记为r(R)
∈BCNF。
从函数依赖角度可得出,一个满足BCNF的关系模式必然满足下列结论:
- 所有非主属性都完全依赖于每个候选码
- 所有主属性都完全依赖于每个不包含它的候选码。
- 没有任何属性完全函数依赖于非候选码的任一组属性。
因此,BCNF不仅排除了任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖,而且派出了主属性之间的传递依赖。BCNF确保了通过函数依赖不能再查出任何冗余,即只考虑函数依赖关系时,BCNF已是最好的范式。
做题方法
求候选码
将关系模式r(R)
里的所有属性分为4类
- L:只存在依赖集左边的属性(一定是候选码的属性)
- R:只存在依赖集右边的属性
- LR:存在于依赖集左右两边的属性(可能是候选码的属性)
- N:不存在于依赖集的属性
求候选码顺序
- 将关系模式
r(R)
里的L类和LR类属性写出来- 求L类里的所有属性组成的属性集的闭包
- 如果闭包等于
r(R)
里的所有属性,那么该属性集就是候选码,到此结束- 不等于则进入第3步
- 将LR类里的属性逐个加进L类的属性集,然后求新属性集的闭包
- 如果闭包等于
r(R)
里的所有属性,那么该新属性集就是候选码;- 如果不是则该新属性集不是候选码;
- 继续第3步,直至遍历完LR类所有属性
判断最高满足哪种范式
例题
【例1】对于关系模式r(R)
=r(A,B,C,D),判断下列关系模式r(R)
的候选码和最高满足哪种范式?
- F1={C→D,C→A,B→C};
- F2={ABC→D,D→A};
- F3={A→B,BC→D};
解:
- 候选码为:B;因为存在传递依赖,所以最高满足2NF;
- 候选码为:ABC和BCD;因为存在依赖D→A,D不是r®的超码,所以最高满足3NF;
- 候选码为:AC;因为B部分依赖于候选码AC,所以最高满足1NF。
数据库三范式和BC范式相关推荐
- 数据库的三范式及BC范式
数据库的三范式及BC范式 依赖 三范式 第一范式(1NF):唯一性,数据列不可再分割 第二范式(2NF):唯一性,消除非主键元素/列对组合主键中部分元素/列的依赖 第三范式(3NF):独立性,消除传递 ...
- 分解三范式和BC范式
点击此处观看视频作者讲解 R={A B C D E F} F={AE->F,A->B,BC->D,CD->A,CE->F} 在分解三范式和BC范式之前先求候选键 具体做法 ...
- mysql三大范式和反范式_数据库范式:三大范式、BC范式和反范式化
一.什么是数据库范式 无规矩不成方圆,同理范式是数据表设计的一些约束和规范.为了让各个属性间的关系更加合理,减少数据冗余. 一般来说,主要满足 3NF 就可以了,因为范式过高,虽然对数据关系有更好的约 ...
- 第二、三范式与BC范式的区别
在正式开始之前,先来明确以下几个概念: 1.码:能唯一确定一条记录的一个/多个属性.码包括主码和候选码.任意一个候选码也能作为主键.其中主码/候选码的任意一个真子集都不能确定一条记录. 2.主属性:构 ...
- 数据库的范式,第一、二、三、四、五范式、BC范式,为什么分不清
这件事,怪我. 数据库范式 的 来历 数据库的规范化(上一篇博客有写到)的程度不同,便有了这么多种范式.数据库范式是数据库设计必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库,甚至设 ...
- 数据库三大范式、BC范式、第四范式
目录 第一范式(1NF):原子性(存储的数据应该具有"不可再分性") 第二范式(2NF):唯一性 (消除非主键部分依赖联合主键中的部分字段)(一定要在第一范式已经满足的情况下) 第 ...
- 对数据库三大范式及BC范式的理解
1.第一范式:数据库的字段是单一属性,不可再分 不能是复合属性,如果存在,应该拆分为多个属性 不能是多值属性,如果存在,应该建立一个实体,而让此属性与其存在1对多的关系) 不能是重复属性 2.第二范式 ...
- MySQL之库表设计篇:一到五范式、BC范式与反范式详解
引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...
- 数据库范式概念以及范式分解详解
几个重要知识点 平凡函数依赖与非平凡函数依赖 X→Y,但Y⊈X则称X→Y是非平凡的函数依赖. X→Y,但Y⊆X 则称X→Y是平凡的函数依赖. 完全函数依赖与部分函数依赖 在R(U)中, 如果X→Y,并 ...
最新文章
- Tensorflow:如何保存/恢复模型?
- python能表示多大整数_Python无法表示99999999999999999999这样大的整数。
- h264 I帧的判断
- 电机入门之路系列1--减速步进电机的原理
- 《花开在眼前》听得泪流满面
- hashmap value为null_从这五个方面看hashmap,新手一遍就能懂
- 关于ibatis.net框架(NPetshop学习)
- python 多继承与super使用详解_Python super()方法、多继承以及MRO顺序
- 实例讲解朴素贝叶斯分类器
- Seaborn学习笔记4
- Windows电脑上最好的3个azw3阅读器
- 尚学堂 马士兵 struts_2视频教程 笔记心得 1——30课详解
- Cry with DX11
- matlab中龙贝格公式,龙贝格求积公式matlab
- Centos校准时间
- android 百度地图大头针,百度地图API 地理位置获取和大头针显示当前位置
- Linux内核regulator架构和编写
- OBS_Classic经典版框架
- CVPR 2022 论文列表(持续更新)
- 用户标签体系的搭建方法
热门文章
- 正则表达式匹配标点符号
- APP跳转应用商店“求个好评“,“去评价“等,实现不同手机品牌跳转对应的应用平台
- ExtJs 入门教程十五[列模型 :ColumnModel]
- 放大镜老是一卡一卡的?pointer-events: none穿透?
- 【录音取证篇】录音设备鉴定名词解释
- Oneplus9Pro变砖后修复解锁刷回lineage18
- 胶济车殇十二幸存者忆翻车一刻 有人折断手臂求生
- Redis的图形化客户端(RESP)的安装及使用
- 【软件工程】02组软件工程组队项目——课程管理小助手需求文档
- 总结系列-Android画中画模式-看这篇就够啦