【问题标题】:Best approach to implement inheritance in a data warehouse based on a postgres database在基于 postgres 数据库的数据仓库中实现继承的最佳方法
【发布时间】:2019-07-01 15:29:53
【问题描述】:

我正在开发一个应该优化以下过程的多步骤数据管道:

1) 从 NoSQL 数据库 (MongoDB) 中提取数据。

2) 转换数据并将其加载到关系 (PostgreSQL) 数据库中。

3) 使用Postgres 数据库构建数据仓库

我手动编写了一个脚本来处理步骤 1) 和 2),这是一个中间 ETL 管道。现在我的目标是使用 Postgres 数据库构建数据仓库,但我对 DW 设计有一些疑问。下面是关系型数据库的维度模型:

有 2 个主表,OccurrenceCanonical,从中继承了一组其他表(分别以红色和蓝色绘制)。请注意,有 2 个子数据类型,ObserverNodeOccurrenceCanonicalObserverNode,它们与另一个表具有额外的多对多关系。

我就如何在数据仓库中实现继承提出了一些research 并认为最佳实践是将家庭数据类型(父表和子表)合并到一个表中 .这样做意味着添加额外的属性和很多 null 值。我的新维度模型如下所示:

问题 1:您认为这是解决此问题的最佳方法吗?如果不是,那会是什么?

问题 2:有针对本地数据仓库的软件推荐吗? (内部部署是必须的,因为它包含敏感数据)

【问题讨论】:

标签: postgresql database-design data-warehouse class-table-inheritance multi-table-inheritance


【解决方案1】:

通常有更少的表要连接和非规范化数据会提高数据仓库查询的查询性能,因此它们通常被认为是一件好事。

这将建议您的第二个表设计。 NULL 值不会占用 PostgreSQL 表中的任何空间,因此您不必担心。

【讨论】:

    【解决方案2】:

    here 所述,在关系数据库中实现继承有三个选项。

    IMO 在数据仓库中唯一可行的方法是Table-Per-Hierarchy选项,它将所有实体合并到一个表中。

    原因不仅仅是通过保存连接来提高性能。在数据仓库中,数据的历史视图通常很重要。想一想,您将如何模拟某个实体中子类型的变化?

    重要的是定义一个鉴别器列,它唯一地定义了源实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多