我有一个产品表和一个单独的表,我想存储相关产品,其中包含两个字段:create table related_products(id1 int, id2 int)
和放置在每个字段上的索引。这意味着我必须在id1和id2中搜索产品ID,然后拔出另一个似乎非常混乱的id字段。 (当然,一种产品可能有很多相关产品)。
是否有更好的表结构用于存储我可以在postgresql中使用的相关产品?
答案 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);