一. 个人工作背景
w年的java设计开发经验(三范式)
w年的传统仓库经验(三范式)
w年的大数据数仓经验(维度模型)
血液里流淌的都是三范式和对象关系和er关系,即使现在做维度建模,脑袋里是先有的三范式。
后面的观点都是站在个人立场从个人角度对维度模型和三范式关系的理解,纯粹的维度模型信奉者千万别忘下看,重要!!!!
二 . 个人观点
1. er关系对维度模型同样重要
借款事实表:
借款单id (dd)
借款日期(fk)
借款人 (fk)
借款产品(fk)
借款金额
状态1(dd)
状态2 (dd)
状态3(dd)
还款事实表:
还款id (dd)
借款单id (dd)
还款日期 (fk)
还款方式 (fk)
还款金额
开发还款事实表过程前,为了从借款事实表拿取维度信息
开发完还款事实表后, 为了进行横向钻取
借款事实表和还款事实表之间的关系都是必须的,维度模型里叫退化维度,三范式里叫er关系或者主外键。
但是,维度模型的方法论,核心文档总线矩阵里都没有体现事实表之间的关系。
2. 维度模型和三范式模型之间应该可以互相无损转换
这个应该没有歧义
3. 维度建模前是否有必要建三范式
取决于个人工作经历和数据复杂度。
个人觉得非常必要,即使不落地,脑袋里也得有,关键地方先打通表之间的关系,再谈应用。
做过俩项目:
- 还款和催收: 完全俩系统不相关, 但是统计上得打通关系。 不管后面有啥需求,先根据规则(相当复杂)搭个桥通过这俩表之间的主外键打通这俩主题的关系,使自己脑中的三范式完整。
- 点击流量和订单:完全不相关的两份数据,但是为了看订单从什么渠道来的进而调整广告策略,得打通。
印证前面的, 关系对维度模型同样重要,
遇到类似的问题,是三范式打通还是维度模型打通,我自己是通过三范式打通,没有全部实现三范式, 关键地方用三范式物理打通关系后,使自己脑中逻辑三范式完整,再往下走。
取决于个人工作经历和数据复杂度。
4. 维度模型分布式建设
维度模型方法论是基于一致性维度来实现维度模型分布式建设,然后通过一致性维度统一的。
如果不考虑事实表之间的关系,没问题。但是如果考虑到事实表之间的关系就不这么简单。
先a 再b 再c ,这种逻辑很常见。
b 要从a取维度, 而且还得保证自己保存的退化维度确实能关联到a。
最简单的方式是先做a 再做b
跳过a 先做b就得有强规范约束,有难度。
5. 没有宏观业务的完整的数据时能不能进行维度模型建设
能, 能做多少是多少,先支持需求,大不了之后再补充。这个是维度模型的优势。
反过来,如果已经有了业务的全景视角,就没必要不用吧。
。。。。。。
6. 总结
所以三范式和维度模型到底有啥区别, 好像也没啥本质的区别,相同信息的不同存储方式而已,
信息怎么来的 , 需不需要三范式暂存一下,看自己背景和业务复杂度。