维度模型-1or多个维度

本文探讨了在构建数据库时,是选择一个维度表还是多个维度表的问题,重点关注了时间维度、人维度的稳定性以及易变因素。结论指出,对于易变的多对多关系,应使用两个维度表;而对于稳定的关系,可以合成一个维度。作者强调要在维度数量和变化频率间找到平衡,避免极端情况导致的问题。
摘要由CSDN通过智能技术生成

1.问题

两个维度,该建一个维度表还是两个维度表?

2. 举例

上午, 出生在龙虎山的碧莲在碧游村花30块钱点了一份宫保鸡丁

中午,出生在龙虎山的碧莲回公司花80块钱点了一份佛跳墙。

时间维度:

人维度: 碧莲, 龙虎山是碧莲的出生的,是人维度的一个属性。 基本稳定,不会变化。

点餐地点:  都是地点,一个是出生地,一个是点餐地点,就因为是否变化, 一个是维度属性,一个是单独的维度。

商品:

事实: 钱

把点餐地点作为人的维度属性是否可以?

上午, (出生在龙虎山的在碧游村点餐的碧莲)花30块钱点了一份宫保鸡丁

中午,(出生在龙虎山的在公司点餐的碧莲)花80块钱点了一份佛跳墙。

也不是不行,就是人维度这么一会就变了一次,没准晚上还得变。

维度表变化会非常快,接近事实表。关联性能不好,非常不建议。

3.反例

假如, 人的出生地也会变化,只是不那么频繁,一辈子变个1-2次这种。出生地需要单独建立维度吗?

可以, 优点非常明显。缺点也很明显。

优点:人维度就没有任何可变的属性了(忘记可以改名字了)

缺点:按这个标准执行, 事实表会关联特别多的维度。建议适当容忍维度变化,做缓慢变化维度。

什么是易变, 多少维度叫多, 看自己的心理预期了。

4. 结论

两个维度,如果是易变的多对多的关系,最好还是建成俩维度, 靠事实表来描述这俩之间的关系。 事实表本来就是维度之间的多对多关系,而且有时间。

如果是比较稳定的关系,可以合成一个维度,做缓慢变化维度。

在维度数量和维度变化频度之间平衡一下,不追求极致。

追求维度完全不变, 会导致维度表个数非常多。

追求维度表少,会导致维度表变化特频繁。

5. 扩展

虽然事实表表达了维度表之间的多对多关系, 但是因为事实表本身稀疏性的特点,并不能描述完整的多对多关系。

比如  下单事实表关联  用户和居住地址维度。

用户不一定在每个居住地都下单了, 而且也不是每天都下单, 通过下单事实不能完整的表示用户和居住地址的关系。

要表达这个关系, 需要单独做一个无事实的事实表,用户什么时间开始,到什么时间结束 在哪居住。

这个例子不好, 感觉快成了一个缓慢变化维度表了, 意会吧, 假设这个用户每三天搬一次家。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值