Разработка базы данных для сайта каталога продукции - PullRequest
2 голосов
/ 26 апреля 2011

Я работаю в интернет-магазине, состоящем из товаров и категорий.У меня есть 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

Это работает, но теперь у меня есть задача убедиться, что каждая возможная комбинация находится в этой таблице.Например, при добавлении нового продукта мне нужно будет создать все комбинации.Также, если я хочу добавить больше фильтров в будущем, таблица будет становиться все больше и больше.Есть ли другой подход, который я мог бы использовать, или это единственный способ?

1 Ответ

1 голос
/ 26 апреля 2011

Вы можете использовать записи «по умолчанию» или «запасной вариант», которые будут выбраны, если нет точного соответствия, например:

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...