数据仓库-数仓是如何反三范式的?

在回答数据库和数据仓库的区别时,最常见的回答是数据仓库反三范式,数据库遵循三范式。 那么具体的区别是什么?下面进行简单的说明。

数据库三范式

  1. 字段列含义不可分割。

数据库默认遵循第一范式,不遵循第一范式无法创建表,下面的"进货"和"销售"列可以再细分,所以不符合第一范式。

     2.表有主键,且非主键列依赖主键列。

下图中可以将"学号"和"课名"作为联合主键,但是非主键列如"系主任"并没有直接依赖联合主键,所以不符合第二范式。

         3.非主键列不互相依赖。

非主键列"系名"和"系主任"互相依赖,不符合第三范式。

   

通常情况下数据库表设计会遵循三范式,但是有时候也不一定。那么,三范式的设计初衷是什么或者到底有什么作用。概括性的说包括以下三个方面:

  • 减少数据冗余
  • 增加数据有效性检查
  • 提高存储效率

比如上图反第二范式的图中,数据冗余存储(系名和系主任冗余),在删除某个系学生数据时会导致系信息丢失,导致删除异常,插入一个新的系但是没有学生时会产生插入异常,修改时会有修改异常等,遵循第二范式,数据表动时,会检查这些数据的有效性,从而避免脏数据。另外,将表拆分存储,实际上提高了单表的存储效率。

数据仓库反三范式

以hive为例,关系型数据库表字段类型都是确定的某个值,比如VARCHAR,TIME,TEXT,INT等等。但是hive除了有与之对应的基础数据类型外,还有复合数据类型,比如ARRAY,MAP,STRUCT等等类型,这是反数据库第一范式的。在hive建表时是没有主键的(可以添加自增列https://blog.csdn.net/wzy0623/article/details/53893174/),二期允许数据冗余,这么做的目的是进行数据分析时,减少数据IO及网络消耗。表中数据可以有依赖,因此是反数据库第二第三范式的。

 

参考资料:数据库第一二三范式到底在说什么? https://zhuanlan.zhihu.com/p/20028672

 https://www.cnblogs.com/xiaozengzeng/p/10720226.html

https://www.cnblogs.com/li1056822533/p/6364443.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值