雪花数据仓库模式中的多个公用表?

Multiple common tables in a snowflake data warehouse schema?

我正在尝试制作数据仓库的雪花模式,但事实证明有多种类型的数据适合该中心。 例如:[factSales] 有 [order]、[employee]、[customer]、[shipping] 等... 那么上面提到的所有也有[地址]。 [地址] table 的确切位置在哪里? 我想避免数据重复,所以将属性放在其他 table 中不是一个选项。

应将客户的地址捕获为客户维度上的字段,例如"Street name"、"Post code"、"City" 和 "Country"。同样,"shipping address"(通常)是客户的一个特征,所以它也应该是客户维度中的一组字段。

"order address" 取决于它的功能含义:它可以是下订单的商店或其他销售渠道(例如网站)的地址,在这种情况下,地址将是Store/Channel 维度。

因此,如果我理解正确的话,您的模型结构类似于:

  • 事实:销售订单
  • 维度:客户、员工,最终 Store/Channel

维度将包含用于存储适当地址的字段,例如客户维度可以有三组文本字段来存储每个地址:一组用于家庭地址、工作地址和送货地址。

这也可以通过单独的地址维度来建模,该维度包含数据中存在的所有可能地址,并被所有其他维度引用。在这种情况下,例如,Customer 维度可以有三个指向 Address 维度的外键(引用),而不是像以前那样的实际地址:一个用于家庭地址、工作地址和送货地址。但前一种方法可能更简单。

在星型模式中拥有重复数据没有问题,大多数具有层次结构的维度在设计上都会有 duplicated/redundant 数据,因为模型是有意非规范化的:https://en.wikipedia.org/wiki/Denormalization