选项B是否合理?
我用Google搜索了大约一百万次,我认为我最大的问题是不知道如何以谷歌理解的方式提问。我需要在Postgres数据库中创建一对多的关系,并希望在实际执行此操作之前提供一些建议。
过去我用附加的主要做过这种事 - >外国表。根据我的理解,这是在PG中创建一对多的标准方法。
+-------+-------+
| D | A |
+-------+-------+
+-------+-------+
| D | B |
+-------+-------+
+-------+-------+
| D | C |
+-------+-------+
我的大部分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 应该提到的是,这张表将是大规模的。它将在不久的将来每秒生成数百条记录,因此存储空间和读/写速度都非常重要。
答案 0 :(得分:0)
答案取决于很多事情:
你必须使用数组比较来连接sql,这并不困难。插入或更新记录也很简单。
Official Documentation
E.g SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter);
主要问题是应用程序中的postgresql驱动程序可以支持多少,如果在Java中使用ORM(如Hibernate),则可能会遇到困难。
第三个问题是当应用程序尝试更新同一行时的锁定条件,否则该行将是两个单独的行。因此,如果表格不是那么大,那么在大小和速度之间进行交易是没有意义的。