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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
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
相关文章
|
6天前
|
存储 Java 数据库连接
数据库三范式详解及应用
数据库三范式详解及应用
|
6天前
|
存储 Java 数据管理
数据库三范式设计与规范化过程详解
数据库三范式设计与规范化过程详解
|
5天前
|
SQL Oracle 关系型数据库
第1章 MySQL概述
第1章 MySQL概述
5 0
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
27 5
|
9天前
|
存储 关系型数据库 MySQL
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
|
23天前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
27 0
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库——锁-概述以及全局锁(介绍、语法、特点)
MySQL数据库——锁-概述以及全局锁(介绍、语法、特点)
21 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL数据库——索引(1)-概述以及B-Tree结构
MySQL数据库——索引(1)-概述以及B-Tree结构
15 0
|
1月前
|
SQL 存储 关系型数据库
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
27 0
|
1月前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
26 0