Как правильно организовать БД для хранения карточки товара

  • Автор темы Автор темы dirol
  • Дата начала Дата начала

dirol

Новичок
Как правильно организовать БД для хранения карточки товара

Приветствую.
Подскажите, пожалуйста, как правильно организовать хранение данных о товаре в БД.

Допустим, у нас 100 товаров и каждый товар имеет следующие значения:
1. название
2. вес
3. цвет
Тут всё понятно, делаем три поля и в принципе ОК.
Но тут появляется 101 товар, который имеет новое свойство, например, громкость.

Как тогда быть? Ради одного товара создавать доп.столбец в таблице, но тогда 100 предыдущих товаров будут с пустыми столбцами.

Реальный пример привожу ниже.


Описание микроволновки №1:
http://tehnosila.ru/catalog/item/data/171/172/117255/1060541/

Описание микроволновки №2:
http://tehnosila.ru/catalog/item/data/171/172/117255/1090853/

По большому счету, карточки товаров практически абсолютно разные, в смысле параметров.

Как правильно поступить в таких ситуациях?
Заранее спасибо.
 
Я в таких случаях, делаю для всех дополнительных данных, одно поле и туда вношу к примеру(упрощенно): ключ=значение;ключ=значение; ... ;ключ=значение

некое подобие csv :)


можно сериализацию использовать (вообще просто)

можно XML

А вот название параметров можно хранить в отдельной таблице, для того чтобы контролировать, например приоритет параметра, принадлежность параметра к той или иной категории товара.
 
если товары имеют разные параметры можно таблицы разворачивать не по горизонтали а по вертикали, связывая их между собой...
кто-то тут уже постил решение вопроса.
 
Все способы, которые хранят так или иначе сериализованные характеристики (XML, etc) хороши ровно до тех пор, пока не надо делать поиск по характеристикам (выбор, сравнение и т.д.)
Так что, если в ТЗ прописаны операции с этими характеристиками, варианта видимо два: отдельная таблица item_id >> char_type >> char_value, в которой хранить характеристики, или использовать Postgres, в котором таблицы можно наследовать. Кстати в Postgres можно и XML хранить, так как по нему можно искать средствами xpath ...
 
Сверху