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

MySQL数据库范式

文章目录

  • MySQL数据库范式
    • 1、范式的优缺点
    • 2、第一范式
    • 3、第二范式
    • 4、第三范式
    • 5、BC范式
    • 6、第四范式

MySQL数据库范式

1、范式的优缺点

  • 应用数据库范式的好处:
  1. 减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)
  2. 消除异常(插入异常,更新异常,删除异常)
  3. 让数据组织的更加和谐
  • 范式设计的缺点:
  1. 范式越高,意味着表越多,多表联合查询的机率就越大,SQL的效率就变低
  2. 表越多时,在做更新、删除、插入数据时需要维护的表越多,同样会降低数据库的效率
  • 因此:

并不是应用的范式越高越好,视实际情况而定。第三范式已经很大程度上减少了数据冗余,并且基本预防了数据插入异常,更新异常,和删除异常了

2、第一范式

  • 第一范式: 每一列保持原子特性

列都是基本数据项,不能够再进行分割,否则设计成一对多的实体关系

注:不符合第一范式不能称作关系型数据库

  • 例如:表中的地址字段,可以再细分为省,市,区等不可再分割(即原子特性)的字段

image-20230402155256582

3、第二范式

  • 第二范式:属性完全依赖于主键-主要针对联合主键

非主属性完全依赖于主关键字,如果不是完全依赖主键(即不全依赖联合主键中的所有关键字),应该拆分成新的实体,设计成一对多的实体关系

  • 例如:选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),(学号,课程名称)是联合主键,但是学分字段只和课程名称有关,和学号无关,相当于只依赖联合主键的其中一个字段,不符合第二范式。

image-20230402155938670

4、第三范式

  • 第三范式:属性不依赖于其它非主属性

要求一个数据库表中不包含已在其它表中已包含的非主关键字信息

注:一般关系型数据库满足第三范式就可以了

  • 示例:学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),学号是主键,但是学院电话只依赖于所在学院,并不依赖于主键学号,因此该设计不符合第三范式,应该把学院专门设计成一张表,学生表和学院表,两个是一对多的关系。

image-20230402160031563

5、BC范式

  • BC范式:每个表中只有一个候选键

BC范式是在第三范式的基础上的一种特殊情况,即每个表中只有一个候选键(在一个数据库中每行的值都不相同,则可称为候选键)

  • 示例:每一个员工的email都是唯一的(不可能两个人用同一个email),则此表不符合BC范式,对其进行BC范式化后的关系图为

image-20230402160445855

  • 注意:

在要求更好的查询效率时,可以不遵循BC范式(多一个候选键,就多一份表,更多可能需要进行联合查询),候选键储存在主表上也是没有问题的,并不会造成数据的冗余,在一定程度上提高查询效率

6、第四范式

  • 第四范式:消除表中的多值依赖(减少维护数据一致性的工作)

比如:noNF表中的skill技能这个字段,有的人是“java,mysql”,有的人描述的是“Java,MySQL”,这样数据就不一致了,解决办法就是将多值属性放入一个新表

image-20230402160219439

样数据就不一致了,解决办法就是将多值属性放入一个新表

[外链图片转存中…(img-n7yeQkem-1680516329350)]

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

相关文章:

  • 通过多层方法重塑网络安全
  • Golang学习+深入(四)-运算符
  • C++ 运算符重载:C++ 运算符重载的高级技巧和最佳实践
  • 软件测试找了2个月了,找不到工作怎么办?
  • 满足高并发的TB API接口接入说明
  • Themis Pro版将正式推出,3次迭代到底在酝酿什么?
  • 边缘检测和轮廓检测
  • 二分法模板以及例题 (三)
  • 向下转型和向上转型(易理解)
  • 华为OD机试用JS实现 -【机智的外卖员】(2023-Q2 押题)
  • 同态加密:一个基于多方计算的CKKS方案
  • 最小生成数
  • 【模板】树状数组
  • 网站都变成灰色了,怎么实现的?
  • NeRF详解
  • Java之静态代码块和静态类、静态导入
  • Python3 File isatty() 、os.chflags()方法
  • 【SH_CO_TMT_PACKAGE保留60天数据和增加索引】
  • 2022蓝桥杯省赛——数位排序
  • 弥散磁共振成像在神经科学中的应用
  • 多进程(python)
  • 利用Kali工具进行信息收集(35)
  • 《程序员面试金典(第6版)》 面试题 08.11. 硬币(动态规划,组合问题,C++)
  • 实体商家做抖音运营如何做矩阵?
  • java 双列集合Map 万字详解
  • 【数据结构】二叉树<遍历>
  • linux查看硬件信息
  • 吐血整理,互联网大厂最常见的 1120 道 Java 面试题(带答案)整理
  • RabbitMQ如何避免消息丢失
  • 做算法题的正确姿势(不断更新)