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

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/

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

Как правильно поступить в таких ситуациях?
Заранее спасибо.
 

vonica

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

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


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

можно XML

А вот название параметров можно хранить в отдельной таблице, для того чтобы контролировать, например приоритет параметра, принадлежность параметра к той или иной категории товара.
 

Beavis

Banned
если товары имеют разные параметры можно таблицы разворачивать не по горизонтали а по вертикали, связывая их между собой...
кто-то тут уже постил решение вопроса.
 

kirill538

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