【MySQL进阶之路 | 高级篇】范式概述与第一范式

1. 范式简介

在关系型数据库中,关于数据表的设计的基本原则,规则就称为范式。可以理解为,一张数据表的设计结果需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

范式的英文名是Normal Form,简称NF。范式是关系型数据库理论的基础,也是我们在设计数据库结构过程中要遵循的规则和指导方法。

2. 哪些范式

目前关系型数据库有6种常见的范式,按照范式级别,从低到高是:第一范式,第二范式,第三范式,巴斯-科德范式,第四范式,第五范式(完美范式)。

数据库的范式设计越高阶,冗余度越低。同时高阶的范式一定要符合低价范式的要求,满足最低要求的范式是第一范式。在第一范式地方基础上进一步满足更多规范的要求称为第二范式。

一般来说,在关系型数据库设计中,最高也就遵循到了BCNF,普遍还是3NF.但也不绝对,有时候为了提高某些查询性能,我们还需要破坏范式规则,也就是反范式化。

3. 键和相关属性的概念

范式的定义会使用到主键和候选键,数据库中的键是由一个或多个属性组成。数据表中常见的几种键和属性的定义。

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

通常我们也将候选键称为“码”,把主键也称为“主码”。因为键可能是由多个属性组成的,针对单个属性,我们还可以用主属性和非主属性来区分。

举例:

这里有两个表:

球员表:球员编号 | 姓名 | 身份证号 | 年龄 | 球队编号

球队表: 球队编号 | 主教练 | 球队所在地

  • 超键:对于球员表来说,超键就是包含球员编号或身份证编号的任意组合,比如(球员编号)(球员编号,姓名)(身份证号,年龄)等
  • 候选键:就是最小的超键,对于球员表来说,候选键就是(球员编号)或者(身份证标号)等。
  • 主键:我们自己选定,也就是从候选键中选择一个,如(球员编号)。
  • 外键:球员表中的球队编号。
  • 主属性,非主属性:在球员表中,主属性是(球员编号)(身份证编号),其他的属性(姓名)(年龄)都是非主属性。

4. 第一范式(1NF)

第一范式主要是确保数据库表中的每个字段的值必须具有原子性,也就是说数据表中的每个字段的值为不可再次拆分的最小数据单元。

我们在设计某个字段的时候,对于字段X来说,不能把字段X拆成字段X-1和字段X-2.事实上,任何的DBMS都会满足第一范式的要求,不会将字段进行拆分。

例子:

相关推荐

  1. MySQL | 高级】反范式化概述

    2024-07-22 17:20:05       12 阅读
  2. MySQL范式

    2024-07-22 17:20:05       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 17:20:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 17:20:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 17:20:05       45 阅读
  4. Python语言-面向对象

    2024-07-22 17:20:05       55 阅读

热门阅读

  1. opengaussdb在oepnEuler上安装

    2024-07-22 17:20:05       16 阅读
  2. 求助Python字体下载!

    2024-07-22 17:20:05       13 阅读
  3. 如何在 Nginx 中配置访问日志的格式?

    2024-07-22 17:20:05       16 阅读
  4. 精简的力量:目标检测中的模型压缩技术解析

    2024-07-22 17:20:05       15 阅读
  5. 如何用外呼系统提高销售打电话效率

    2024-07-22 17:20:05       16 阅读
  6. 计算机网络之物理层

    2024-07-22 17:20:05       14 阅读
  7. 并发编程核心概念

    2024-07-22 17:20:05       15 阅读
  8. iOS中的MVVM设计模式

    2024-07-22 17:20:05       19 阅读
  9. C语言 检查日期是否有效

    2024-07-22 17:20:05       19 阅读
  10. 实现给Nginx的指定网站开启gzip压缩

    2024-07-22 17:20:05       15 阅读