以下是我个人对于维度建模的理解。
列:
有一个xx门店,在上午十点,a员工向b客户卖出了一条 项链,金额为500元。
这个过程就是什么人在什么时间什么地点做了什么事情。
首先确定业务主题,关于销售的业务主题的,我们就可以找到相关的表,去实现事实表。
粒度:最细粒度是每一个产品的销售记录,一个店员可能会销售出多个产品,或者一个客户会买多个产品,这个客户会产生一条消费记录,这一条消费记录里有多个产品的消费记录,.保证最细粒度,和在同一事实下粒度相同,我们可以确定一件产品的消费为最细粒度。
确定维度,时间维度上午十点,地点维度xx门店,员工维度a员工,客户维度b客户,商品维度项链。
确定事实,产品的销售记录,如项链的金额500,是一个事实,描述产品的事实,一般事实都是一些具体的数值,可以适当冗余方便业务需求。
事实表就是描述事实的表,就像上面的列子,描述了项链销售的金额,是一个事实;事实表上有一些key键与维度表关联。
维度就是观察角度,如时间的角度,地点的角度,商品的角度,列子中商品角度是项链。在维度表上也有键作为与事实表关联的依据。
在真实的业务场景中,业务关系错综复杂,好多表之间都是有关系的,我们在建模中,想着把尽可能多事实容纳而脱离建模的理论,所以建模中要先确定业务主题,业务需求,从业出发进行选择,选择与业务相关的表进行建模。然后确定粒度选择最细粒度,如果粒度过粗,但业务需求会涉及到最细粒度我们就没办法回到最细粒度了,如果我们选择最细粒度,而业务需要粗粒度我们是可以通过细的粒度到达粗的粒度。之后我们在选择维度,就是从什么角度去观察分析业务,时间,地点,等。最后是事实,选择业务主题的事实,事实表不一定我们现有实体表的某一张表,也许是多张表根据业务需求,业务主题经过字段筛选合并拆分最终形成的一张表,作为一个事实表。
以上是我对维度建模的一个理解,也许不是很准确欢迎大家评论指教。