[英]Database design for product catalog site
我正在一家由產品和類別組成的電子商務商店中。 我有3種主要的產品過濾方式:按類別,按制造商和按性別。
我有下表
products
- id
- name
- manufacturer_id
- gender_id
categories
- id
- name
- parent_id
products2categories
- id
- product_id
- category_id
manufacturers
- id
- name
gender
- id
- name
使用這些表,我可以列出產品,例如,找到所有名稱為manufacturer_id = 1, gender = 1, category= 453
。
但是我想控制這些過濾器組合的每一個的設置圖像,頁面標題,元標記,顯示順序等。 所以我添加了另一個表:
pages
- id
- category_id
- manufacturer_id
- gender_id
- image
- page_title
- meta_description
- display_order
這可行,但是我現在的任務是確保此表中的每個可能的組合都存在。 例如,當添加新產品時,我將需要創建所有組合。 另外,如果將來我想添加更多的過濾器,表格將會越來越大。 我可以使用另一種方法嗎?還是這是唯一的方法?
您可以使用“默認”或“后備”記錄,如果不存在完全匹配項,則會選擇該記錄,例如:
SELECT p.*, g.*
FROM products p
JOIN product2categories pс
ON pc.product_id = p.id
LEFT JOIN
pages gcgm
ON gcgm.category_id = pc.category_id
AND gcgm.gender_id = p.gender_id
AND gcgm.manufacturer_id = p.manufacturer_id
LEFT JOIN
pages gcg
ON gcg.category_id = pc.category_id
AND gcg.gender_id = p.gender_id
AND gcg.manufacturer_id IS NULL
AND gcgm.id IS NULL
LEFT JOIN
pages gc
ON gc.category_id = pc.category_id
AND gc.gender_id IS NULL
AND gc.manufacturer_id IS NULL
AND gcg.id IS NULL
JOIN pages g
ON g.id = COLAESCE(gcgm.id, gcg.id, gc.id)
WHERE pc.category_id = 453
AND p.manufacturer_id = 1
AND p.gender = 1
這將首先嘗試選擇(gender, manufacturer, collection)
的完整組合,如果失敗,將首先退回到(collection, gender)
然后退回到(collection)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.