Postgres一对多

时间:2015-04-16 18:31:32

标签: sql postgresql

我的问题

选项B是否合理?

我用Google搜索了大约一百万次,我认为我最大的问题是不知道如何以谷歌理解的方式提问。我需要在Postgres数据库中创建一对多的关系,并希望在实际执行此操作之前提供一些建议。

选项A

过去我用附加的主要做过这种事 - >外国表。根据我的理解,这是在PG中创建一对多的标准方法。

+-------+-------+
|   D   |   A   |
+-------+-------+

+-------+-------+
|   D   |   B   |
+-------+-------+

+-------+-------+
|   D   |   C   |
+-------+-------+

选项B(?)

我的大部分SQL经验都是使用MySQL,我从postgres中看到了一些非常酷的东西,我想知道如果D记录本身保留在外键上是否可以连接表。

table : A
+-------+-------+-------+
|   id  |   a   |   b   |
+-------+-------+-------+
|   100 |   2   |   3   |
+-------+-------+-------+
|   101 |   2   |   3   |
+-------+-------+-------+

table : B
+-------+-------+-------+
|   id  |   a   |   b   |
+-------+-------+-------+
|   45  |   5   |   6   |
+-------+-------+-------+
|   46  |   7   |   10  |
+-------+-------+-------+

table : C
+-------+-------+-------+
|   id  |   a   |   b   |
+-------+-------+-------+
|   12  |   5   |   6   |
+-------+-------+-------+
|   13  |   3   |   9   |
+-------+-------+-------+

table : D
+-------+-------+-------+-------+
|   id  |   A   |   B   |   C   |
+-------+-------+-------+-------+
|   1   |100,101|45,46  |12,13  |
+-------+-------+-------+-------+

EDIT 应该提到的是,这张表将是大规模的。它将在不久的将来每秒生成数百条记录,因此存储空间和读/写速度都非常重要。

1 个答案:

答案 0 :(得分:0)

答案取决于很多事情:

  • 你必须使用数组比较来连接sql,这并不困难。插入或更新记录也很简单。 Official Documentation E.g SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter);

  • 主要问题是应用程序中的postgresql驱动程序可以支持多少,如果在Java中使用ORM(如Hibernate),则可能会遇到困难。

  • 第三个问题是当应用程序尝试更新同一行时的锁定条件,否则该行将是两个单独的行。因此,如果表格不是那么大,那么在大小和速度之间进行交易是没有意义的。