文章目录

  • 范式
    • 什么是范式
    • 函数依赖
      • 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的关系模式必然满足下列结论:

  1. 所有非主属性都完全依赖于每个候选码
  2. 所有主属性都完全依赖于每个不包含它的候选码。
  3. 没有任何属性完全函数依赖于非候选码的任一组属性。

因此,BCNF不仅排除了任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖,而且派出了主属性之间的传递依赖。BCNF确保了通过函数依赖不能再查出任何冗余,即只考虑函数依赖关系时,BCNF已是最好的范式。

做题方法

求候选码

将关系模式r(R)里的所有属性分为4类

  • L:只存在依赖集左边的属性(一定是候选码的属性)
  • R:只存在依赖集右边的属性
  • LR:存在于依赖集左右两边的属性(可能是候选码的属性)
  • N:不存在于依赖集的属性

求候选码顺序

  1. 将关系模式r(R)里的L类和LR类属性写出来
  2. 求L类里的所有属性组成的属性集的闭包
  • 如果闭包等于r(R)里的所有属性,那么该属性集就是候选码,到此结束
  • 不等于则进入第3步
  1. 将LR类里的属性逐个加进L类的属性集,然后求新属性集的闭包
  • 如果闭包等于r(R)里的所有属性,那么该新属性集就是候选码;
  • 如果不是则该新属性集不是候选码;
  • 继续第3步,直至遍历完LR类所有属性

判断最高满足哪种范式

例题

【例1】对于关系模式r(R)=r(A,B,C,D),判断下列关系模式r(R)的候选码和最高满足哪种范式?

  1. F1={C→D,C→A,B→C};
  2. F2={ABC→D,D→A};
  3. F3={A→B,BC→D};

解:

  1. 候选码为:B;因为存在传递依赖,所以最高满足2NF;
  2. 候选码为:ABC和BCD;因为存在依赖D→A,D不是r®的超码,所以最高满足3NF;
  3. 候选码为:AC;因为B部分依赖于候选码AC,所以最高满足1NF。

数据库三范式和BC范式相关推荐

  1. 数据库的三范式及BC范式

    数据库的三范式及BC范式 依赖 三范式 第一范式(1NF):唯一性,数据列不可再分割 第二范式(2NF):唯一性,消除非主键元素/列对组合主键中部分元素/列的依赖 第三范式(3NF):独立性,消除传递 ...

  2. 分解三范式和BC范式

    点击此处观看视频作者讲解 R={A B C D E F} F={AE->F,A->B,BC->D,CD->A,CE->F} 在分解三范式和BC范式之前先求候选键 具体做法 ...

  3. mysql三大范式和反范式_数据库范式:三大范式、BC范式和反范式化

    一.什么是数据库范式 无规矩不成方圆,同理范式是数据表设计的一些约束和规范.为了让各个属性间的关系更加合理,减少数据冗余. 一般来说,主要满足 3NF 就可以了,因为范式过高,虽然对数据关系有更好的约 ...

  4. 第二、三范式与BC范式的区别

    在正式开始之前,先来明确以下几个概念: 1.码:能唯一确定一条记录的一个/多个属性.码包括主码和候选码.任意一个候选码也能作为主键.其中主码/候选码的任意一个真子集都不能确定一条记录. 2.主属性:构 ...

  5. 数据库的范式,第一、二、三、四、五范式、BC范式,为什么分不清

    这件事,怪我. 数据库范式 的 来历 数据库的规范化(上一篇博客有写到)的程度不同,便有了这么多种范式.数据库范式是数据库设计必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库,甚至设 ...

  6. 数据库三大范式、BC范式、第四范式

    目录 第一范式(1NF):原子性(存储的数据应该具有"不可再分性") 第二范式(2NF):唯一性 (消除非主键部分依赖联合主键中的部分字段)(一定要在第一范式已经满足的情况下) 第 ...

  7. 对数据库三大范式及BC范式的理解

    1.第一范式:数据库的字段是单一属性,不可再分 不能是复合属性,如果存在,应该拆分为多个属性 不能是多值属性,如果存在,应该建立一个实体,而让此属性与其存在1对多的关系) 不能是重复属性 2.第二范式 ...

  8. MySQL之库表设计篇:一到五范式、BC范式与反范式详解

    引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...

  9. 数据库范式概念以及范式分解详解

    几个重要知识点 平凡函数依赖与非平凡函数依赖 X→Y,但Y⊈X则称X→Y是非平凡的函数依赖. X→Y,但Y⊆X 则称X→Y是平凡的函数依赖. 完全函数依赖与部分函数依赖 在R(U)中, 如果X→Y,并 ...

最新文章

  1. Tensorflow:如何保存/恢复模型?
  2. python能表示多大整数_Python无法表示99999999999999999999这样大的整数。
  3. h264 I帧的判断
  4. 电机入门之路系列1--减速步进电机的原理
  5. 《花开在眼前》听得泪流满面
  6. hashmap value为null_从这五个方面看hashmap,新手一遍就能懂
  7. 关于ibatis.net框架(NPetshop学习)
  8. python 多继承与super使用详解_Python super()方法、多继承以及MRO顺序
  9. 实例讲解朴素贝叶斯分类器
  10. Seaborn学习笔记4
  11. Windows电脑上最好的3个azw3阅读器
  12. 尚学堂 马士兵 struts_2视频教程 笔记心得 1——30课详解
  13. Cry with DX11
  14. matlab中龙贝格公式,龙贝格求积公式matlab
  15. Centos校准时间
  16. android 百度地图大头针,百度地图API 地理位置获取和大头针显示当前位置
  17. Linux内核regulator架构和编写
  18. OBS_Classic经典版框架
  19. CVPR 2022 论文列表(持续更新)
  20. 用户标签体系的搭建方法

热门文章

  1. 正则表达式匹配标点符号
  2. APP跳转应用商店“求个好评“,“去评价“等,实现不同手机品牌跳转对应的应用平台
  3. ExtJs 入门教程十五[列模型 :ColumnModel]
  4. 放大镜老是一卡一卡的?pointer-events: none穿透?
  5. 【录音取证篇】录音设备鉴定名词解释
  6. Oneplus9Pro变砖后修复解锁刷回lineage18
  7. 胶济车殇十二幸存者忆翻车一刻 有人折断手臂求生
  8. Redis的图形化客户端(RESP)的安装及使用
  9. 【软件工程】02组软件工程组队项目——课程管理小助手需求文档
  10. 总结系列-Android画中画模式-看这篇就够啦