1、数据建模的意义
数据建模可以将大量的数据进行有序的、有结构的分类组织和存储,避免重复建设和数据不一致性,保证数据的规范性。就像图书馆中的书籍,我们希望它分门别类的放置,我可以快速高效的找出我需要的信息。数据模型就是数据组织和存储方法,它强调从业务、数据存储和使用角度合理存储数据。以便在成本(存储成本和使用成本)和效率之间取得最佳的平衡。
2、主题域
面向业务分析,将业务过程或者维度进行抽象的集合。
电商主题域实例:
3、指标体系
原子指标:基本业务事实,没有业务限定、没有维度。比如订单表中的订单量、订单总金额都算原子指标
派生指标:等于原子指标+时间修饰词+其他修饰词组合而来,可分为三类,事物型指标、存量型指标和复合型指标。
修饰类型:对修饰词的一种抽象划分,修饰类型属于某个业务域,如pc端的XXX
修饰词:指除了统计维度以外的业务场景限定修饰。
时间周期:统计指标的一个周期,大部都是前一天。
注意:派生指标唯一归属一个原子指标,继承原子指标的主题域,与修饰词的指标域无关。
5、表的分类
1、实体表
实体表,一般是指一个现实存在的业务对象。
比如用户,商品,商家,销售员等等。
用户表:
用户id | 姓名 | 生日 | 性别 | 邮箱 | 用户等级 | 创建时间 |
1 | 张三 | 2011-11-11 | 男 | zs@163.com | 2 | 2018-11-11 |
2 | 李四 | 2011-11-11 | 女 | ls@163.com | 3 | 2018-11-11 |
2、维度表
维度表,一般是指对应一些业务状态,编号的解释表。也可以称之为码表。
比如地区表,订单状态,支付方式,审批状态,商品分类等等。
订单状态表:
订单状态编号 | 订单状态名称 |
1 | 未支付 |
2 | 支付 |
3 | 发货中 |
4 | 已发货 |
5 | 已完成 |
商品分类表:
商品分类编号 | 分类名称 |
1 | 服装 |
2 | 保健 |
3 | 电器 |
4 | 图书 |
3、事务型事实表(事实表表示对一些行为的度量)
事务型事实表,一般指随着业务发生不断产生的数据。特点是一旦发生不会再变化。
一般比如,交易流水,操作日志,出库入库记录等等。
维度建模中一个非常重要的步骤是定义事实表的粒度。定义了事实表的粒度,则事实表能表达数据的详细程度就确定了。定义粒度的例子如下:
客户的零售单据上的每个条目。
定义好事实表的粒度有很大的用处。
第一个用处就是用来确定维度是否与该事实表相关。例如,对于粒度细到医疗单据上条目项的事实表来说,医疗结果是不会作为维度和它进行关联的,因为它们不在同一个粒度上。但是,对于一般的E/R数据模型来说,医疗单据是和医疗结果是进行关联的。通常的规范化建模里没有粒度的概念,它们表示的是实体之间的关系,这也是规范化建模和维度建模中一个较大的不同之处。
定义成原子的事实表粒度后,可以选择较多的维度来对该事实表进行描述。也就是说,事实表的粒度越细,能记载的信息就会越多。原子粒度的事实表对维度建模来说是至关重要的。
交易流水表:
编号 | 对外业务编号 | 订单编号 | 用户编号 | 支付宝交易流水编号 | 支付金额 | 交易内容 | 支付类型 | 支付时间 |
1 | 7577697945 | 1 | 111 | QEyF-63000323 | 223.00 | 海狗人参丸1 | alipay | 2019-02-10 00:50:02 |
2 | 0170099522 | 2 | 222 | qdwV-25111279 | 589.00 | 海狗人参丸2 | wechatpay | 2019-02-10 00:50:02 |
4、周期型事实表
周期型事实表,一般指随着业务发生不断产生的数据。
与事务型不同的是,数据会随着业务周期性的推进而变化并且只关心最终状态。
比如订单,其中订单状态会周期性变化。再比如,请假、贷款申请,随着批复状态在周期性变化。
5、累计快照事实表
一条数据代表一个不完整的业务过程,会发生改变,但改变是有限度的,例如订单表的状态。
订单编号 | 订单金额 | 订单状态 | 用户id | 支付方式 | 支付流水号 | 创建时间 | 操作时间 |
1 | 223.00 | 2 | 111 | alipay | QEyF-63000323 | 2019-02-10 00:01:29 | 2019-02-10 00:01:29 |
2 | 589.00 | 2 | 222 | wechatpay | qdwV-25111279 | 2019-02-10 00:05:02 | 2019-02-10 00:05:02 |
数据仓库中的维度和粒度
从时间的角度讲:简单说粒度就是事实表里测量值的测量‘频率’。比如说,销售库里的销售额,可以是一 天一个值,也可以是一个月一个值,甚至一年一个值,这就是相对于时间维度表的力度;可以是一个商品一个值,也可以是一类商品一个值,这就是相对于商品的粒度。