如何在星型模式中处理 Bridge table

How to handle Bridge table in Star Schema

我正在尝试从似乎包含桥 table 的 E/R 图(OLTP 系统)构建星型模式。顺序是一个显而易见的事实-table,产品是一个维度-table。如果模型需要是星型模式,我看不出如何保留桥梁 table。如果我需要在模型中保留有关 Channel 的信息,您将如何处理这种关系?

这取决于您打算如何使用该模型。

如果你只需要回答关于现有订单的产品和渠道问题,那么你可以完全避免桥梁table,因为渠道和产品之间的M2M关系可以通过事实table来解决("Orders"):

这种设计的(巨大)优势在于它的简单性和易用性 - 它对最终用户来说非常直观。它也很快。

该模型的缺点是它对订单的依赖。如果没有订单(即事实上没有订单 table),那么您将无法回答有关产品和渠道关系的问题(例如 "show me all products by their assigned channels")。如果此类问题不重要,您只需分析现有订单,请保持简单。

如果在没有现有订单的情况下确实需要分析产品与渠道的关系,那就更复杂了。一种方法是添加桥 table 如下:

这种设计的优点是无论订单如何,渠道-产品关系始终可用。按产品分析订单也(仍然)很简单。缺点是现在很难按渠道分析订单,因为你现在必须通过桥梁table。例如,在 Power BI 等最终用户工具中,您需要使 "red" 连接成为双向连接,以启用从通道维度通过桥接到产品维度的过滤器传播。当然,这是可行的,但最终用户现在必须知道他们在做什么——这不再简单了。

另一种设计使用 "factless" 事实 table:

在这里,您可以轻松查询没有订单的Channel-Product关系(通过事实tableProduct-Channel,本质上显示关系状态),也可以轻松查询产品和渠道的订单。您也可以"drill-across"这样的结构来回答关于没有现有订单的产品的各种复杂问题。尽管如此,这样的设计还是不如第一个设计直观。