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

目录

一、第一范式

二、第二范式

三、第三范式

四、反范式化

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

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

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

  1. 一篇文章搞懂数据仓库:数据仓库架构-Lambda和Kappa对比

    在介绍Lambda和Kappa架构之前,我们先回顾一下数据仓库的发展历程: 传送门-数据仓库发展历程 写在前面 咳,随着数据量的暴增和数据实时性要求越来越高,以及大数据技术的发展驱动企业不断升级迭代, ...

  2. 一篇文章搞懂数据仓库:数据仓库规范设计

    目录 一.为什么要进行规范设计? 二.设计规范 - 指标 三.命名规范 - 表命名 3.1 常规表 3.2 中间表 3.3 临时表 3.4 维度表 四.开发规范 五.流程规范 一.为什么要进行规范设计 ...

  3. 一篇文章搞懂数据仓库:常用ETL工具、方法

    目录 一.什么是ETL? 二.ETL & ELT 三.常用的ETL工具 3.1 sqoop 3.2 DataX 3.3 Kettle 3.4 canal 3.5 StreamSets 四.ET ...

  4. 一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

    目录 1.什么是维度表? 2.维度表设计原则 (1)维度属性尽量丰富,为数据使用打下基础 (2)给出详实的.富有意义的文字描述 (3)区分数值型属性和事实 (4)沉淀出通用的维度属性,为建立一致性维度 ...

  5. 一篇文章搞懂数据仓库:数据应用--OLAP

    目录 1.OLAP和OLTP的区别 2.OLAP分类 3.OLAP基本操作 4.OLAP选型 1.olap和oltp的区别 OLTP OLAP 对象 业务开发人员 分析决策人员 功能 日常事务处理 面 ...

  6. c++ 计算正弦的近似值_一篇文章搞懂正弦保真性

    本文介绍数字信号处理中"正弦保真性"这一概念,想要更好地理解本文所述内容,建议读者先阅读<一篇文章搞懂卷积>. 正弦保真性定义 一个正弦信号作为线性时不变系统的输入时, ...

  7. 一篇文章搞懂filebeat(ELK)

    一篇文章搞懂filebeat(ELK) https://www.cnblogs.com/zsql/p/13137833.html 目录 一.filebeat是什么 1.1.filebeat和beats ...

  8. 一篇文章搞懂架构师的核心技能

    " 这是架构师系列的第一篇:核心技能,希望这个系列能完全揭示架构师这个职位:我先从核心技能开始,后续还有架构师之路,架构实战等架构师系列文章. 本文作者 陈睿 优知学院创始人,前携程定制旅游 ...

  9. 【一篇文章搞懂】什么是分布式锁?为什么要用分布式锁?看这篇文章准没错!

    简介 HikariCP 是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,和 dr ...

最新文章

  1. android html ajax请求,android - HTMLUNIT java javascript ajax - Stack Overflow
  2. php 调用微信收货地址,php版微信自动获取收货地址api用法示例
  3. vbs if 不等于_6、if语句和关系表达式
  4. python文件封装成jar_【Python】Python文件打包为可执行文件
  5. Linux笔记-inode基本概念
  6. 注意力机制(SE、Coordinate Attention、CBAM、ECA)、即插即用的模块整理
  7. CV 加持的工业检测,从算法选型到模型部署
  8. unity 获取鼠标点击位置_Unity中实现瓶中液体晃动的效果(从建模开始)一
  9. 解决M1的mac打开JD-GUI报错问题(超简单)
  10. 当当图书排行榜html,最-当当图书
  11. 基于Salt Event系统构建Master端returner
  12. 知识图谱中三元组抽取
  13. linux中/etc/hosts文件的含义
  14. 【实验】串口通信小试
  15. (C++)设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,包括某日期加上指定天数、某日期减去指定天数、两个日期相差的天数等。
  16. IOS证书获取(证书profile文件,p12私钥证书,证书私钥密码,Bundle ID)
  17. 软件测试的类型有哪几种?
  18. 高温环境对三极管性能的影响
  19. javawebJAVA JSP企业合同管理系统JSP合同签订管理系统JSP合同备案系统
  20. 嵌入式平台USB驱动程序移植(zc0301p 摄像头)

热门文章

  1. 从朴素贝叶斯到贝叶斯网
  2. 机器学习从理论到工程的第二步-开发环境与工具篇
  3. LsLoader——通用移动端Web App离线化方案
  4. 论文浅尝 - ACL2020 | 用于多媒体事件提取的跨媒体结构化公共空间
  5. 【机器学习】逻辑回归模型
  6. redis集群的搭建详细教程
  7. 【多线程】:Synchronized和ReentrantLock的对比
  8. SSD: ReLU6
  9. ipython 学习笔记 2 network graph--NetworkX
  10. FL2440移植linux内核常用命令(command)