第22章_数据库的设计规范

文章目录

范式的概念

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

三范式和反范式是空间和时间的关系。三范式是为了降低空间;反范式是通过增加空间来提升运行效率。

三范式

(1)目的:减少空间占用。

(2)内容:列不可分、依赖主键(联合索引)、在依赖主键(联合索引)的基础上直接依赖。

范式一

确保每列保持原子性;数据库表中的所有字段都是不可分解的

原子值;

例如:某表中有一个地址字段,如果经常需要访问地址字段中

的城市属性,则需要将该字段拆分为多个字段,省份、城市、

详细地址等;

范式二

确保表中的每列都和主键相关,而不能只与主键的某一部分相关(组合索引);

因为订单编号与客户的信息相关,订单编号和商品编号一起唯一确定数量,商品编号和商品信息相关;所以可以拆分成三个表:

范式三

确保每列都和主键直接相关,而不是间接相关;减少数据冗余;

例如

因为客户名称、所属公司、联系方式是和客户编号直接相关的,而客户编号跟订单编号是直接相关的,所以可以拆分为


反范式

反范式是经常使用的设计。比如用户表采用的就是反范式,因为如果用户表不采用反范式设计,将会产生很多的关联关系表,这就会涉及到联表查询,非常影响效率,特别对登录来说,是不可容忍的。

因此,反范式允许冗余存储,为了提升查询效率。

总结

  1. 范式二中,对于联合索引,主键不能依赖一部分,而要依赖整体;出现重复的要拆分。
  2. 反范式是经常使用的设计。三范式可以避免数据冗余,减少数据库的空间,减小维护数据完整性的麻烦。但是采用数据库范式化设计,可能导致数据库业务涉及的表变多,并且造成更多的联表查询,将导致整个系统的性能降低。因此处于性能考虑,可能需要进行反范式设计。
相关推荐
Lw老王要学习31 分钟前
无互联网的正式 CentOS 7.6环境中安装 mysql-8.0.36-1
linux·服务器·mysql·centos
Flash.kkl1 小时前
MySQL访问
数据库·mysql
zhougl9961 小时前
mysql数据库存储引擎
数据库·mysql·oracle
vx+_bysj68691 小时前
【免费领源码】基于Springboot白隼校园音乐点歌系统 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·spring boot·mysql·课程设计
认真的薛薛2 小时前
数据库-主从故障排查,gitd,延时同步
数据库·sql·mysql
未名编程2 小时前
【干货】MySQL 8.0 物理迁移:电脑损坏后如何通过 Data 文件夹完美恢复数据库?
数据库·mysql
lydcljie2 小时前
mysql数据被误删的恢复方案
数据库·mysql
x***r1512 小时前
Xampp集成环境包安装步骤详解(附Apache、MySQL启动与本地网站搭建)
数据库·mysql·apache
霖霖总总2 小时前
[小技巧72]AFTER COMMIT vs AFTER SYNC:MySQL 半同步复制的持久性博弈
数据库·mysql
爱敲代码的小鱼3 小时前
后端web开发Mysql数据库:
数据库·mysql