Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在基于postgres数据库的数据仓库中实现继承的最佳方法_Postgresql_Database Design_Data Warehouse_Class Table Inheritance_Multi Table Inheritance - Fatal编程技术网

Postgresql 在基于postgres数据库的数据仓库中实现继承的最佳方法

Postgresql 在基于postgres数据库的数据仓库中实现继承的最佳方法,postgresql,database-design,data-warehouse,class-table-inheritance,multi-table-inheritance,Postgresql,Database Design,Data Warehouse,Class Table Inheritance,Multi Table Inheritance,我正在开发一个多步骤的数据管道,它应该优化以下过程: 1)从NoSQL数据库(MongoDB)提取数据。 2)将数据转换并加载到关系(PostgreSQL)数据库中。 3)使用Postgres数据库构建数据仓库 我已经手动编写了一个脚本来处理步骤1)和2),这是一个中间ETL管道。现在,我的目标是使用Postgres数据库构建数据仓库,但我遇到了一些关于DW设计的疑问。以下是关系数据库的维度模型: 共有两个主表,分别是Occurrence和Canonical,从中继承一组其他表(分别以红色和蓝

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

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

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

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

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

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

我提出了一些关于如何在数据仓库中实现继承的建议,并认为最好的做法是将族数据类型(超级表和子表)合并到一个表中。这样做意味着添加额外的属性和大量空值。我的新维度模型如下所示:

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


问题2:对内部数据仓库有什么软件建议吗?(因为它包含敏感数据,所以必须使用内部部署)

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

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

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

IMO在数据仓库中使用的唯一可行方法是每个层次的选项,它将所有实体合并到一个表中

原因不仅仅是保存联接带来的性能提升。在数据仓库中,数据的历史视图通常很重要。想一想,您将如何在某个实体的子类型中建模更改

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

可能与@philipxy重复这是“基于实现继承的关系数据库的数据仓库的最佳设计方法”。稍有不同。