Как настроить родительские и дочерние таблицы (по свойствам категории) в MySQL? - PullRequest
0 голосов
/ 05 февраля 2010

У меня есть сайт объявлений. Пользователи могут размещать объявления, и у каждой категории есть дополнительные опции.

Пример: пользователь выбирает «автомобиль» и должен указать такие параметры, как цвет, пробег, расход топлива, коробка передач и т. Д.

Вот мои таблицы для этого:

Category table:
cat_id (PK)
cat_name // "Cars" for example

Category Options table:
option_id (PK)
cat_id (FK)
option_name // "Color" for example

Option Values table:
value_id (PK)
option_id (FK)
value // "red" for example

У меня вопрос в последней таблице (значения параметров), не должно ли быть и что-то еще, потому что как мне увеличить эту таблицу или отнести эту таблицу к секретной?

Например, давайте посмотрим на две записи в этих таблицах. Во-первых, таблица категорий:

  Cat_id         Cat_name
     1            cars
     2            trucks

Тогда есть таблица параметров категории:

 option_id        Cat_id(FK)       option_name
     1              1                color
     2              1                mileage

Тогда таблица значений параметров, вот проблема, я не знаю, как:

  Value_id       option_id(FK)    value
     1               1            red
     2               2          11000 miles

Тогда что произойдет, если я решу вставить другое объявление с другим автомобилем? Разве в последней таблице не должно быть другой ссылки?

У меня также есть другие таблицы, такие как "классифицированные", которые содержат заголовок, текст, цену и т. Д.

1 Ответ

1 голос
/ 05 февраля 2010

Вы уже дали ответ сами.

Не должно быть другой ссылки в последней таблице?

У меня также есть другие таблицы, такие как «классифицировано», которое содержит заголовок, текст, цена и т.д ...

Введите идентификатор таблицы classified в качестве еще одного ключа в параметрах таблицы, чтобы вы получили

Option Values table:
value_id (PK)
option_id (FK)
classified_id (FK)
value // "red" for example

Тогда вы можете получить все значения для всех опций для указанного объявления:

SELECT c.option_name, o.value
FROM option_Values o
LEFT JOIN category_options c ON (o.option_id=c.option_id)
WHERE o.classified_id = 15; -- as an example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...