问个事实表维度表设计的问题 100分
实例
原OLTP业务系统数据为
企业销售记录表
企业ID 销售额 销售时间 销售商品编码
4322 243 2009.6.5 3243432
4322 53 2009.5.5 324352432
4352 3243 2009.1.5 32436432
4377 3233 2005.5.5 324362432
4321 233 2007.1.5 324336432
4306 24 2008.5.5 324362432
销售商品编码表
种类大类 销售商品编码
02 3243432
04 3323432
24 3235435
24 3654597
52 3243432
如果建立设计事实表字段 维度表字段 以及PK FK 关联
实现
1 以时间维度 年 季度 月 层次钻取
2 以商品编码维度 实现 大类 商品编码 钻取
最好以为上例实际为准
[解决办法]
时间维度我们通常使用7列的结构:
YEAR_NAME YEAR_CODE MONTH_NAME MONTH_CODE DAY_NAME DAY_CODE DATE_KEY
2009 2009 09 2009-09 17 2009-09-17 1
NAME是方便前端的展示,CODE是方便后台查询
至于商品,直接就是 :
TYPE_ID PRODUCT_ID PRODUCT_KEY
这样,原来的表就成了这样了:
企业ID 销售额 时间KEY 商品KEY
然后在UNIVERSE里,检测外键的时候,会自动的检测1与N的关系
[解决办法]
1、时间维度:需要新建时间维度表,按照年、季度、月、日的层次就好了
2、商品维度:使用销售商品编码表,建立出需要的商品大类、商品编码就好了(一般用的是商品名称而不是编码)
3、事实表: 企业销售记录表 中的销售时间与时间维度关联,销售商品编码与商品维度关联就行了
[解决办法]
小数据量可以这么做做,大数据量估计查询起不来
[解决办法]
仔细看:
其实你的“企业销售记录表”(暂称为A表)本身就可以做为一张事实表。
而“销售商品编码表”(暂称为B表)可以做为其中一张维表。
再设计一张时间维表(暂称为C表):
日期 所属年 所属季度 所属月
2009.6.5 2009 2 6
...
A表中,可以将ID、日期及商品编码作为组合PK,其中的日期FK于C表的“日期”字段,商品编码FK于B表的“商品编码”字段。
B表中,商品编码作为PK
C表中,日期作为PK
这是一个典型的二角星型模型,最后关联生成的总事实表的字段就应该包括:
企业ID、所属年、所属季度、所属月、商品大类,商品名称(假设通过商品编码维表翻译)、销售额