没有FK时如何找到维度表和事实表之间的关系?

Posted

技术标签:

【中文标题】没有FK时如何找到维度表和事实表之间的关系?【英文标题】:How can I find the relationship between dimension and fact tables when there is no FK? 【发布时间】:2021-05-05 09:08:46 【问题描述】:

我需要创建一个总线矩阵,为此我需要知道哪个事实表与哪个维度表有关系。 不幸的是,在我参与的这个新项目中,它似乎没有 FK(我知道,疯了)。 我想到的是使用 ETL 查询并检查 Fact 表与维度表之间的连接。 我担心的是 ETL 查询中可能不包含更多的关系......有什么建议吗?

【问题讨论】:

如果列名是标准化的,即在维度和事实中使用相同的名称,您可以在 SQL Server 中使用 INFORMATION_SCHEMA.COLUMNS 视图并尝试手动找出关系。 @CleanBold 不幸的是我正在使用 DB2 并且没有那个.. DB2 中的 SYSCAT.COLUMNS 查看公司,可能有包含此信息的逻辑数据模型,或者如果强制执行命名约定,有时可以对此类详细信息进行逆向工程。 @CleanBold 谢谢你的回答。我怎么能手动找出关系?对不起,如果这是一个愚蠢的问题,我在数据建模方面没有太多经验:) 【参考方案1】:

您可以使用系统元数据表来列出外键引用:

select tbname, pkcolnames, reftbname, fkcolnames, colcount
from SYSIBM.SYSRELS B;

如果数据库没有正确声明外键关系,则数据库没有您要查找的信息。

【讨论】:

【参考方案2】:

假设数据库不包含有关 FK 的信息(或有助于您派生它们的信息,例如相同的列名),那么正如您所提到的,检查用于加载每个事实表的 ETL 代码可能是唯一的另一种方法这样做。 ETL 必须在每个维度上运行查找以将 PK 插入到事实记录中,因此信息将在那里。

不应该有任何关系涉及您无法通过这种方法确定的事实。维度之间可能存在其他关系(桥表、更复杂的 SCD 类型等),但如果您整理出事实关系,那么剩下的应该是一个足够小的子集,可以手动解决(即通过智能猜测)

【讨论】:

以上是关于没有FK时如何找到维度表和事实表之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章

数据库——事实表和维度表

什么是ODS?还有什么是事实表和维度表啊?希望高手指教~

交叉引用表...维度还是事实?

数据立方建立-如何实现一对多,多对多

OLAP:为啥事实表和维度表之间的所有外键都应该是代理键?

在Cognos中事实表的概念和维表的概念是啥