一篇文章搞懂数据仓库:三范式与反范式

少年易老学难成,一寸光阴不可轻。

目录

一、第一范式

二、第二范式

三、第三范式

四、反范式化

五、范式化设计和反范式化设计的优缺点

5.1 范式化 (时间换空间)

5.2 反范式化(空间换时间)

六、OLAP和OLTP中范式设计


       范式是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。

       关系数据库中的关系必须满足一定的要求,即满足不同的范式。大数据生态中,各类强大的查询引擎层出不穷,相对廉价的磁盘和分布式技术,也让数据冗余变得可接受甚至更加方便。

       在创建一个数据库的过程中,范化是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系以及定义所需的表和各表中的项目等这些初始工作之后的一个细化的过程。

一、第一范式

1NF要求属性具有原子性,即列不可再分解;

表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......

如学生(学号,姓名,性别,出生年月日)

有些钢筋可能要问了,姓名可以拆成姓、名两列, “出生年月日” 也可以拆成年、月、日三个字段。所以就不满足第一范式了!!!这里再强调一下原子性,原子性是根据使用方便来自定义的最小单位。中国人一般姓名一起用,美国就习惯姓名分别存两字段

二、第二范式

2NF要求记录有惟一标识,即不存在部分依赖;

简单来说就是拆表,以人为粒度做一张明细表,以课程号为粒度做一张维度表,两表关联使用,消除了数据冗余

表:学号、课程号、姓名、学分;

这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号姓名依赖与学号,所以不符合二范式。

可能会存在问题:

  • 数据冗余:每条记录都含有相同信息;
  • 删除异常:删除所有学生成绩,就把课程信息全删除了;
  • 插入异常:学生未选课,无法记录进数据库;
  • 更新异常:调整课程学分,所有行都调整。

正确做法: 
学生:Student(学号, 姓名); 
课程:Course(课程号, 学分); 
选课关系:StudentCourse(学号, 课程号, 成绩)。

三、第三范式

3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

表: 学号, 姓名, 年龄, 学院名称, 学院电话

因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

可能会存在问题:

  • 数据冗余:有重复值;
  • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况 。

正确做法:

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院, 电话)。

四、反范式化

一般说来,数据库只需满足第三范式(3NF)就行了。

    没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的

  〖例〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。

    在Rose 2002中,规定列有两种类型:数据列计算列。“金额”这样的列被称为“计算列”,而“单价”和“数量”这样的列被称为“数据列”。

五、范式化设计和反范式化设计的优缺点

5.1 范式化 (时间换空间)

优点:

  • 范式化的表减少了数据冗余,数据表更新操作快、占用存储空间少。

缺点:

  • 查询时需要对多个表进行关联,查询性能降低。 
  • 更难进行索引优化

5.2 反范式化(空间换时间)

反范式的过程就是通过冗余数据来提高查询性能,但冗余数据会牺牲数据一致性

优点:

  • 可以减少表关联
  • 可以更好进行索引优化

缺点:

  • 存在大量冗余数据
  • 数据维护成本更高(删除异常,插入异常,更新异常)

六、OLAP和OLTP中范式设计

OLAP 一般冗余比较多,以查询分析为主,这种一般都是采用反范式设计,以提高查询效率。更新一般是定时大批量数据插入。

OLTP 则是尽可能消除冗余,以提高变更的效率。因为这种应用无时无刻不在频繁变化。

 

 

大数据生态圈常用组件(一):数据库、查询引擎、ETL工具、调度工具等

传送门: https://blog.csdn.net/weixin_39032019/article/details/89340739

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年全球AI突破性技术TOP10

来源:艾瑞网摘要:聪明的科技公司都不再单一的专注于自己的传统业务,而是着眼于未来,不断创新技术,跨界融合打造一个整合的生态系统。人工智能是个高科技、宽领域、多维度、跨学科的集大成者,从立足大数据、…

Linux的发展

1. Linux发展史 说起Linux你可能要问Linux是从哪里来的?他是怎么发展的?   要想知道Linux,还得从UNIX说起。 1.1 UNIX发展的历史 1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊…

Hbase rowkey设计原则,热点问题

rowKey的作用 读写数据时通过 RowKey 找到对应的 Region;MemStore 中的数据按 RowKey 字典顺序排序;HFile 中的数据按 RowKey 字典顺序排序。 rowkey设计原则 唯一性:类似于MySQL、Oracle中的主键,用于标示唯一的行;…

