当前位置: 首页 > news >正文

MySQL高级--范式与反范式

MySQL高级–范式与反范式

1. 背景

首先让我们来简单了解什么是范式与反范式
如下有部门表(包含:雇员、部门、部门领导)

EMPLOYEEDEPARTMENTHEAD
JonesAccountingJones
SmithEngineeringSmith
BrownAccountingJones
GreenEngineeringSmith

我们知道,如果Brown接任Accounting的部门领导,那么可能会导致后面数据变化时,比如:“Jones”这一行显示的部门领导与“Brown”的就不一样了,那时就不能知道是哪个是对的了,此外,如果我们删除了Accounting部门的雇员,我们就会因此失去关于Accounting部门的本身的记录了。因此,我们需要对这个表进行范式化,这里我们将把这个表拆成两个表

雇员表
EMPLOYEEDEPARTMENT
JonesAccounting
SmithEngineering
BrownAccounting
GreenEngineering
部门表
DEPARTMENTHEAD
AccountingJones
EngineeringSmith
AccountingJones
EngineeringSmith

范式–有三种 1:数据表示二维表,每一项都不可分割 2:(仅在组合主键时存在):消除函数依赖
3:消除传递依赖
不难发现这两张表符合第二范式,在这里我们使用名字来作为主键

2. 范式的优点

(1)范式的更新操作比反范式的要快
(2)如果表能很好的被范式化的话,说明表的数据比较少或没有重复的数据
(3)范式的表通常比较小,可以很好的放在内存中,执行会更快。
(4)很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。还是前面的例子:在非范式化的结构中必须使用DISTINCT或者GROUP BY才能获得一份唯一的部门列表,但是如果部门(DEPARTMENT)是一张单独的表,则只需要简单的查询这张表就行了。

3. 反范式的优点

(1)反范式化的schema因为所有数据都在一张表中,可以很好地避免关联。
(2)如果不需要关联表,则对大部分查询最差的情况——即使表没有使用索引——是全表扫描。当数据比较大时这可能比多表关联还要要快得多,因为这样避免了随机I/O(全表扫描基本上是顺序I/O)

http://www.lryc.cn/news/477047.html

相关文章:

  • 实验05多重循环---7-02 打印矩形图案
  • 明源地产ERP WFWebService.asmx 反序列化RCE漏洞复现
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.11.4)
  • 开源自托管数据管理工具全面指南
  • 护工系统|护工陪护软件|护工系统设计
  • 电商领域软件系统实战:基于TiDB的分布式数据库应用
  • 鸢尾博客项目开源
  • Google封号潮来袭!跨境卖家如何解封?
  • 路径规划 | ROS中多个路径规划算法可视化与性能对比分析
  • 使用 PyCharm 构建 FastAPI 项目:零基础入门 Web API 开发
  • Prim算法与Dijstra算法
  • 水经微图IOS版5.6.1发布,新增图源二维码分享并修订徒步模式功能
  • 复现第三周
  • Django---数据库(多表关联)
  • 2024系统架构师---论软件可靠性设计及其应用论文
  • SpringBoot在线教育系统:云部署策略
  • Zabbix 6.0 部署
  • 用Python遍历输出烟感名称和状态
  • Redis的持久化以及性能管理
  • Docker部署Meta-Llama-3.1-70B-Instruct API openai格式,vLLM速度对比
  • USB协议学习
  • TDengine 数据订阅 vs. InfluxDB 数据订阅:谁更胜一筹?
  • 用户批评 SAP 的人工智能战略
  • Jest进阶知识:React组件的单元测试
  • MATLAB——矩阵操作
  • 智能数据驱动的风险管理:正大金融科技的创新实践
  • 贝尔不等式的验证
  • GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)
  • 伦敦金价格是交易所公布的吗?
  • Oracle SQL Loader概念及用法