gpt4 book ai didi

sql - 数据库仓库设计: fact tables and dimension tables

转载 作者:行者123 更新时间:2023-12-01 17:26:16 29 4
gpt4 key购买 nike

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

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

我的要求是能够运行“OLAP”查询,以便我能够:

  • “切片和切 block ”
  • “向上/向下钻取”数据并
  • 一般来说,能够从不同的角度查看数据

阅读完该主题领域后,普遍的共识似乎是最好使用维度表而不是标准化表来实现。

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

“自然”(或明显)尺寸是:

  • 日期维度
  • 地理位置

具有层次属性。但是,我正在努力解决如何对以下字段进行建模:

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

我在这些领域苦苦挣扎的原因是:

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

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

我将给出一些关于我想对数据仓库进行的分析类型的示例 - 希望这能进一步澄清问题。

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

  • 不同人口统计分类中男性和女性的体重比较如何?
  • 本季度哪种人口统计分类(男性和女性)体重增加最多。

等等

任何人都可以澄清性别和人口统计分类是否是事实表的一部分,或者它们是否(正如我怀疑的)维度表。?

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

“显而易见”的模式:

CREATE TABLE sex_type (is_male int);
CREATE TABLE demographic_category (id int, name varchar(4));

可能不是正确的。

最佳答案

不知道为什么您觉得使用 RDBMS 是穷人的解决方案,但希望这会有所帮助。

weight_model_01.png

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

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

关于sql - 数据库仓库设计: fact tables and dimension tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934193/

29 4 0