簡體   English   中英

產品目錄站點的數據庫設計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM