我正在设计我的第一个真正的 Kimball 风格的星型模式维度模型。我已经阅读了他的很多书,并且正在阅读Star Schema - The Complete Reference by Adamson(我发现它比 Kimball 的书更实用、更直接)。我一直无法找到这个问题的答案。请帮忙!引用一篇文章或一本书就可以了。
在维度建模中,对事实与其对应的基线、投影或目标之间的关系进行建模的规范方法是什么?
例如,假设 A 公司在 2016 年的实际销售额为 100 万美元。这显然是事实。
另外假设,2014 年,公司预计 2016 年的销售额为 120 万美元,而 2015 年,公司预计 2016 年的销售额为 110 万美元。
但事实证明,2014 年(较早的)预测是衡量 2016 年销售额的依据。换句话说,我们需要明确指定实际销售额与其相关的预计销售额估计之间的关系。所以“钻取”是行不通的,因为我们不确定哪些预测是正确的比较。
从本质上讲,一个事实似乎需要与另一个事实明确相关,哪个(根据文献)是禁止的?
那么这些实现中哪一个是规范上最好的呢?
创建fact_sales和fact_sales_projection(以相同的方式)。在 fact_sales 中包含 sales_projection_key,本质上将事实与事实联系起来(这可能不是一个好主意)。
创建fact_sales和dim_sales_projection(以相同的粒度),因此调用投影维度,即使它们包含与它们支持的事实相同的数字。再次在 fact_sales 中包含 sales_project_key,但现在可以了,因为从语义上讲,它是一个维度。
只需使用名为SalesType的维度创建fact_sales ,该维度可以是“Actual”或“Projected”。在同一个表中包含实际销售额和预计销售额,并使用从“实际”销售记录到正确“预计”销售记录的自连接键。
只需创建fact_sales,但添加包含预测和实际销售额的附加事实列。这将导致投影数据大量重复,但确保实际数据与“重要”的投影并排保存。
其中,我很确定#3不是最好的解决方案。关于#1、#2 或#4 是否最好,我一直很困惑,尽管(对我而言)#1 似乎比#2 更好。
任何输入表示赞赏。另外,我不完全清楚这类问题是否更适合“堆栈溢出”论坛或“数据库管理员”论坛?