返回顶部
首页 > 资讯 > 数据库 >MySQL之范式的使用详解
  • 779
分享到

MySQL之范式的使用详解

MySQL范式 2022-05-25 12:05:19 779人浏览 安东尼
摘要

一、范式 范式的英文名称是NORMal Form,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循

一、范式

范式的英文名称是NORMal Form,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。

第一范式(1NF)

第一范式其实是关系型数据库的基础,即任何关系型数据库都是符合第一范式的。简单的将第一范式就是每一行的各个数据都是不可分割的,同一列中不能有多个值,如果出现重复的属性就需要定义一个新的尸实体。
下面数据库便不符合第一范式:


+------------+-------------------+
| workername | company      |
+------------+-------------------+
| John    | ByteDance,Tencent |
| Mike    | Tencent      |
+------------+-------------------+

上面描述的数据所表达的意思是,Mike在Tencent工作,而John同时在ByteDance和Tencent工作(假设这是可能的)。但是这种表达方式并不符合第一范式,即列的数据必须是不可分的,要满足第一范式,必须是下面的这种形式:


+------------+-----------+
| workername | company  |
+------------+-----------+
| Mike    | Tencent  |
| John    | ByteDance |
| John    | Tencent  |
+------------+-----------+

第二范式(2NF)

首先,一个数据库要满足第二范式必须要先满足第一范式。
我们先看一个表格:


+----------+-------------+-------+
| employee | department | head |
+----------+-------------+-------+
| Jones  | Accountint | Jones |
| Smith  | Engineering | Smith |
| Brown  | Accounting | Jones |
| Green  | Engineering | Smith |
+----------+-------------+-------+

这个表描述了被雇佣者,工作部门和领导的关系。这个表所表示的关系在现实生活中是完全可能存在的,现在让我们考虑一个问题,如果Brown接任Accounting部门的领导,我们需要怎样对表进行修改?这个问题将会变得非常麻烦,因为我们会发现数据都耦合在一起了,你很难找到一个很好的能唯一确定每一行的判断条件来执行你的UPDATE语句。而我们把能够唯一表示数据库中表的一行的数据成为这个表的主键。 因此,没有主键的表是不符合第二范式的,也就是说符合第二范式的表需要规定主键。

因此我们为了使上面的表符合第二范式,需要将它拆分为两个表:


+----------+-------------+
| employee | department |
+----------+-------------+
| Brown  | Accounting |
| Green  | Engineering |
| Jones  | Accounting |
| Smith  | Engineering |
+----------+-------------+

+-------------+-------+
| department | head |
+-------------+-------+
| Accounting | Jones |
| Engineering | Smith |
+-------------+-------+

在这两个表中,第一个表的主键为employee,第二个表的主键为department。在这种情况下,完成上面的问题就显得非常简单了。

第三范式(3NF)

一个关系型数据库要满足第三范式必须要先满足第二范式。
将第三范式前,我们同样先看两个表:


+-----------+-------------+---------+-------+
| studentid | studentname | subject | score |
+-----------+-------------+---------+-------+
| 1     | Mike    | Math  | 96  |
| 2     | John    | Chinese | 85  |
| 3     | Kate    | History | 100  |
+-----------+-------------+---------+-------+

+-----------+-----------+-------+
| subjectid | studentid | score |
+-----------+-----------+-------+
| 101    | 1     | 96  |
| 111    | 3     | 100  |
| 201    | 2     | 85  |
+-----------+-----------+-------+

上面的两个表格的主键分别为studentid和subjectid,很显然两个表都符合第二范式。

但是我们会发现这两个表有重复冗余的数据score。因此第三范式就是要消除冗余的数据,具体到上面的情况,就是两个表只有一个能够存在score这一列数据。那么怎么将这两个表联系起来呢,这里就出现了外键。如果两个表中有冗余重复的列,而且这个表中的一个非主键列在另一个表中是主键,那么我们为了消除冗余列可以把这个非主键列作为联系两个表的桥梁,也就是外键。 通过观察可以发现,studentid在第一个表中是主键,在第二个表中是非主键,所以他就是第二个表的外键。因此上述情况我们有了以下符合第三范式的写法:


+-----------+-------------+---------+
| studentid | studentname | subject |
+-----------+-------------+---------+
| 1     | Mike    | Math  |
| 2     | John    | Chinese |
| 3     | Kate    | History |
+-----------+-------------+---------+

+-----------+-----------+-------+
| subjectid | studentid | score |
+-----------+-----------+-------+
| 101    | 1     | 96  |
| 111    | 3     | 100  |
| 201    | 2     | 85  |
+-----------+-----------+-------+

可以发现在设定了外键之后,第一个表即使删除了score列,也可以通过studentid在第二个表中查找到相应的score的值,这样即消除了数据的冗余,又不会影响查找,满足第三范式。

二、范式的优点和缺点

范式的优点

  • 范式化的更新操作通常要比反范式化要快。
  • 当数据较好地范式化时,就只有很少或者没有重复的数据,所以只需要修改更少的数据。
  • 范式化的表通常都比较小,可以更好的放在内存中,所以执行操作会更快。
  • 很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。

范式的缺点

  • 范式化的缺点就是通常需要关联。稍微复杂一些的查询语句在符合范式的数据库上都可能需要至少一次关联,也许更多,这不但代价昂贵,也可能使一些索引策略无效。

到此这篇关于Mysql之范式的使用详解的文章就介绍到这了,更多相关mysql 范式 内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL之范式的使用详解

