1 回答
TA贡献1850条经验 获得超11个赞
不要在一行中存储多个值。不要将数字存储为字符串。
产品和组合之间存在多对多关系:每个产品可能出现在多个组合中,每个组合可能包含许多产品。从规范化的角度来看,表示它的正确方法是创建另一个表,称为桥接表,以存储关系。
create table product_combo (
product_id int references product(product_id),
combo_id int references combo(combo_id),
primary key (product_id, combo_id)
);
对于您的示例数据,桥接表将包含:
product_id combo_id
1 1
1 2
1 3
1 4
2 2
2 4
3 1
3 2
4 1
4 4
有了这个设置,假设你想选择一个给定的组合及其所有相关产品,那么你会去:
select c.*, p.*
from combos c
inner join product_combos pc on pc.combo_id = c.combo_id
inner join products p on p.product_id = pc.product_id
where c.combo_id = ?
如果您真的想要,您甚至可以为每个组合重建产品的 csv 列表:
select c.combo_id, c.combo_name, group_concat(p.product_name) product_names
from products p
inner join product_combos pc on pc.product_id = p.product_id
inner jon combos c on c.combo_id = pc.combo_id
group by c.combo_id, c.combo_name
- 1 回答
- 0 关注
- 82 浏览
添加回答
举报