数据建模和ER图
ER图
用矩形表示实体Entity,仅仅用单数单词表示
用菱形表示关系Relationship,总是在两个实体中间。
cardinality 链接线上的数字,比如用m,n表示0到无穷多的数
因此我们有一对一,一对多,多对多三种关系。
如果一个课程可以被多/只能被一名用户学习,那么在用户附近为多/一标记;
如果一个用户可以学习多//只能学习一个课程,那么在课程附近为多/一标志;
使用椭圆形表示attribute属性,可以连接到实体或者属性上面。
完整ER图.PNG星型结构 VS. 雪花型结构(Star Schema vs. Snowflake Schema)
这个是两种最常见的数据仓库的模型。
这两者都是关系型数据库管理数据集市 data mart 或者 实体数据仓库 entire data warehouse的方法.。
都是用了维度表格 dimension table 来描述在一个表格中的数据。
下面用一个销售模型举例
星型模型.PNG星型结构最大的特点就是,维度表格没有被正则化。dimension tables are not normalized.
上面的结构中,fact_sales 表格存储了聚合自操作型数据库的数据,其余表格则为维度表格 dimension tables.。选取这五个维度的原因是我们需要这五个属性。
星型结构中,中间的事实表格 fact table 被周围的维度表格 dimension table 包围住
雪花结构.PNG先不要被这个庞大的图吓坏了,雪花结构模型看着庞大很多,实际上存储的数据与上面一模一样,事实表 fact table 拥有相同数量的 维度表
最主要的差别在于,雪花结构中的维度表已经被正则化了,正则化的过程也被称为雪花化 snowflaking
1. 正则化 Normalization
雪花结构使用更少的空间存储维度表,因为正则化后的数据库会很大幅度地减少多余记录 redundant record
未正则化的数据模型增加了发生数据完整性问题的概率 data integrity problems,使得后续的修改和维护更加复杂,而且雪花结构更有逻辑性
2. 查询复杂度 Query Complexity
雪花结构查询更加复杂,我们需要深挖数据库才能得到我们想要的数据。
在星型结构中,我们最多只需要每一个维度表进行一次 join 操作。
join 两个表格的操作需要数据库管理系统 DMBS 处理请求,这个操作得花费时间。因为两个表格在硬盘中的存储位置可能不同,但是在同一个表格里面的数据往往是存储在更接近的地方。
一般来说,雪花结构的查询速度会更慢,但是在大多数情况不会表现出问题。
为了加速报表 reporting 速度,我们可以:
- 一定的程度地聚合数据,这会大大压缩数据,我们需要 ETL 过程来转化实时数据,使其能适应报表结构
- 建立一个中央数据区域存储所有的数据
- 仅仅提供给用户他们需要的分析和报表数据
那么我们究竟怎么选择这两种模型呢?
- 雪花结构 snowflake schema
- 在数据仓库中使用,因为数据仓库是公司数据的中心,这样做可以节省大量的空间。
- 当维度表需要大量的存储空间时,我们可以选择使用雪花结构。大多数情况下,事实表 fact table 需要大部分的存储空间,同时增长速度也会远超维度表。然而,比如当维度表存储了大量的重复但需要的属性。
- 星型结构 star schema
- 在数据集市 data mart 中使用,数据集市是中央数据仓库的数据子集,因此并不会包含所有的历史数据,因此没有必要节省空间
- 星型结构简化了后续分析和使用
上述的两个模型都是关系型数据库用到的数据仓库/集市模型,一般来说我们使用雪花结构实现数据仓库,星型结构实现数据集市。