-- 附加费关联表:维护 prc_surcharge 与 bms_product(产品表) / bms_product_country(明细表) 的关系 -- 语义: -- product_id 产品主键(外键关联 bms_product.product_id,与 product_code 一一对应) -- product_code 产品对接代码(便于与明细表 bms_product_country 及前端交互) -- detail_id 为空 = 产品级附加费(作用于该产品全部明细) -- 有值 = 明细级附加费(作用于该产品某个 国家×重量段 明细) -- 一个附加费可关联多个产品/明细;一个产品/明细可挂多个附加费(多对多) -- 执行后即可在「产品列表」按产品/明细维护附加费关联 SET NAMES utf8mb4; CREATE TABLE IF NOT EXISTS prc_surcharge_rel ( rel_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '关联ID', sc_id BIGINT(20) NOT NULL COMMENT '附加费配置ID prc_surcharge.sc_id', product_id BIGINT(20) NOT NULL COMMENT '产品ID bms_product.product_id', product_code VARCHAR(20) NOT NULL COMMENT '产品对接代码 bms_product.product_code', detail_id BIGINT(20) DEFAULT NULL COMMENT '产品明细ID bms_product_country.detail_id(空=作用于产品全部明细)', created_by VARCHAR(64) DEFAULT '' COMMENT '创建人', created_at DATETIME DEFAULT NULL COMMENT '创建时间', updated_by VARCHAR(64) DEFAULT '' COMMENT '更新人', updated_at DATETIME DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (rel_id), UNIQUE KEY uk_rel_scope (sc_id, product_id, detail_id), INDEX idx_rel_sc (sc_id), INDEX idx_rel_product (product_id), INDEX idx_rel_product_code (product_code), INDEX idx_rel_detail (detail_id), CONSTRAINT fk_rel_sc FOREIGN KEY (sc_id) REFERENCES prc_surcharge (sc_id) ON DELETE CASCADE, CONSTRAINT fk_rel_product FOREIGN KEY (product_id) REFERENCES bms_product (product_id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='附加费与产品/明细关联表'; -- 若已按旧版(无 product_id)建表且已有数据,升级步骤: -- ALTER TABLE prc_surcharge_rel ADD COLUMN product_id BIGINT(20) DEFAULT NULL COMMENT '产品ID' AFTER sc_id; -- UPDATE prc_surcharge_rel r JOIN bms_product p ON p.product_code = r.product_code SET r.product_id = p.product_id; -- ALTER TABLE prc_surcharge_rel MODIFY COLUMN product_id BIGINT(20) NOT NULL COMMENT '产品ID bms_product.product_id'; -- ALTER TABLE prc_surcharge_rel ADD INDEX idx_rel_product (product_id); -- ALTER TABLE prc_surcharge_rel ADD CONSTRAINT fk_rel_product FOREIGN KEY (product_id) REFERENCES bms_product (product_id) ON DELETE CASCADE; -- 若上一版方案(prc_surcharge 加 product_code 字段)已执行,可手动回退(MySQL 5.7 不支持 DROP COLUMN IF EXISTS): -- ALTER TABLE prc_surcharge DROP COLUMN product_code;