我正在学习OLAP和数据仓库,但对于关系建模和维度建模之间的区别感到困惑。维度建模基本上是关系建模吗,只是允许冗余/非规范化的数据吗?
例如,假设我有历史销售数据(产品、城市、销售数量)。以下是关系视角:
产品 | 城市 | 销售数量 苹果,旧金山,400 苹果,波士顿,700 苹果,西雅图,600 橙子,旧金山,550 橙子,波士顿,500 橙子,西雅图,600
而以下则是更多维度的视角:
产品 | 旧金山 | 波士顿 | 西雅图 苹果,400, 700, 600 橙子,550, 500, 600
但无论哪种视角都会在相同的星型模式下实现:
事实表:产品ID、地区ID、销售数量 产品维度:产品ID、产品名称 城市维度:城市ID、城市名称
只有在向每个维度添加一些附加详细信息时,差异才开始显现。例如,如果您还想跟踪地区,关系数据库通常会有一个单独的地区表来保持所有内容规范化:
城市维度:城市ID、城市名称、地区ID 地区维度:地区ID、地区名称、区域经理、# 区域店铺
而维度数据库将允许非规范化以将地区数据保存在城市维度中,以便更容易地分割数据:
城市维度:城市ID、城市名称、地区名称、区域经理、# 区域店铺
这样说对吗?