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

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

【问题讨论】:

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

标签: sql db2


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多