【mysql的设计与优化专题(2)】数据中设计中的范式与反范式
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。但是有些时候一昧的追求范式减少冗余,反而会降低数据读写的效率,这个时候就要反范式,利用空间来换时间。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
三范式
- 第一范式(1NF)
即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF。
关系型数据库: mysql/oracle/db2/informix/sysbase/sql server
非关系型数据库: (特点: 面向对象或者集合)
NoSql数据库: MongoDB/redis(特点是面向文档)
第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要我们设计一个主键来实现(这里的主键不包含业务逻辑)第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主键字段。就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放(能尽量外键join就用外键join)。很多时候,我们为了满足第三范式往往会把一张表分成多张表
反三范式
没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。
转载于:https://www.cnblogs.com/nixi8/p/4514144.html
【mysql的设计与优化专题(2)】数据中设计中的范式与反范式相关推荐
- 【mysql的设计与优化专题(6)】mysql索引攻略
所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找,而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...
- 【mysql的设计与优化专题(5)】慢查询详解
查询mysql的操作信息 show status -- 显示全部mysql操作信息show status like "com_insert%"; -- 获得mysql的插入次数;s ...
- MySQL之库表设计篇:一到五范式、BC范式与反范式详解
引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...
- mysql 怎么反选_MySQL 范式与反范式的选择 | 剑花烟雨江南
对于任何给定的数据通常有很多种表示方法,从完全的范式化到完全的反范式话,以及两者的折中.在范式化的数据库中,每个事实数据会出现并只出现一次.相反,在反范式化的数据库中,信息是冗余的. 如果不熟悉范式和 ...
- 数据库设计:范式与反范式
三范式 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性: 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主 ...
- 数据库设计的三范式和反范式
数据库设计的三范式和反范式 范式的概念 三范式 范式一 范式二 范式三 反范式 总结 范式的概念 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式 ...
- 深入理解MySQL索引设计和优化原则
索引类型 探讨索引设计和优化原则之前,先给大家熟悉一下索引类型: 主键索引PRIMARY KEY:它是一种特殊的唯一索引,不允许有空值.一般是在建表的时候同时创建主键索引. 唯一索引UNIQUE:唯一 ...
- mysql范式与反范式_给女同事讲解MySQL数据库设计范式与反范式,她夸我“技术好”...
1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...
- mysql数据结构优化,范式和反范式
1.范式,正常的建表,反范式,为了提高效率,适当的已空间换时间 2.垂直拆分,就是把经常用的.或者text大存储的字段单独拉出来存表 3.水平拆分,解决数据量大的问题,进行取莫的方式将数据放到相同的n ...
最新文章
- 微信小程序 长按图片不出现菜单_微信更新,新功能上了热搜
- [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
- linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能
- 目前机器学习最热门的领域有哪些
- 让英文版的LINUX 支持中文显示
- 小程序使用javascript-obfuscator工具进行代码混淆处理
- java打印sscil码_2018最新发布 |SSCI收录语言学学科期刊目录
- 方正飞鸿:工作流在OA系统中的重要性
- BZOJ 3351 ioi2009 Regions
- 转 从决策树学习谈到贝叶斯分类算法、EM、HMM
- ORA-06401: NETCMN: invalid driver designator 的解决办法
- 一套优秀的MES系统必须具备这3种核心功能
- uniapp添加阿里字体图标库图标
- 前端测试 -- sinon.js
- 6.1 手机时钟系统简介
- MRP计算之计划展望期、需求时界、计划时界及关系
- 测试人员在软件开发过程中的任务是什么?
- java中ofd文件转pdf_ofd格式如何转换成word
- c++ GUI应用---吃豆人游戏(Visual Studio 2019)
- 3分钟带你了解MES的工艺管理、绩效管理和报表管理
热门文章
- Model Builder空间选址建模技术
- ubuntu18 分辨率只有800*600/640x480,怎么转1920x1080
- android ble notify,Android BLE 以Notify的方式接收数据
- Matlab自学笔记:句柄、函数句柄、图像句柄(概念、用法、原理和区别)
- C++设计模式——备忘录模式(memento pattern)
- win10 家庭版安装软件报错:无法成功安装操作,因为文件包含病毒或潜在的垃圾软件
- 医疗AI的2020,会掉入大基金的“金钱陷阱”吗?
- 微信小程序如何引入外部字体包
- solidworks 2018 因动态绘制边线显示视图延迟的解决方案
- iOS-微信支付商户支付下单id非法