本文链接: https://lsjlt.com/news/9871.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL之范式的使用详解
    一、范式 范式的英文名称是Normal Form,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循...
    99+
    2022-05-25
    MySQL 范式
  • MySQL学习之三大范式详解小白篇
    目录1.范式基础1.1范式的概念2.三大范式2.1三大范式概念2.2三大范式举例1.进行第一范式的改造2.进行第二范式的改造3.进行第三范式的改造1.范式基础 1.1范式的概念 设计...
    99+
    2024-04-02
  • 详解MySQL 数据库范式
    前言: 关于数据库范式,时常有听说过,一直没有详细去了解。一般数据库书籍或数据库课程会介绍范式相关内容,范式也经常出现在数据库考试题目中。不清楚你是否对范式有比较清晰的了解呢?本篇文章我们一起来学习下数据库范式吧。 ...
    99+
    2022-05-15
    MySQL 数据库范式 MySQL 范式
  • MySQL之mysqldump的使用详解
    一、mysqldump 简介 mysqldump 是 MySQL 自带的逻辑备份工具。 它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我...
    99+
    2022-05-17
    MySQL mysqldump
  • Git操作规范之tag的使用技巧详解
    目录常用分支masterdevelopreleasehotfix使用注意tag规范打tag场景tag命名规范版本类型说明版本号设置规范场景举例新需求修复bug重大版本更新特殊情况常用...
    99+
    2024-04-02
  • 数据库的范式详解
      关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。   在你设计数据库之时,若能符合这几个范式,你就是数...
    99+
    2018-11-21
    数据库的范式详解
  • 数据库第一范式,第二范式,第三范式详解
    数据库第一范式,第二范式,第三范式详解 基础知识 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”...
    99+
    2023-09-30
    数据库 mysql 大数据
  • MySQL之where使用详解
    目录1、简介2、正文2.1 where子句位置2.2 操作符2.3 空值null1、简介 当我们需要获取数据库表数据的特定子集时,可以使用where子句指定搜索...
    99+
    2024-04-02
  • mysql中json的使用方式详解
    目录一、插入json数据的方式有两种二、查询 JSON 中字段的数据三、JSON字段的条件搜索mysql字段的数据类型支持json格式,可以直接存储json数组和json对象。 一、插入json数据的方式有两种 1、以普...
    99+
    2023-04-23
    mysql中json使用 mysql json
  • Mysql中的范式
    目录 范式定义 第一范式 第二范式 第三范式 反范式 范式定义 范式:Normal Format,是一种离散数学中的知识,是为了解决数据的存储与优化的问题:保存数据的存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,...
    99+
    2020-06-21
    Mysql中的范式
  • 超详细MySQL使用规范分享
    最近涉及数据库相关操作较多,公司现有规范也不是太全面,就根据网上各路大神的相关规范,整理了一些自用的规范用法,万望指正。 数据库环境 dev: 开发环境 开发可读写,可修改表结构。开发人员可以修改表结构,可以随意修改...
    99+
    2022-05-26
    MySQL 规范 MySQL 使用规范
  • mysql timestamp字段规范使用详情
    目录1. 前言2. mysql中的时间字段2.1. 数据的存储方式2.2. DATETIME和TIMESTMAP的区别3. timestamp字段处理默认值和null值时的行为3.1. 参数禁用3.2. 参数启...
    99+
    2024-04-02
  • mysql timestamp字段规范使用详情
    目录1. 前言2. mysql中的时间字段2.1. 数据的存储方式2.2. DATETIME和TIMESTMAP的区别3. timestamp字段处理默认值和null值时的...
    99+
    2024-04-02
  • MyBatisXPathParser解析器使用范例详解
    MyBatis是优秀的开源数据库框架,本菜鸟抱着学习的态度,通过《MyBatis技术内幕》一书来进行MyBatis 的学习。 MyBatis 的基础支撑层使用XPathParser来...
    99+
    2024-04-02
  • Mysql中范式和反范式的优缺点
    今天就跟大家聊聊有关Mysql中范式和反范式的优缺点,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、三大范式第一范式1NF是对属性的原子性,要求属...
    99+
    2024-04-02
  • Java基础之命名规范的详解
    前言 在编程的世界里,每种语言都有自己的一些规范。下面,就带你了解Java命名规范。对于程序员来说,如果想学好一门语言,想要自己写出来的代码能被他人轻易地读懂,深入的学习命名规范是非...
    99+
    2024-04-02
  • Java学习之Lambda表达式的使用详解
    目录Lamda表达式函数式接口Lambda表达式的推导函数式接口的不同类型Lambda表达式与函数式接口的简单应用Lambda表达式的优缺点Lamda表达式 λ希腊字母...
    99+
    2022-12-26
    Java Lambda表达式用法 Java Lambda表达式 Java Lambda
  • Mysql范式与反范式的利弊是什么
    这篇文章主要讲解了“Mysql范式与反范式的利弊是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql范式与反范式的利弊是什么”吧!   一、三大...
    99+
    2024-04-02
  • Java开发之代码规范详解
    Java开发中所要遵守的编码规范大体上有如下7点。命名规范、注释规范、缩进排版规范、文件名规范、声明规范、语句规范以及编程规范。【推荐学习:java视频教程】1.命名规范(1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z)、数字(0-9...
    99+
    2021-07-11
    java入门 Java 代码规范
  • mysql之explain使用详解(分析索引)
    explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了,如: ex...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作