You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

商品价格提醒列表数据库设计咨询:多产品关联方案

解决方案:用多对多关联表替代单字段存储多产品ID

你当前在list表中用单个字段存储多个product_id的设计违反了数据库设计范式,会带来查询效率低、维护困难、数据一致性差等问题。正确的做法是通过新增一张多对多关联表来维护列表与产品的关系,具体如下:

调整后的表结构

1. user表(保持原有结构,建议统一字段命名规范)

user_id (主键)
username
email
password
created_on
created_by

2. list表(移除product_ids字段,聚焦列表本身属性)

list_id (主键)
user_id (外键,关联user.user_id)
list_name
created_on

3. product表(保持原有结构)

product_id (主键)
product_name
product_price
last_updated
created_on
stock_status
product_url

4. 新增list_product关联表(核心:维护列表与产品的多对多关系)

list_id (外键,关联list.list_id)
product_id (外键,关联product.product_id)
added_on (可选,记录产品加入列表的时间)
-- 联合主键:list_id + product_id,确保同一产品不会重复加入同一列表

关键查询示例

获取指定用户某列表下的所有产品

SELECT p.*
FROM list l
INNER JOIN list_product lp ON l.list_id = lp.list_id
INNER JOIN product p ON lp.product_id = p.product_id
WHERE l.user_id = '目标用户ID' AND l.list_id = '目标列表ID';

查询某产品被加入了哪些用户的列表

SELECT u.username, l.list_name
FROM product p
INNER JOIN list_product lp ON p.product_id = lp.product_id
INNER JOIN list l ON lp.list_id = l.list_id
INNER JOIN user u ON l.user_id = u.user_id
WHERE p.product_id = '目标产品ID';

这种设计的优势

  • 数据一致性:通过外键约束确保关联的list_id和product_id都是真实存在的,避免无效ID
  • 查询高效:无需使用LIKE或字符串分割操作,利用索引快速关联数据
  • 维护便捷:添加/移除列表中的产品只需在list_product表中增删记录,无需修改list表
  • 扩展性强:后续可轻松添加产品加入列表的备注、优先级等属性到关联表中

内容的提问来源于stack exchange,提问作者JDoug98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:50:10