设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。但是有些时候一昧的追求范式减少冗余,反而会降低数据读写的效率,这个时候就要反范式,利用空间来换时间。

目前关系数据库有六种范式:第一范式(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)】数据中设计中的范式与反范式相关推荐

  1. 【mysql的设计与优化专题(6)】mysql索引攻略

    所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找,而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...

  2. 【mysql的设计与优化专题(5)】慢查询详解

    查询mysql的操作信息 show status -- 显示全部mysql操作信息show status like "com_insert%"; -- 获得mysql的插入次数;s ...

  3. MySQL之库表设计篇:一到五范式、BC范式与反范式详解

    引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...

  4. mysql 怎么反选_MySQL 范式与反范式的选择 | 剑花烟雨江南

    对于任何给定的数据通常有很多种表示方法,从完全的范式化到完全的反范式话,以及两者的折中.在范式化的数据库中,每个事实数据会出现并只出现一次.相反,在反范式化的数据库中,信息是冗余的. 如果不熟悉范式和 ...

  5. 数据库设计:范式与反范式

    三范式 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性: 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主 ...

  6. 数据库设计的三范式和反范式

    数据库设计的三范式和反范式 范式的概念 三范式 范式一 范式二 范式三 反范式 总结 范式的概念 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式 ...

  7. 深入理解MySQL索引设计和优化原则

    索引类型 探讨索引设计和优化原则之前,先给大家熟悉一下索引类型: 主键索引PRIMARY KEY:它是一种特殊的唯一索引,不允许有空值.一般是在建表的时候同时创建主键索引. 唯一索引UNIQUE:唯一 ...

  8. mysql范式与反范式_给女同事讲解MySQL数据库设计范式与反范式,她夸我“技术好”...

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  9. mysql数据结构优化,范式和反范式

    1.范式,正常的建表,反范式,为了提高效率,适当的已空间换时间 2.垂直拆分,就是把经常用的.或者text大存储的字段单独拉出来存表 3.水平拆分,解决数据量大的问题,进行取莫的方式将数据放到相同的n ...

最新文章

  1. 微信小程序 长按图片不出现菜单_微信更新,新功能上了热搜
  2. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
  3. linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能
  4. 目前机器学习最热门的领域有哪些
  5. 让英文版的LINUX 支持中文显示
  6. 小程序使用javascript-obfuscator工具进行代码混淆处理
  7. java打印sscil码_2018最新发布 |SSCI收录语言学学科期刊目录
  8. 方正飞鸿:工作流在OA系统中的重要性
  9. BZOJ 3351 ioi2009 Regions
  10. 转 从决策树学习谈到贝叶斯分类算法、EM、HMM
  11. ORA-06401: NETCMN: invalid driver designator 的解决办法
  12. 一套优秀的MES系统必须具备这3种核心功能
  13. uniapp添加阿里字体图标库图标
  14. 前端测试 -- sinon.js
  15. 6.1 手机时钟系统简介
  16. MRP计算之计划展望期、需求时界、计划时界及关系
  17. 测试人员在软件开发过程中的任务是什么?
  18. java中ofd文件转pdf_ofd格式如何转换成word
  19. c++ GUI应用---吃豆人游戏(Visual Studio 2019)
  20. 3分钟带你了解MES的工艺管理、绩效管理和报表管理

热门文章

  1. Model Builder空间选址建模技术
  2. ubuntu18 分辨率只有800*600/640x480,怎么转1920x1080
  3. android ble notify,Android BLE 以Notify的方式接收数据
  4. Matlab自学笔记:句柄、函数句柄、图像句柄(概念、用法、原理和区别)
  5. C++设计模式——备忘录模式(memento pattern)
  6. win10 家庭版安装软件报错:无法成功安装操作,因为文件包含病毒或潜在的垃圾软件
  7. 医疗AI的2020,会掉入大基金的“金钱陷阱”吗?
  8. 微信小程序如何引入外部字体包
  9. solidworks 2018 因动态绘制边线显示视图延迟的解决方案
  10. iOS-微信支付商户支付下单id非法