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

目前关系数据库有六种范式:第一范式(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.zhihu.com/question/19900437著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:孙文亮
链接:https://www.zhihu.com/question/19900437/answer/14089402
来源:知乎数据库设计应该也是分为三个境界的:第一个境界,刚入门数据库设计,范式的重要性还未深刻理解。这时候出现的反范式设计,一般会出问题。第二个境界,随着遇到问题解决问题,渐渐了解到范式的真正好处,从而能快速设计出低冗余、高效率的数据库。第三个境界,再经过N年的锻炼,是一定会发觉范式的局限性的。此时再去打破范式,设计更合理的反范式部分。范式就像武侠里面的招数,初学者妄想不按招数来,只能死的很难堪。毕竟招数都是高手总结归纳的精华。而随着武功提高,招数熟练之后,必然是发现招数的局限性,要么忘掉招数,要么自创招数。只要努力,加上多熬几年,总能达到第二个境界,总会觉得范式是经典。此时能不过分依赖范式,快速突破范式局限性的人,自然是高手。

转载于:https://www.cnblogs.com/olinux/p/5191062.html

MySQL中数据中设计中的范式与反范式相关推荐

  1. lmbs PHP,PHP 清空 MySql 指定数据表中的所有数据

    PHP 清空 MySql 指定数据表中的所有数据 PHP 清空 MySql 指定数据表中的所有数据,在烈火小编在网上闲逛时,这是某技术博客的一篇文章,说是文章,并没有文字,只有代码,经过测试可以使用, ...

  2. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  3. MySQL修改数据表中的字段名

    MySQL修改数据表中的字段名 在一张数据表中只能设置一个唯一名称的字段名.在同一张数据表中,不能出现两个名称完全相同的字段名. 因此,数据库系统可以通过字段名来区分数据表中的不同字段. 在MySQL ...

  4. Java学习笔记:数据库中的范式和反范式

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出率.优雅的数据库,否则可能会设计出 ...

  5. 数据库中的范式和反范式详解!

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出率.优雅的数据库,否则可能会设计出 ...

  6. Java学习之数据库中的范式和反范式

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出高效率.优雅的数据库,否则可能会设 ...

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

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

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

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

  9. 关系数据库的范式和反范式

    为什么80%的码农都做不了架构师?>>>    范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结 ...

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

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

最新文章

  1. 三星电池正在获取使用模式_三星Galaxy S10系列超大电池持久动力,解决电量烦恼...
  2. 蚂蚁森林合种计划(2020.12.12,7天有效,每周6更新)
  3. 嘿,是时候重新认识下海淘了
  4. python如何创建不同元素的矩阵_Python numpy学习(2)——矩阵的用法
  5. flash socket通信问题
  6. 华为手机EMUI换鸿蒙,华为手机3月全面切换鸿蒙 EMUI 11或为安卓内核绝唱
  7. edge浏览器下载位置设置
  8. python基本代码教程-Python基础教程(第3版)
  9. Leetcode10. Regular Expression Matching
  10. uvalive3983Robtruck
  11. Atitit 中间件之道 attilax著 1. 第1章 中间件产生背景及分布式计算环境 2 2. 中间件分类 2 2.1. 通讯,消息,数据存储中间件 3 3. 第3章 COM相关技术 3 4.
  12. eclipse git拉取失败_收藏!工作中Git使用实践和常用命令流程合集
  13. TCP协议的三次握手+四次断开
  14. 软件外包,IT咨询和转型
  15. 6月第3周网络安全报告:境内感染网络病毒主机55.4万
  16. 电厂供配电模拟实训系统QY-GPD03
  17. 汇编堆栈平衡的几种方式
  18. 文件快速拷贝工具大比拼,谁是最快的复制软件
  19. 【思想总结】关于最近思想滑坡的反省
  20. python sep参数_Python中带有print()函数的sep参数

热门文章

  1. linux虚拟机cpu一分钟内负载,虚拟机性能调优-CPU篇
  2. mysql主键外键_MySQL数据库的主键和外键详解3
  3. c++ static 关键字总结
  4. Semaphore使用,占桌把戏
  5. MySQL解压缩版配置安装详解【图解】
  6. vtk c++ 图像分割_医学图像分割-Attention Unet
  7. V.Replication and Sharding(创建主从数据库)
  8. 【渝粤教育】国家开放大学2018年秋季 0556-22T广告摄影 参考试题
  9. 【渝粤教育】国家开放大学2018年春季 8038-21T实用管理基础 参考试题
  10. 徐家骏写给任正非的辞职信