侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Mysql中的范式详解

数据库  /  管理员 发布于 6年前   211

范式定义

范式:Normal Format,是一种离散数学中的知识,是为了解决数据的存储与优化的问题:保存数据的存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,终极目标是为了减少数据的冗余。

范式背景:

1、是为了解决数据冗余

2、是为了数据的优化与存储

3、保存数据之后,可以通过关系得到的数据,不再存储

范式概念:

1、是一种分层结构的规范,分为6层

2、每一层都比上一层更严格

3、若要满足下一层范式,前提是满足上一层

4、范式在数据库中具有指导意义,但是不强制规范

5、数据库不仅要考虑空间问题,还要考虑效率问题,一般用前第三层

6、六层范式, 1NF是最底层,要求最低;6NF最高层,最严格.

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般说来,数据库只需满足第三范式(3NF)就行了。

第一范式:确保每一列不可再分

要求

1、在设计表存储数据时候,如果表中设计的字段存储的数据,在取出来使用之前还需要额外的处理(拆分),那么表的设计不满足第一范式

2、第一范式要求字段具有原子性、不可再分割

例如:

讲师代课表

b770777498faeb59d90579dc2dd72c0.png

上表设计不存在问题: 但是如果需求是将数据查出来之后,要求显示一个老师从什么时候开始上课,到什么时候结课:, 则需要将代课时间进行拆分: 不符合1NF, 数据不具有原子性, 可以再拆分.

解决方案

解决方案: 将代课时间拆分成两个字段就解决问题.

8b73e406655e11c3618def96d1db638.png

第二范式:确保表中每一列都和主键有关

要求

1、在数据表设计过程中,如果有复合主键(多字段主键),且表中有字段并不是由整个主键来确定,而是依赖于主键中的某个字段(主键的部分)

2、存在字段依赖主键的部分的问题,称之为部分依赖

3、第二范式就是解决表设计不允许出现部分依赖

讲师带课表

e97b2c1ff05c5236f1601c5ba997d85.png

复合主键: 讲师+班级

以上表中: 代课时间,开始和结束字段都与当前的主键(讲师和班级)有关系, 但是性别并不依赖班级, 教室不依赖讲师, 性别只依赖讲师, 教室只依赖班级, 出现了性别和教室依赖主键中的一部分: 部分依赖.不符合第二范式.

解决方案

解决方案1: 可以将性别与讲师单独成表, 班级与教室也单独成表.

解决方案2: 取消复合主键, 使用逻辑主键

逻辑主键:没有业务含义,比如自增主键

业务主键:有业务含义,比如person表用身份证号当主键

79b952005b473955a1adb8fdc7bdd9d.png

第三范式:确保每一列都和主键列直接相关,而不是间接相关

要求

1、要满足第三范式、必须满足第二范式

2、理论上讲,应该一张表中的所有字段都应该直接依赖于主键,如果表设计中存在一个字段,并不直接依赖主键,而是通过某个非关键字段依赖,最终实现依赖主键,把这种不是直接依赖主键,而是依赖非主键字段的依赖关系称之为传递依赖

3、第三范式就是解决传递依赖的问题

讲师带课表

994eb87bc7b7b4068cd76403b05a1a3.png

主键: ID

以上设计方案中: 性别依赖讲师存在, 讲师依赖主键; 教室依赖班级,班级依赖主键: 性别和教室都存在传递依赖.

解决方案

将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个单独的表, 然后在需要对应的信息的时候, 使用对应的实体表的主键加进来.

讲师带课表

d0201de755d9b939113de6001cb0b60.png

讲师表

9e677722bcca4a62c22b3d907ee26b7.png

教室表

89074cb3e0c70ada62663d0e95b5893.png

反范式

有时候,在设计表的时候,如果一张表中有几个字段需要从另外的表中去获取信息,理论上讲,的确可以获得想要的数据,但是效率低一点,会刻意的在某些表中,不去保存另外表的主键,而是直接保存想要的数据信息,这样一来,在查询数据的时候,一张表可以直接提供数据,而不需要多表查询((效率低),但是冗余会增加

推荐mysql视频教程,地址:https://www.php.cn/course/list/51.html

以上就是Mysql中的范式详解的详细内容,更多请关注其它相关文章!


  • 上一条:
    关于 MySQL 权限控制语句的总结
    下一条:
    关于mysql 实现表连接(左,右,内,全连接)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客