美文网首页
mysql之范式设计

mysql之范式设计

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-03-30 13:41 被阅读0次

1NF 需要保证表中每个属性都保持原子性;
2NF 需要保证表中的非主属性与候选键完全依赖;
3NF 需要保证表中的非主属性与候选键不存在传递依赖。


BC范式:https://baike.baidu.com/item/BC%E8%8C%83%E5%BC%8F/3193909?fr=aladdin
第四范式:https://baike.baidu.com/item/%E7%AC%AC%E5%9B%9B%E8%8C%83%E5%BC%8F/3193985
第五范式:https://baike.baidu.com/item/%E7%AC%AC%E4%BA%94%E8%8C%83%E5%BC%8F

1、数据库的设计范式

范式是数据表设计的基本原则。
范式:需要对关系内部各个属性之间联系的合理化程序进行定义,就有了不同等级的规范要求,这些规范要求就是范式(NF)

关系型数据库有6种范式,按照范式级别,从低到高分别是:1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BCNF(巴斯-科德范式)、4NF(第四范式)、5NF(第五范式,又叫做完美范式)。
反规范化:破坏范式规则。

image.png

数据表设计的范式,数据表设计的三大范式:第一范式、第二范式、第三范式。

  • 第一范式(1NF)
    所有的字段都是基本数据字段,不可进一步拆分。数据库表中的任何属性都是原子性的,不可再分。比如字段X,不可拆分字段为X-1和字段X-2。
    1、表中的同一列的类型相同
    2、一个列名只能对应到一列
    3、并且每一列都不可分
    4、行的上下关系互不影响

  • 第二范式(2NF)
    满足第一范式的前提,满足数据表里的每一条数据记录,都是可唯一标识的,而且所有字段,都必须完全依赖主键,不能只依赖主键的一部分。
    数据表里的非主属性都要和这个数据表的候选键有完全依赖关系。

即1NF 告诉我们字段属性需要是原子性的,而 2NF 告诉我们一张表就是一个独立的对象,也就是说一张表只表达一个意思。

举例:
学生基本信息表(学号,身份证号,姓名)中,学号属性是唯一的。而(学号,身份证号) ->姓名,
(身份证号) ->姓名,
(学号) ->姓名,
所以姓名部分函数依赖于(学号,身份证号)。

  • 第三范式(3NF)
    满足第二范式的前提,不能包含那些可以由非主键字段派生出来的字段,或者说,不能存在依赖于非主键字段的字段。
    对任何非主属性都不传递依赖于候选键。也就是说不能存在非主属性A依赖于非主属性性B,非主属性B依赖于候选键的情况。


    image.png
  • 巴斯范式(BCNF)
    巴斯范式(BCNF),也叫巴斯-科德范式,在3NF的基础上消除了主属性对候选键的部分依赖或者传递依赖关系。

image.png

业务优先的原则:一切以业务需求为主,技术服务于业务。

2、数据表中的那些键

范式的定义会使用到主键和候选键(主键和候选键可以唯一标识元组),数据库中的键(Key)由一个或者多个属性组成。我总结了下数据表中常用的集中键和属性的定义:

  • 超键:能唯一标识元组的属性集叫做超键;
  • 候选键:如果超键不包括多余的属性,最小的超键,那么这个超键就是候选键;也称之为码。
  • 主键:用户可以从候选键中选择一个作为主键;即主码。
  • 外键:如果数据表R1中的某属性集不是R1的主键,而是另一个数据表R2的 主键,那么这个属性集就是数据表R1的外键;
  • 主属性:包含在任一候选键中的属性成为主属性;
  • 非主属性:与主属性相对,指的是不包含在任何一个候选键中的属性;

实例:
NBA 的球员表(player)和球队表(team)。
球员表:定义为包含球员编号、姓名、身份证号、年龄和球队编号;
球队表:包含球队编号、主教练和球队所在地。
对于球员表来说,
1、超键:包括球员编号或者身份证号的任意组合,比如(球员编号)、(球员编号,姓名)、(身份证号,年龄)等。
2、候选键:最小的超键,对于球员表来说,候选键就是(球员编号)或者(身份证号)。
3、主键:我们自己选定,也就是从候选键中选择一个,比如(球员编号)。
4、外键:球员表中的球队编号。
在 player 表中,
1、主属性:(球员编号)、(身份证号)
2、非主属性:其他的属性:(姓名)、(年龄)、(球队编号)都是非主属性。

相关文章

  • 数据库设计三范式与反范式

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 第一范式: 1、数据库的所有...

  • mysql之范式设计

    1NF 需要保证表中每个属性都保持原子性;2NF 需要保证表中的非主属性与候选键完全依赖;3NF 需要保证表中的非...

  • 【Mysql优化分析】之InnoDB索引类型及原理、字段范式/逆

    Mysql优化的部分有很多,本文主要介绍Mysql执行过程、索引类型及原理、字段范式/逆范式设计、索引设计及使用。...

  • MySql表设计与优化

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 1、实体关系分析 实体关系需...

  • MySQL之三范式

    引用 MySQL设计之三范式的理解 数据库逻辑设计之三大范式通俗理解,一看就懂,书上说的太晦涩 三范式 第一范式:...

  • 02-MySQL数据库

    一、MySQL三大范式 MySQL的三大范式能够规范开发人员对数据表的设计,使得开发人员能够设计出简洁、优雅的数据...

  • 分库分表,读写分离,数据库架构

    MySql--数据库设计三范式 一、mysql集群搭建 1、MySQL数据库的几种常见高可用方案2、MySQL分布...

  • (系列7)数据库

    MySQL 数据库概念 范式 范式是数据库设计规范,范式越高则数据库冗余越小,但查询也更复杂,一般只需满足第三范式...

  • 第34期:MySQL 表冗余设计

    引言: 上一篇我介绍了 MySQL 范式标准化表设计,范式设计具有以下优点:把如何消除数据冗余做到极致,从而减少关...

  • mysql设计3范式

    1.第一范式:要求有主键,并且要求每一个字段原子性不可再分 关于第一范式,每一行必须唯一,也就是每个表必须有主键,...

网友评论

      本文标题:mysql之范式设计

      本文链接:https://www.haomeiwen.com/subject/amrijrtx.html