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

如何基于多个MicroProducts(微产品)创建产品价目表?

实现方案

1. 数据库表结构设计

需设计3张表满足多对多的组件关联关系,避免硬编码字段导致后续扩展性差:

  • MicroProducts 微产品基础表,存储所有可独立售卖/作为组件的微产品信息
    字段名类型说明
    micro_id整型主键,唯一标识微产品,对应Micro1/2/3可分别设为1/2/3
    micro_name字符串微产品名称,如Micro1
    price整型单价,建议存储单位为分避免浮点计算误差,示例数据分别为100/200/300(即1/2/3美元)
  • RealProducts 实体产品表,存储最终售卖的实体产品信息
    字段名类型说明
    real_id整型主键,唯一标识实体产品
    real_name字符串实体产品名称,如Product1
    total_price整型组合后的总价,单位同微产品单价
  • RealProduct_Components 组件关联中间表,存储实体产品和微产品的多对多关联关系
    字段名类型说明
    id整型主键
    real_id整型外键,关联RealProducts表的real_id
    micro_id整型外键,关联MicroProducts表的micro_id

2. 组合总价自动计算

可按需选择两种实现方案:

方案1:数据库触发器自动计算

通过触发器监听关联数据变动,自动更新总价,无需业务代码额外处理,示例MySQL触发器代码如下:

-- 新增组件关联时更新对应实体产品总价
CREATE TRIGGER update_total_after_insert
AFTER INSERT ON RealProduct_Components
FOR EACH ROW
BEGIN
  UPDATE RealProducts rp
  SET total_price = (
    SELECT SUM(mp.price)
    FROM RealProduct_Components rpc
    JOIN MicroProducts mp ON rpc.micro_id = mp.micro_id
    WHERE rpc.real_id = NEW.real_id
  )
  WHERE rp.real_id = NEW.real_id;
END;

同理需要补充编写组件关联更新、删除,以及微产品单价修改时的触发器,即可实现全场景下总价自动同步。

方案2:应用层手动计算

如果不希望使用数据库触发器,可在业务代码中监听实体产品组件修改、微产品单价修改的操作,查询关联的所有微产品单价求和后,写入RealProducts表的total_price字段即可,计算逻辑和上述SQL一致。

3. 组装新增实体产品表单实现

表单逻辑如下:

  • 首先从MicroProducts表拉取全量微产品列表,渲染为多选组件供用户勾选要组合的微产品
  • 新增实体产品名称输入框,供用户填写自定义的实体产品名
  • 表单提交按三步执行:
    1. 先向RealProducts表插入一条新的实体产品记录,拿到自动生成的real_id
    2. 将用户勾选的所有微产品micro_id和新生成的real_id批量插入RealProduct_Components中间表
    3. 总价自动同步(触发器自动计算,或应用层计算后回填到total_price字段),完成新增

示例数据验证:
按照你给出的组合规则:
Product1关联micro_id 1、3,总价为1+3=4美元
Product2关联micro_id 1,总价为1美元
Product3关联micro_id 1、2,总价为1+2=3美元
完全符合需求,后续新增任意微产品、任意组合都无需修改表结构,直接操作数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 06:27:02