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 關注
- 115 瀏覽
添加回答
舉報