Data Warehouse概念

Database and Ruby, Python, History


数据仓库 Data Warehouse

  1. 从业务数据中抽离数据,并针对决策和分析进行优化
  2. 是面向主题的,集成化的,稳定的,随时间变化的数据集合,用来支持管理决策的过程
  3. 数据来自多个数据源,并整合到一个数据库中

数据仓库和数据库的区别

  数据库 数据仓库
1 面向事务 面向主题
2 存储在线交易数据 所有历史数据
3 避免冗余 有意引入冗余
4 用来捕获数据的 用于分析数据

ODS

将贴源层的数据按照数据仓库的要求,并作简单的数据清洗。

数据集市

一般来说从数据仓库中根据需求,抽取所需的数据,组建各自的分析主题,获取数据组合后的新数据。数据集市是数据仓库的子集。

维度表

维度表包含对分析主题所属类型的描述,如时间,商品

事实表

对分析主题的度量,同时包含与维度表关联的外码。

数据模型

星型模型

一个事实表,多个维度表围绕且维度表之间没有关联。

雪花类型

基于星型模型,在维度表上增加细化的拆分

星座模型

基于星型模型,一个维度表被多个事实表关联。

渐变维 SCD

即是一种在多维数据仓库中实现维度历史的技术。有三种不同的SCD技术:SCD 类型1(SCD1),SCD类型2(SCD2),SCD类型3(SCD3).

  1. SCD1通过修改维度记录直接覆盖已存在的值,它不维护记录的历史。SCD1一般用于修改错误的数据。
  2. SCD2在源数据发生变化时,给维度记录建立一个新的“版本”,从而维护维度历史。SCD2不删除、修改已存在的数据。
  3. SCD3保持维本度记录的一个版。它通过给某个数据单元增加多个列来维护历史。例如,为了维护客户地址,customer_dim维度表有一个customer_address列和一个previous_customer_address列。SCD3可以有效的维护有限的历史,而不像SCD2那样维护全部历史。SCD3很少使用。它只适用于数据库空间不足并且用户接受有限维度历史的情况。

数据库的设计范式

  1. 第一范式 所有属性不可再分。比如语文考试成绩,我们可以拆分为科目,成绩,而不是揉在一起。
  2. 第二范式 消除非主属性对主属性的部分依赖。比如,对于(学号,科目)这样的主属性,成绩是非主属性。成绩对于(学号,科目)来说,是完全依赖。但是系主任对于(学号,科目)来说就是部分依赖,其实只需要依赖学号就行了。把学号拆出去,变成(学号,姓名,系名,系主任)。
  3. 第三范式 在2NF的基础上消除传递依赖。(学号,姓名,系名,系主任)中,学号就可以决定系名,系名可以决定系主任,存在传递依赖。再拆分出(系名,系主任)。