我正在尝试从一个似乎包含桥接表的E/R图(OLTP系统)中构建一个星型架构。Order是一个显而易见的事实表,而product是一个维度表。如果模型需要是星型模式,我不知道如何才能保留桥接表。如果我需要在模型中保留有关Channel的信息,您将如何处理此关系?

发布于 2019-02-02 14:01:12
这取决于您计划如何使用模型。
如果您只需要回答有关现有订单的产品和渠道问题,那么您可以完全避免使用桥接表,因为渠道和产品之间的M2M关系可以通过事实表(“orders”)来解决:

这种设计的(巨大)优势在于它的简单性和易用性--它对最终用户来说非常直观。它也很快。
该模型的缺点是它对订单的依赖性。如果没有订单(即,事实表中没有订单),那么您将无法回答有关产品和渠道关系的问题(例如,“按分配的渠道显示所有产品”)。如果这样的问题不重要,您只需要分析现有订单,请保持简单。
如果你确实需要分析产品-渠道关系,即使没有现有的订单,那么事情就更复杂了。一种方法是添加桥接表,如下所示:

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

在这里,您可以轻松地查询没有订单的Channel-Product关系(通过不真实的事实表Product- channel,它基本上显示了关系状态),还可以轻松地按产品和渠道查询订单。您还可以“钻取”这样的结构,以回答有关没有现有订单的产品的各种复杂问题。尽管如此,这样的设计并不像第一个那样直观。
https://stackoverflow.com/questions/54392376
复制相似问题