HStore 与具有继承的多个表 - 我对 HStore 有很好的用例吗?

Rad*_*adu 5 postgresql database-design hstore

我在这里的更广泛的问题与何时适合使用 HStore、多个表和一个表来存储类似文档的对象有关。

现在,对于我的本地化示例:我正在设计一个用于保存实验结果的数据库结构。我的第一个想法是为每个实验设置单独的表格。这看起来像:

多桌

然而,这将需要大量JOIN跨表的s,因为最终用户想要跨多个实验查找数据是相当普遍的。(旁注:也许是继承的一个很好的用例?)。我想我可以通过像这样的整体实验表来避免这种情况:

单片桌

这肯定会消除对JOINs的需要,但我觉得以某种方式将各个实验分开是合乎逻辑的。此外,要求完整进行一项实验也是很常见的。这就是为什么我正在考虑使用HStore这样的:

商店

这对我很有吸引力,因为每个单独的结果集都非常类似于文档,但我担心我会遇到多表方法带来的相同问题。

其他可能相关的考虑和想法:

  • 我已经考虑过使用额外的表来存储与单个实验中的单个数据点相关的元数据/注释。其中一些非常适合 HStore 实验表。
  • 不同的用户将输入实验数据,我会为此使用模式
  • 会有不同的实验类型——我认为处理这个问题的最好方法是将它们存储在完全不同的数据库中

我还应该提到,我对 PostgreSQL 的经验非常有限,但我已经对它提供的超越 MySQL 的功能感到高兴!

Cra*_*ger 1

\n

这肯定会消除对 JOIN 的需要,但我觉得以某种方式将各个实验分开是合乎逻辑的。此外,要求进行一次完整实验的情况也很常见

\n
\n\n

这两个都是使用表分区的很好的论据。PostgreSQL 通过继承和约束排除来实现这一点。

\n\n
\n

我\xe2\x80\x99考虑过使用额外的表来存储与各个实验中的各个数据点相关的元数据/注释。其中一些非常适合 HStore 实验表

\n
\n\n

没有什么可以阻止您拥有一个hstore用于注释的字段,或者一个单独的hstore字段连接表。

\n\n
\n

不同的用户将输入实验数据,我将为此使用模式

\n
\n\n

为什么?当然,同样的论点也适用,您也想进行跨用户聚合吗?

\n\n

我只是通过实验进行分区,并将用户 ID 作为表键的一部分。

\n\n
\n

会有不同的实验类型 \xe2\x80\x93 我认为处理这个问题的最佳方法是将它们存储在完全不同的数据库中

\n
\n\n

为什么?

\n\n

您是否认为您可能需要查询它们或聚合它们?如果是这样,请勿将它们存储在不同的数据库中。

\n\n

如果它们存储类似类型的数据,只需将它们放在主表中,并有一些可选列。

\n\n

如果它们存储主要不同类型的数据(主要或完全不同的列),则在同一数据库中使用不同的表。

\n