分裂事实 table 因为缺少一个外键?

Split fact table because of one missing foreign key?

假设我们有两条不同的消息: 汽车数据日志 汽车状态日志

CarDataLog 包含与汽车和相应的 Person 有直接关系的数据,并包含有关汽车的数据。

CarStatusLog 包含有关上述同一辆车的数据,其中包含日志中的客户。但是这次数据是一个状态。对于像这样的字段:"CleaningState":"NotCleaned" 或 "Cleaned"。

两条日志消息都包含 Car_ID。我们是否会使用 Car 和 Person 的外键创建一个 Fact table 并冒着 person_id 有时为 null 的风险,因为它没有给出......或者更好的方法是创建两个 fact table 有分散 'grain' 的风险?

用例是:获取特定汽车的数据,包括它的状态和人的名字。

我是数据仓库的新手,希望有人能帮助我解决这个问题?

数据仓库的标准做法是为维度 table 创建一个虚拟行,用于匹配 "UNKNOWN" 数据。这可以防止 table.

中外键中的 NULLS

根据您的用例,您可能有多种类型的 "UNKNOWN" 数据。例如,您可以对 "UNKNOWN" 使用关键字 -1,对 "NOT APPLICABLE" 维度数据使用关键字 -2。

另请参阅:https://www.kimballgroup.com/2010/10/design-tip-128-selecting-default-values-for-nulls/

你需要暗淡为 Car_dim、Person_dim、Status_dim(作为值 CleaningState、NotCleaned" 或 "Cleaned), and Date_dim. Person_dim can have a row of "Unknown" 人名,当你得到一个空人名时.

Dim 和 Fact table 具有 parent/child 关系,这意味着您必须先在 Dim 中加载数据(Dim 是父级),然后再加载到 Fact(子级)table.

根据您获得的数据,从您的事实 table 中的 Dims 上方加载 dim ID。确保 2 个日志中有日期字段,以便您可以在 Car_id 上加入两个日志,并且当两个日志中的日期与 Car_id 匹配时。 如果您遇到 CarDataLog 中存在 Car_id 而 CarStatusLog 中不存在的情况,那么您需要在 Status_dim 中创建一行 "Unknown Status" 以便您可以在 Fact [=] 中使用它26=]。祝你好运!