我为我的项目构建数据库。目前,我有一张带图像的桌子和一张带产品的桌子。
product
Column | Type |
----------------+-----------+
id | integer |
images | integer[] |
display_image | integer |
...
image
Column | Type |
----------------+-----------+
id | integer |
data | text |
因此,基本思想是在product.images字段中存储属于一个产品的所有图像的ID。数据库的用例是查找特定图像的相应产品。另外,一个图像可以属于多个产品。
现在我不确定如果我查询哪些产品属于图像并且数据库将容纳数百万种产品和图像,这是否是获得结果的最快方式。有一个额外的field image.products,我存储与一个图像相关的所有产品会更快吗?
获取特定图像产品的查询目前看起来像这样(我使用PostgreSQL作为数据库):
SELECT * from product where image.id = ANY(product.images)
需要维护另一个字段将是API方面的负担。在我为此进行重构之前,如果上面提到的查询稍后会对性能产生影响,我希望听到经验丰富的意见。
提前感谢您的回复。
答案 0 :(得分:0)
对于像这样的一对多关系(每个产品只有一个图像,但每个图像可以有多个产品),最好只使用numeric(10, 2)
上的外键。
您只需要一个多对多的关联表,如果产品可能有多个图像,并且图像可能与多个产品相关联。如果是这种情况,请使用名为image_id
的表格,其中包含两列product_images_assoc
和product_id
。
使用此关联表可以轻松获取任何一个image_id
的所有image_id
,反之亦然。
希望这有帮助!