如何基于多个MicroProducts(微产品)创建产品价目表?
实现方案
1. 数据库表结构设计
需设计3张表满足多对多的组件关联关系,避免硬编码字段导致后续扩展性差:
MicroProducts微产品基础表,存储所有可独立售卖/作为组件的微产品信息字段名 类型 说明 micro_id整型 主键,唯一标识微产品,对应Micro1/2/3可分别设为1/2/3 micro_name字符串 微产品名称,如 Micro1price整型 单价,建议存储单位为分避免浮点计算误差,示例数据分别为100/200/300(即1/2/3美元) RealProducts实体产品表,存储最终售卖的实体产品信息字段名 类型 说明 real_id整型 主键,唯一标识实体产品 real_name字符串 实体产品名称,如 Product1total_price整型 组合后的总价,单位同微产品单价 RealProduct_Components组件关联中间表,存储实体产品和微产品的多对多关联关系字段名 类型 说明 id整型 主键 real_id整型 外键,关联 RealProducts表的real_idmicro_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表拉取全量微产品列表,渲染为多选组件供用户勾选要组合的微产品 - 新增实体产品名称输入框,供用户填写自定义的实体产品名
- 表单提交按三步执行:
- 先向
RealProducts表插入一条新的实体产品记录,拿到自动生成的real_id - 将用户勾选的所有微产品
micro_id和新生成的real_id批量插入RealProduct_Components中间表 - 总价自动同步(触发器自动计算,或应用层计算后回填到
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
相关产品推荐
相关产品推荐

