【MySQL】范式

一、范式

在数据库中,关于数据表设计的基本原则就称为范式。目前关系型数据库有六种范式,按照范式级别,从低到高为:第一范式、第二范式、第三范式、巴斯科德范式、第四范式以及第五范式。范式的级别越高,其冗余度就越低,且高阶的范式一定符合低阶范式的规范。

1.1、键和相关属性的概念

  • 超键:能唯一标识元组的属性集叫做超键
  • 候选键:如果超键不包含多余的属性,此时这个超键就是候选键。
  • 主键:用户可以从候选键中选择一个作为主键
  • 外键:如果一张表中的属性集为另一张数据表的主键,则该属性集为这张表的外键
  • 主属性:包含在任一候选键中的属性称为主属性
  • 非主属性:指不包含在任何一个候选键中的属性。

1.2、范式

第一范式

第一范式主要是确保数据表中的每个字段的值具有原子性,即每个字段的值不可拆分。

第二范式

在第一范式基础上,满足数据表中的每一条数据记录,都是可以唯一标识的,并且所有非主键字段,都必须完全依赖主键而不是主键的一部分。

例如,在成绩表(学号,课程号,成绩)关系中,通过(学号,课程号)可以决定成绩,而反过来则不行,所以(学号,课程号)->成绩的这个关系就是完全依赖关系

第三范式

在第二范式的基础上,数据表中所有非主键字段不能依赖于其他非主键字段。即非主键属性之间相互独立,不能有依赖关系。

总结

一范式要求列不可再分,二范式要求不能部分依赖,三范式要求不能传递依赖,要直接依赖主键。

二、反范式化

如果数据库中的数据量较大时,如果数据表完全按照三大范式进行设计的话会产生大量的关联查询。在一定程度上影响了数据库的读性能。此时反范式化可以作为一种优化思路,通过增加冗余字段来提高数据库的读效率。

2.1、反范式化带来的问题

  • 存储空间变大
  • 不同表中的相同字段需要同步修改,否则会导致数据不一致
  • 如果采用存储过程来支持数据的操作,在更新频繁的情况下,非常消耗系统资源
  • 在数据量小的情况下,反范式化不仅不能优化性能,而且使数据库的设计更加复杂。

三、BCNF(巴斯范式)

BCNF是修正的第三范式,若一个关系达到了第三范式,并且只有一个候选键,或者每个候选键都是单属性,这就是巴斯范式。

简单来说,就是主属性之间不能相互依赖,非主属性之间也不能相互依赖

相关推荐
松涛和鸣17 分钟前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa35 分钟前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k1 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦1 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德2 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫3 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i3 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql