【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的操作
数据库·mysql
猫咪很可爱1 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle
Umi·3 小时前
MySQL库表操作
数据库·mysql
星光开发者3 小时前
基于springboot智慧草场牛羊管理系统-计算机毕设【课程设计】50360
vue.js·spring boot·后端·mysql·php·课程设计·express
猫咪很可爱4 小时前
MySQL 视图与只读用户:安全查询的完整实践指南
数据库·sql·mysql
猫咪很可爱5 小时前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
秦时明月之君临天下6 小时前
MySQL purge 参数详解:innodb_purge_threads 与 innodb_purge_batch_size
数据库·mysql·1024程序员节
三垣网安6 小时前
某某大学心理健康教育平台弱口令及SQL注入漏洞
数据库·sql
aluluka7 小时前
《elisp 每日一练》——Process Sentinel 与 json集成
json·emacs·lisp·elisp
努力努力再努力wz7 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql