在實體關系語言中,這稱為多對多關系.一個產品可以有多個類別,一個類別可以有多個產品.
要在關系數據庫中執行此操作,您需要三個表.
product: product_id, name, description, etc
category: category_id, catname, catdescription, etc
然后用這個所謂的聯接表建立產品和類別之間的關系.
product_category: product_id, category_id
product_category的主鍵是兩列在一起-這是復合主鍵.
如果您有這些產品
1 chromebook
2 minitower
3 macbook
4 laptop
和這些類別
1 chromeos
2 portable
3 windows 7
4 macos
然后,您將在product_category表中具有這些條目
1 1 chromebook categories: ... chromeos
1 2 ... portable
2 3 minitower category ... windows 7
3 2 macbook categories ... portable
3 4 ... macos
4 2 laptop categories ... portable
4 3 ... windows 7
因此,如果您想查看每種產品的類別,則可以
SELECT name, description,
GROUP_CONCAT(catname) categories
FROM product
JOIN product_category USING (product_id)
JOIN category USING (category_id)
同樣,如果您想要所有筆記本電腦,則可以執行此操作.
SELECT name, description
FROM product
JOIN product_category USING (product_id)
JOIN category USING (category_id)
WHERE catname = 'laptop'
如果要使用所有的macos筆記本電腦設備,則要復雜一些.
SELECT name, description
FROM product p
JOIN product_category pca ON p.product_id = pca.product_id
JOIN category ca ON pca.product_id = ca.product_id
AND ca.catname = 'macos'
JOIN product_category pcb ON p.product_id = pcb.product_id
JOIN category ca ON pcb.product_id = cb.product_id
AND cb.catname = 'laptop'
請注意,組合主鍵可防止您多次將產品分配給類別,反之亦然.
專家提示:為清楚起見,在所有表中為連接的值使用相同的列名是一個好主意.例如,product_id同時顯示在product和product_category表中.