当前位置: 首页 > news >正文

数据库——范式

目录

一、概念

二、各范式

第一范式

第二范式

第三范式

BC范式

第四范式

第五范式(略)


一、概念

  1. 基本概念
    1. 关系:通常一个关系对应一张表;
    2. 元组:一行;
    3. 属性:一列;
    4. 码:键;
    5. 超码:能唯一标识一个元组的一个属性或属性组;
    6. 候选码:能唯一标识一个元组的一个属性或属性组,而它的真子集不能,候选码是最小的超码;
    7. 主码:主键,主码是候选码里人为选一个;
    8. 主属性:包含在任意一个候选码中的属性;
    9. 非主属性:不包含在任何码中的属性;
    10. 域:属性的取值范围;
    11. 外键:关系(表)A中的公共属性包含的关键字是另一个关系B的主键,则这个关键字被称为A的外键,A是主表,B是从表。
  2. 范式Normal Form:设计数据库时要求遵循的不同设计规范与要求,不同等级的范式对数据关系有不同等级的约束条件;
    1. 关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)
    2. 总的来说,范式不满足的情况都是由于属性之间的关系复杂,而没有将关系拆解,而导致同一个表内属性之间的关系大量牵连耦合,所谓规范化,实质上是概念的单一化,即一个关系表示一个实体。

二、各范式

  1. 第一范式

    1. 域是原子性的,即属性不可分,每一列都是不可再分割的原子数据项,且不重复。(部分数据库设计突破了1NF的设计要求,因此是否满足1NF主要取决于所使用的关系类型)
  2. 第二范式

    1. 满足第一范式;
    2. 实体的属性完全依赖于主键,即整个主键唯一标识一个元组且主键不可拆分
      1. 比如ABCD表中,A→B,A→C,C→D,属性D不依赖于主键A。
  3. 第三范式

    1. 满足第二范式;
    2. 一个表可以包含其他表的主键,但不可以包含其他表除主键外的其他非主属性,即任何非主列不得传递依赖于主键
      1. 如ABCD表中,A→B,A→C,A→D,C→D,存在A→C→D的传递依赖关系,此时可以拆分成ABC和CD两张表(或者ABE,ECD,其中E→C,E→D)
  4. BC范式

    1. 满足第三范式;
    2. 不存在关键字决定关键字的情况,一般需要对表进行拆分,但拆分后有可能会损失一些依赖关系
      1. 比如ABCD表中的依赖关系:AB→C,AB→D,BC→A,BC→D,D是唯一的非关键属性;
      2. 满足第三范式,但不满足BC范式(因为存在A→C,C→A这样的关系);
      3. 但拆表后可能会出现损失依赖关系的情况。
  5. 第四范式

    1. 满足第BC范式;
    2. 消除非平凡函数依赖的多值依赖关系,
      1. 平凡函数依赖:Y⊆X,X→Y。即一组属性函数决定它的所有子集;
      2. 多值依赖:属性之间的一对多关系;
      3. 比如ABC,一个A对应于多个B,一个A也对应于多个C,B和C相互独立。
  6. 第五范式(略)

    1. 只存在理论研究中,很少出现,且难以察觉。

     

http://www.lryc.cn/news/14283.html

相关文章:

  • Geospatial Data Science(2):Geospatial Data in Python
  • 16.hadoop系列之MapReduce之MapTask与ReduceTask及Shuffle工作机制
  • java 面试过程中遇到的几个问题记录20230220
  • 面试题:【数据库三】索引简述
  • 数据库必知必会:TiDB(12)TiDB连接管理
  • 电源大事,阻抗二字
  • ASE20N60-ASEMI的MOS管ASE20N60
  • nginx 代理01(持续更新)
  • 初阶C语言——操作符【详解】
  • 37k*16 薪,年后直接上岗,3年自动化测试历经3轮面试成功拿下阿里Offer....
  • 利用Rust与Flutter开发一款小工具
  • 零入门kubernetes网络实战-16->使用golang给docker环境下某个容器里添加一个额外的网卡
  • 音频信号处理笔记(二)
  • 钓鱼网站+bypassuac提权
  • 合并两个有序链表——递归解法
  • ADRC自抗扰控制总结
  • 3年工作之后是不是还在“点点点”,3年感悟和你分享....
  • 【自动化测试】web自动化测试验证码如何测?如何处理验证码问题?解决方案......
  • 面试浅谈之 C++ STL 篇
  • 【PTA Advanced】1144 The Missing Number(C++)
  • oracle的sqlnet.ora文件配置传输加密算法
  • RK3568存储性能测试
  • Homekit智能家居一智能灯泡
  • 轻量级 Java 权限认证框架——Sa-Token
  • 算法复习(四、五、六)
  • SORT与DeepSORT简介
  • TCP/IP网络编程——多播与广播
  • K8S DNS解析过程和延迟问题
  • 【JavaScript】js实现深拷贝的方法
  • RK3288 GPIO记录