MEF: MSDN 杂志上的文章(15) 拒绝【多个导出,但只用一个导入,会拒绝,但还是稳定的组合】...

http://msdn.microsoft.com/zh-cn/magazine/ee291628.aspx转载于:https://www.cnblogs.com/Ken-Cai/archive/2012/06/22/2558978.html

全球11个行业、71家知名企业的创新Lab与布局

来源:CBInsights新技术的革新引发了商业世界重构的浪潮,在这一波由人工智能引领的创新潮流里唯有拥抱变化才能不为时代淘汰,顺应趋势取得更大的发展。新技术的革新引发了商业世界重构的浪潮,在这一波由人工智能引领的创新潮流里唯…

组队竞赛

题目解析: 队伍的水平值等于该队伍队员中第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值。所以实际值把最大值放到最右边,最小是放到最左边。 解题思路: 本题的主要思路是…

【SD】差异值 生成 同一人物 制作 表情包 【1】

说明:只对AI生成的人物,效果稳定。 Reference差异值 生成表情 首先生成一张图片。 测试命令:1 man,chibi,full body, 模型:envyclarityxl02_v10.safetensors [f6c13197db] 种子:2704867166 》》测试命令&#xff1a…

MySQL索引原理、失效情况

声明:本文是小编在学习过程中,东拼西凑整理,如有雷同,纯属借鉴。 Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 BTree索引 1.2 主键索引和普通索引的区别 1.3 唯一索引vs普通索引 2 mysql索引优化 2.1 查看索引使…

2018年人工智能全景图与发展趋势分析

来源:专知摘要:风险资本家马特图尔克(Matt Turck)最近发布文章,能力越大,责任越大,介绍了大数据与人工智能在2018年发展的趋势,并发布了全景图,涵盖基础架构、开源框架、…

李晨 | 无人机市场浅析

来源:无人机作者简介:西北工业大学民用无人机研发中心副主任无人机市场浅析无人机市场分类过去无人机一直是军用为主,不论是伊拉克战争还是好莱坞大片,无人机在执行军事任务方面起到了不可替代的作用。在2010年以前,军…

[转载] 财经郎眼20120423:长点心吧“两桶油”!

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2012/06/24/2559970.html

linux 监控网络IO、磁盘、CPU、内存

linux 监控网络IO、磁盘、CPU、内存 CPU:vmstat ,sar –u,top磁盘IO:iostat –xd,sar –d,top网络IO:iftop -n,ifstat,dstat –nt,sar -n DEV 2 3磁盘容量&a…

不要二

题目解析: 本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕, 一个坐标位置放了蛋糕,跟他欧几里得距离为2的位置不能放蛋糕,这个就是关键点。对于两…

干货|100张PPT讲透工业机器人的机械结构

来源:机电微学堂未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网&…

现实生活中我们常常遭遇“怀疑”

现实生活中,我们常常遭遇这样的“怀疑”。“最美婆婆”陈贤妹打破路人冷漠出手相救女童,被人猜度为“想出名”;“最美司机”吴斌忍着剧痛完成了“最后的制动”,有人却质疑他违章在先才这么做;看到热心人帮扶摔倒的老人…

虚拟机磁盘扩容流程

磁盘扩容: 1.vgdisplay #查看vg 2.lvdisplay #查看需扩容目录的全名 3.df -h #查看lv 4.fdisk /dev/sdb 依次输入:n p 回车 回车 回车 w …

最低票价

题目: 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有三种不同的销售方式: 一张为期一天的通行证售价为…

基础理论研究是人工智能持续发展的保证

来源:图灵人工智能摘要: 人工智能的主流技术的发展大致经历了三个重要的历程。人工智能的主流技术的发展大致经历了三个重要的历程。1956-1965年,人工智能的形成期,强调推理的作用。一般认为只要机器被赋予逻辑推理能力就可以实现…

鼠标关机后仍然发光的实用解决方法

现在朋友们用的鼠标大多数都是光电鼠了,但是大家注意到这样一个现象没有呢?就是在正常关机以后鼠标仍然在继续发光而不会灭,为什么呢??如何才能解决这样的问题呢??下面就介绍一下“让鼠标在关机…

kettle创建mysql资源库

步骤: 1. 创建一个库: create database xxx; 2. 创建kettle用户,密码也为kettle 3. 给kettle用户使用xxx 库的权限。 4. 刷新权限,使权限生效。 代码: create database xxx; DROP USER kettle10.150.xx.xx ; CREATE USER ket…