数据库设计的三范式和反范式
数据库设计的三范式和反范式
- 范式的概念
- 三范式
- 范式一
- 范式二
- 范式三
- 反范式
- 总结
范式的概念
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
三范式和反范式是空间和时间的关系。三范式是为了降低空间;反范式是通过增加空间来提升运行效率。
三范式
(1)目的:减少空间占用。
(2)内容:列不可分、依赖主键(联合索引)、在依赖主键(联合索引)的基础上直接依赖。
范式一
确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值。
例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为多个字段,省份、城市、详细地址等。
姓名 | 地址 |
---|---|
fly1 | 广西壮族自治区南宁市越秀区繁华东路66号8栋8楼8号 |
fly2 | 广东省深圳市福田区繁华东路66号8栋8楼8号 |
fly3 | 湖南省长沙市岳麓区繁华东路66号8栋8楼8号 |
可以才分为:
姓名 | 省份 | 市 | 区 | 路 | 牌 | 详细信息 |
---|---|---|---|---|---|---|
fly1 | 广西壮族自治区 | 南宁市 | 越秀区 | 繁华东路 | 66号 | 8栋8楼8号 |
fly2 | 广东省 | 深圳市 | 福田区 | 繁华东路 | 66号 | 8栋8楼8号 |
fly3 | 湖南省 | 长沙市 | 岳麓区 | 繁华东路 | 66号 | 8栋8楼8号 |
范式二
确保表中的每列都和主键相关,而不能只与主键的某一部分相关(组合索引)。
订单编号 | 商品编号 | 商品名称 | 数量 | 单位 | 价格 | 客户 | 所属单位 | 联系方式 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 电脑 | 1 | 台 | 10000 | fly1 | FLY | 13788888888 |
1 | 2 | 手机 | 2 | 部 | 6000 | fly1 | FLY | 13788888888 |
2 | 3 | ipad | 3 | 部 | 3000 | fly2 | BAT | 13799999999 |
因为订单编号与客户的信息相关,订单编号和商品编号一起唯一确定数量,商品编号和商品信息相关;所以可以拆分成三个表:
订单编号 | 客户 | 所属单位 | 联系方式 |
---|---|---|---|
1 | fly1 | FLY | 13788888888 |
2 | fly2 | BAT | 13799999999 |
订单编号 | 商品编号 | 数量 |
---|---|---|
1 | 1 | 1 |
1 | 2 | 2 |
2 | 3 | 3 |
商品编号 | 商品名称 | 单位 | 商品价格 |
---|---|---|---|
1 | 电脑 | 台 | 10000 |
2 | 手机 | 部 | 6000 |
3 | ipad | 部 | 3000 |
范式三
确保每列都和主键直接相关,而不是间接相关;减少数据冗余。
例如
订单编号 | 订单项目 | 负责人 | 业务员 | 订单数量 | 客户编号 |
---|---|---|---|---|---|
1 | 电脑 | fly1 | alice | 10 | 1 |
2 | 手机 | fly2 | molic | 20 | 2 |
3 | ipad | fly3 | selia | 30 | 1 |
可以拆分为:
订单编号 | 订单项目 | 负责人 | 业务员 | 订单数量 | 客户编号 | 客户名称 | 所属公司 | 联系方式 |
---|---|---|---|---|---|---|---|---|
1 | 电脑 | fly1 | alice | 10 | 1 | vico | 0voice1 | 13766666666 |
2 | 手机 | fly2 | molic | 20 | 2 | milo | 0voice2 | 13799999999 |
3 | ipad | fly3 | selia | 30 | 1 | vico | 0voice1 | 13766666666 |
客户编号 | 客户名称 | 所属公司 | 联系方式 |
---|---|---|---|
1 | vico | 0voice1 | 13766666666 |
2 | milo | 0voice2 | 13799999999 |
反范式
反范式是经常使用的设计。比如用户表采用的就是反范式,因为如果用户表不采用反范式设计,将会产生很多的关联关系表,这就会涉及到联表查询,非常影响效率,特别对登录来说,是不可容忍的。
因此,反范式允许冗余存储,为了提升查询效率。
总结
- 范式二中,对于联合索引,主键不能依赖一部分,而要依赖整体;出现重复的要拆分。
- 反范式是经常使用的设计。三范式可以避免数据冗余,减少数据库的空间,减小维护数据完整性的麻烦。但是采用数据库范式化设计,可能导致数据库业务涉及的表变多,并且造成更多的联表查询,将导致整个系统的性能降低。因此处于性能考虑,可能需要进行反范式设计。
数据库设计的三范式和反范式相关推荐
- 数据库三范式与反范式详解(一看就懂)
目 录 范式与反范式 1.第一范式 2.第二范式 3.第三范式 4.反范式 范式与反范式 范式化设计 通过满足下面提出的三条范式规则,尽可能的避免出现数据冗余 因为数据冗余会带来,数据UPDATE更新 ...
- 三十二、数据库设计的三范式【完】
数据库设计的三范式 第一范式 数据库表中不能出现重复记录,每个字段是原子性的不能再分 不符合第一范式的示例 学生编号 学生姓名 联系方式 1001 张三 zs@gmail.com,1359999999 ...
- 数据库设计:范式与反范式
三范式 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性: 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主 ...
- MySQL之库表设计篇:一到五范式、BC范式与反范式详解
引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...
- Java学习笔记:数据库中的范式和反范式
范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出率.优雅的数据库,否则可能会设计出 ...
- 数据库中的范式和反范式详解!
范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出率.优雅的数据库,否则可能会设计出 ...
- Java学习之数据库中的范式和反范式
范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出高效率.优雅的数据库,否则可能会设 ...
- 关系数据库的范式和反范式
为什么80%的码农都做不了架构师?>>> 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结 ...
- mysql 怎么反选_MySQL 范式与反范式的选择 | 剑花烟雨江南
对于任何给定的数据通常有很多种表示方法,从完全的范式化到完全的反范式话,以及两者的折中.在范式化的数据库中,每个事实数据会出现并只出现一次.相反,在反范式化的数据库中,信息是冗余的. 如果不熟悉范式和 ...
最新文章
- php内外边距,选择器与内外边距使用方法(margin,padding使用)-2019年9月4日
- Linux下查看进程IO工具iopp
- (严蔚敏版)数组的顺序存储表示和实现代码
- 佳能g2810打印机扫描怎么用_办公用这款佳能彩色激光打印机无线MF643CDW就够了!...
- Python实例讲解 -- 认识wxpython 的 Frame
- 面向对象与原型(二)
- ASP.NET深入浅出系列3- Page类
- 计算机专业可以转英语吗,计算机专业英语词汇转.doc
- Atitit MP3元数据抽取结果 音乐信息检索 取出了重复和英文的数据 一共368个。。 /bookmarksHtmlEverythingIndexPrj/src/apkg/songlistC
- iOS开发之音视频边下边播缓存方案
- 今日新闻快讯摘要十条
- mysql myisam转innodb_WordPressMySQL数据库MyISAM表转换InnoDB方法和修复工具
- Kile5安装教程和创建一个工程举例【图文STM32F407ZE芯片为例】
- FPGA入门经历的阶段
- [linux学习笔记] GCC环境安装问题
- 主流加密通信应用Signal在中国“失联”
- 基于粒子群算法的组卷系统的研究与实现
- VUE项目前端页面添加水印
- 目标人脸检测与识别(计算机视觉)
- 《黑天鹅》观感:成长的蜕变 --摘抄
热门文章
- c语言老人与海英文单词汇总,【March·翻译】老人与海(1)单词卡coil [kɔɪl
- 牛客-桃花——一个计算多叉树直径的问题
- 那些年,我熟知的影视明星(1)
- java 图片缩小模糊问题
- 程序员须知:面试中最容易被问到的18个算法题(附答案!)
- cad制图坐标系转换为地理坐标系
- 网站漏洞扫描注入批量getshell工具
- 网络笔记(5) 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
- Self-Supervised Visual Feature Learning With Deep Neural Networks: A Survey
- 一份超全超详细的 ADB 用法大全