如何处理数据仓库中的图关系?

Posted

技术标签:

【中文标题】如何处理数据仓库中的图关系?【英文标题】:How to handle graph relationship in data warehouse? 【发布时间】:2020-09-03 06:41:12 【问题描述】:

假设我们有许多公司,它们通过“A 是 B 的买方”、“B 是 A 的卖方”、“C 是 B 的子公司”等关系相互关联。

我们可以使用图形数据库来处理这些关系。但是在典型的数据仓库环境(表格格式)中,我们如何才能有效地表示这些关系呢?

目前,我正在考虑使用关系表来存储公司之间的关系,并使用单独的表来存储公司属性。

【问题讨论】:

为什么不使用图形数据库?钉子用锤子,螺丝用螺丝刀。您可能太努力了,无法在圆孔中安装方形钉。 【参考方案1】:

(我假设我们讨论的是通用关系而不是层次结构——这是一种非常具体的关系类型)

在数据仓库中,公司数据将保存在维度表中,并且(除了一些特殊情况)您不会直接将维度相互关联:它们通过事实表相互关联。

如果一个事实与同一个维度有多个关系,那么事实中只有多个 FK 指向该维度(角色扮演维度)。因此,对于交易事实,您可能有一个买方 FK、一个卖方 FK 等,所有这些都引用了 Company 维度中的记录。

如果您的关系具有任何真正的复杂程度,那么正如前面的评论所述,如果您需要报告这些关系,最好使用图形数据库。

如果您的关系类型数量有限,并且每种关系类型都有固定的基数,那么您可以在无事实事实表中对其进行建模,即仅包含公司维度的 FK 的事实表。为了让它以任何有用的方式工作,作为起点,您可能需要能够定义一个核心角色,然后显示与该角色的关系。例如,您可以从每个事实记录的子公司开始,然后向该子公司显示相关的父、买方等

【讨论】:

以上是关于如何处理数据仓库中的图关系?的主要内容,如果未能解决你的问题,请参考以下文章

大数据学习(三十一)数据仓库如何处理缓慢变化维

如何处理数据仓库中用户可以更改的代码表属性

如何处理数据仓库中重复id包含略有不同值的维度表?

Jenkins一次任务构建中如何处理多个git仓库

大数据面试题--数仓

大数据面试题--数仓