维度表创建

0
1.客户维度表
 
id  姓名   职业    学历
1   张三   工人     本科
2   李四   农民     本科
 
2.客户维度表
 
id  姓名    职业id   学历id
1    张三    1         1
2    李四    2         1
 
职业维表
id 职业
1   工人
2   农民
 
学历维表
id  学历
1   本科
2   专科
 
上面两种方法来创建客户维度表,那种方式比较好?分别适用那些业务场景?谢谢。
 
已邀请:
1

simon_cao - 打酱油 2016-04-08 回答

首先第一个例子是一张客户信息的事实表。
其次第二个例子将客户信息维度化。得出一张主表和两张维度表,维度表分别是职业维度与学历维度。
 
那么接下来我们分别说说两种创建数据模型的好坏:
第一个例子
优点:1. 方便查询,可以直接根据客户id查出客户相关信息,无需关联任何维度表。
缺点:1. 我能想到的缺点也许就是会占用更多的存储空间吧,当然客户数据再多也是有限的,比起OLTP这点存储可以忽略。
第二个例子
优点:1. 维度建模dimension fact,将维度信息抽出单独建表。
          2. 省存储,数据模型化
缺点:1. 对于维度建模,前期的数据探查尤为重要,需要分析出能够满足业务需要的维度信息。
          2. 需要考虑到代理键逻辑以及是否涉及到维度的维度,例如本科分为一本,二本,三本,专升本等等。数据时代细小的数据对分析也是有重要意义的。
 
再说说关于建模无论是3F还是维度建模,目的都是更好的满足业务需求,更好的满足系统需要,所以有时要属性下放,有时又不得不为了满足性能去增加冗余。
 
关于客户信息相关的建模,我想可以根据业务或客户个体去将共有的和共同的属性抽出来作为主表,然后在根据客户个体去抽象几类,然后根据抽象出的客户个体类再去细化不同的维度。
 
希望可以抛砖引玉,各位大神请指正、补充。
 
0

夏尔康 - 通晓各种统计学习方法,熟练使用R语言建模,结合帅气与才智的不明吃瓜群众 2016-03-31 回答

用数据库的角度去看的话肯定是第二种最好,灵活性,可扩展性
0

qjxiaopang - 懒惰是成功的最大绊脚石 2016-03-31 回答

第二种建模是满足3NF的,是比较建议的做法

要回复问题请先登录注册