Как организовать структуру базы данных для характеристик товаров магазина?

Необходимо в БД хранить характеристики товаров.
Вот 2 таблицы eeac8a4df90f4ed4adabe9f52d660f63.png

Т.е. есть 2 таблицы.
Первая таблица "характеристика", вторая возможные значения.
Основная проблема в том, что характеристики бывают нескольких типов. Для этого добавили в таблицу характеристик поле "type" (тип может быть 'checkbox','radiobutton','multiselect','text').
К примеру, если характеристика имеет тип checkbox (например "GPS" имеет значение либо true, либо false), то приходится в таблице значений хранить true и false для этой характеристики. Таких характеристик очень много и для каждой мы храним true и false в таблице значений. Как можно этого избежать, либо это нормально?
  • Вопрос задан
  • 7393 просмотра
Пригласить эксперта
Ответы на вопрос 3
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Доброго. Что ж тут думать, это ж не шахматы. Вот у вас есть условно 1000 свойств товара. У некого товара из них заполнено всего 3. Остальные хранить пустыми, разумеется, не нужно.

Что нужно - а очень даже просто, следите за рукою:

Берем id товара, условно 1189. Берем три id свойств товара, 11, 22, 33. Заводим таблицу с полями:

Id_ProductProperty int
Id_Product int
Id_Property int

И вот сюда аккуратно кладем:

1 1189 11
2 1189 22
3 1189 33

Всё. Есть у вас свойство - оно в этой таблице, а значит, True. Нет свойства - нет его в этой таблице.
Таблица полностью интовая, еще индексы ставите, как положено, на join поля - и все летает.
Ответ написан
sim3x
@sim3x
https://dev.mysql.com/doc/refman/5.0/en/enum.html
field_type ENUM('checkbox','radiobutton','multiselect','text')

// у енума в 4.х были вопросы с производительностью

или
field_type int(1)
в классе модели указать соотвествие

1=> 'checkbox', 2 => 'radiobutton',

Не забывай о возможности денормализировать и положить каждую категорию в свою таблицу со своими полями
Ответ написан
Комментировать
@kir_vesp
Web Developer
Юзай типы данных, Люк. Есть ведь множество типов данных у мускуля. По факту нужна одна таблица, в которой перечислены значения характеристик товара. Максимум, можно создать доп. таблицы, описывающие набор хар-к каждой категории товаров, если варианты значений там сильно различаются.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы