在postgres中存储和访问相关对象

时间:2017-04-05 14:41:51

标签: postgresql

我有一个产品表和一个单独的表,我想存储相关产品,其中包含两个字段:create table related_products(id1 int, id2 int)和放置在每个字段上的索引。这意味着我必须在id1和id2中搜索产品ID,然后拔出另一个似乎非常混乱的id字段。 (当然,一种产品可能有很多相关产品)。

是否有更好的表结构用于存储我可以在postgresql中使用的相关产品?

1 个答案:

答案 0 :(得分:1)

从数据库的角度来看,这并不是很混乱,只要它应该是这样,只要只有一对产品可以相关。

如果您想确保只能输入一次关系,您可以使用唯一索引:

CREATE UNIQUE INDEX ON related_products(LEAST(id1, id2), GREATEST(id1, id2));

要搜索与产品42相关的产品,您可以这样查询:

SELECT products.*
FROM products
JOIN (SELECT id2 AS id
         FROM related_products
         WHERE id1 = 42
      UNION ALL
      SELECT id1
         FROM related_products
         WHERE id2 = 42
     ) rel
   USING (id);