数据库仓库设计:事实表和维度表

mor*_*ous 11 sql olap database-design data-warehouse

我正在使用RDBMS构建一个穷人的数据仓库.我已经确定了要记录的关键"属性":

  • 性别(真/假)
  • 人口统计分类(A,B,C等)
  • 出生地
  • 出生日期
  • 体重(每日记录):正在记录的事实

我的要求是能够运行'OLAP'查询,允许我:

  • '切片和骰子'
  • '向上/向下钻取'数据和
  • 通常,能够从不同的角度查看数据

在阅读了这个主题领域之后,普遍的共识似乎是最好使用维度表而不是规范化表来实现.

假设这个断言是正确的(即最好使用事实和维度表来实现解决方案),我想在这些表的设计中寻求一些帮助.

'自然'(或明显)维度是:

  • 日期维度
  • 地理位置

哪个具有分层属性.但是,我正在努力如何建模以下字段:

  • 性别(真/假)
  • 人口统计分类(A,B,C等)

我正在努力解决这些领域的原因是:

  1. 它们没有明显的层次属性,这将有助于聚合(AFAIA) - 这表明它们应该在事实表中
  2. 它们大多是静态的或很少变化 - 这表明它们应该在维度表中.

也许我上面使用的启发式太粗糙了?

我将举例说明我希望在数据仓库中进行的分析类型 - 希望这将进一步澄清事情.

我想按性别和人口统计分类汇总和分析数据 - 例如回答以下问题:

  • 在不同的人口统计分类中,男性和女性的权重如何比较?
  • 其中人口统计分类(男性和女性),本季度体重增加最多.

等等

任何人都可以澄清性别和人口统计分类是否属于事实表,或者它们是否(我怀疑)是维度表.

还假设它们是维度表,有人可以详细说明表结构(即字段)吗?

'明显'架构:

CREATE TABLE sex_type (is_male int);
CREATE TABLE demographic_category (id int, name varchar(4));
Run Code Online (Sandbox Code Playgroud)

可能不是正确的.

Dam*_*vic 9

不确定为什么你觉得使用RDBMS是穷人的解决方案,但希望这可能会有所帮助.

weight_model_01.png

表dimGeography和dimDemographic是所谓的迷你维度; 它们允许基于人口统计和地理位置进行切片,而无需加入dimUser,还可以在测量时捕获用户当前的人口统计和地理位置.

顺便说一句,在DW世界中,详细 - Gender = 'female', AgeGroup = '30-35', EducationLevel = 'university', etc.