MySQL 数据库范式设计理论概述

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 范式来自来自英文 Normal From 。开发过程中要设计一个好的数据库逻辑关系,必须满足一定的约束条件,此约束条件形成了开发范式,分成几个等级,一级比一级严格。

设计范式


问题: 什么是范式化设计,为什么需要反规范化设计 ?


范式来自来自英文 Normal From 。开发过程中要设计一个好的数据库逻辑关系,必须满足一定的约束条件,此约束条件形成了开发范式,分成几个等级,一级比一级严格。

满足这些范式理论上可以让我们的数据库逻辑结构更加简洁、清晰。一下是常见的四种范式:


  • 第一范式(1NF)


  • 第二范式(2NF)


  • 第三范式(3NF)


  • 第四范式(BCNF)


第一范式(1NF)


  1. 每一列都是不可再分的属性值,确保每一列的原子性;


  1. 两列的属性相近或者相似或者一样,尽量合并属性一样的列,确保不产生冗余数据;


  1. 单一属性的列为基本数据类型构成;


  1. 设计出来的表都是简单的二维表。


举例:用户收货地址反例:


姓名 电话 地址
张三 138000000 北京市-朝阳区-酒仙桥街道


正例:


姓名 电话 街道
张三 138000000 - 北京市 朝阳区 酒仙桥街道


总结:每列都是不可再分的原子值(一个列不可再分,比如通讯地址和省、市、区)


第二范式(2NF)


  1. 第二范式(2NF)是在第一范式的基础上建立起来的。


  1. 第二范式(2NF)要求实体的属性完全依赖与关联。所谓完全依赖是指非主属性列不能对主属性列存在部分函数依赖,如果存在这个属性和关键字部分应该分离出来形成一个新的实体,新实体与原实体是一对多的关系。


反例:


主键:产品id , 用户 id


产品 ID 用户ID 产品名称 用户姓名 购买数量 下单时间
100 1 微波炉 A102 王麻子 1 2022-08-08


正例:


主键:产品id , 用户 id


订单表


产品 ID 用户ID 购买数量 下单时间
100 1 1 2022-08-08


产品表


产品 ID 产品名称
100 微波炉 A102


用户表


用户ID 用户姓名
1 王麻子


总结:消除列对主键的部分函数依赖(对于组合主键的部分依赖,比如:产品ID + 用户ID 为主键,存在用户名称,产品名称等部分主键依赖字段)


第三范式 (3NF)


  1. 满足第三范式(3NF)必须满足第二范式(2NF)。


  1. 第三范式(3NF) 要求一个数据表中不包含已在其他表中包含的非主键关键字信息,即数据不能存在传递关系,即每个属性都跟主键有关系直接关系而不是间接关系。


反例:


订单ID 用户ID 产品ID 产品名称 产品厂家
1 1 100 微波炉 A102 美的
2 2 200 变频空调 B101 海尔


正例: 订单表


订单ID 用户ID 产品ID
1 1 100
2 2 200


商品信息表


产品ID 产品名称 产品厂家
100 微波炉 A102 美的
200 变频空调 B101 海尔


总结:消除字段对非主键的传递依赖(就是需要取消订单中比如商品名称、商品地址等冗余信息)。


范式化设计


在真正的数据库规范定义上,非常的严谨,比如第二范式(2NF)的定义“若某关系 R 术语第一范式,且每个非主属性完全函数依赖于候选码,则关系 R 属于第二范式”。

结论:并不是说完全符合规范化理论的设计是最完美的设计,而是要看具体的业务场景反复实践总结最合适的设计。


反规范化设计


所谓反规范化设计,就是针对规范化而言的。 1、为了性能和读取效率而适当的违反对数据库范式设计的要求; 3、为了查询的性能,允许存在部分(少量)冗余数据。换句话说,反规范化设计就是直接用空间换时间。


  • 商品信息


ID 商品名称 商品价格 商品描述 商品图片地址
1 微波炉 A101 $100.99 可以加热食物的微波炉 tupian.baidu.com


  • 分类信息


分类 ID 分类名称
1 电器


  • 商品分类对应关系表


商品ID 分类ID
1 1


  • 商品信息反规范化设计


ID 商品名称 分类名称 商品价格 商品描述 商品图片地址
1 1 电器 $100.99 可以加热食物的微波炉 tupian.baidu.com


设计总结


  1. 数据库的规划化范式设计,在逻辑结构上可以让结构更加细粒度,容易理解。


  1. 但是我们在实际的开发过程中,需要考虑性能和时间成本,往往或多或少,会允许数据冗余(反规范化设计),通常可以达到 2NF。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
118 1
|
4月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
115 5
|
4月前
|
存储 数据库
数据库设计三范式
三范式设计的最终目的都是为了减少我们的工作量,所以说,尽管三范式是一种很好的指导规范,但在实际应用中,我们也不需要太局限在三范式中,更多的是应该从项目中出发,设计出合理的表结构。
|
2月前
|
存储 关系型数据库 MySQL
mysql 引擎概述
MySQL存储引擎是处理不同类型表操作的组件,InnoDB是最常用的默认引擎,支持事务、行级锁定和外键。MySQL采用插件式存储引擎架构,支持多种引擎,如MyISAM、Memory、CSV等,每种引擎适用于不同的应用场景。通过`SHOW ENGINES`命令可查看当前MySQL实例支持的存储引擎及其状态。选择合适的存储引擎需根据具体业务需求和引擎特性来决定。
|
1月前
|
存储 数据库
数据库设计三范式
数据库设计三范式
28 0
|
4月前
|
SQL 数据采集 关系型数据库
七:《智慧的网络爬虫》— MySQL概述
【8月更文挑战第11天】本篇文章详细的介绍了MySQL数据库的安装与使用;并讲述了MySQL的基本操作及其应用语法
55 0
七:《智慧的网络爬虫》— MySQL概述
|
4月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
62 1
|
5月前
|
存储 SQL 关系型数据库
(三)MySQL之库表设计篇:一、二、三、四、五范式、BC范式与反范式详解!
几种设计范式,大部分小伙伴应该仅了解过三范式,对于其他的应该未曾接触,那在本篇中会重点阐述库表设计时,会用到的这些范式。
119 4
|
4月前
|
存储 算法 Java
数据库范式与设计原则
数据库范式与设计原则
73 0
|
5月前
|
存储 关系型数据库 数据库
关系型数据库设计范式:深入理解与实践
【7月更文挑战第20天】关系型数据库设计范式是数据库设计中的重要指导原则,它通过一系列规范来减少数据冗余、提高数据一致性和优化查询性能。在实际应用中,我们应该根据具体需求和数据特点,灵活选择和应用不同的范式级别,以构建高效、可靠和可扩展的数据库系统。同时,也需要注意范式设计带来的挑战和限制,根据实际情况进行权衡和调整。