Сложно структурированные данные в MySQL
цена, количество, название, описание, и пр.
Описание состоит из блоков:
Вес:
Цвет:
Размер экрана
Длина кузова
пр.
Реальных примеров таких каталогов полно - в инет-магазинах сотовых телефонов, например. Там на каждый товар есть описание. Причём пункты в описании не обязательно одинаковые.
Меня интересует, как эту инфу о товаре хранить в базе. Т.е. как хранить цену, количество - это понятно - заводятся поля в таблице.
А вот как хранить "структурированное" описание товара?
Если просто полем "text", в котором html-ный код или просто многострочный текст, то это как-то не интересно. Главный недостаток в этом - это административный модуль. Там придётся делать что-то типа:
Введите название товара
Введите цену
Введите описание: //а сюда админ должен будет писать всё в ХТМЛ//
Практика показывает, что если админам давать такую свободу, то они там много чего натворить могут.
Хочется, чтобы в описание товара, администратор добавлял именно "поля" и "значения" полей.
У меня есть некоторые мысли в голове, как это сделать, но хочется узнать другие мнения.
Какие у кого есть по этому вопросу соображения??
эээ, что-то я отвлекся от сути, короче админу в результате можно выдать форму html где ему нужно будет только проставлять свойства галочками есть/нет и вводить конкретные числа, если у данного свойства есть уточнения. А хтмл давать или не давать, это уже вопрос личных предпочтений, иногда бывает удобно подчеркнуть какое-нибудь свойство на лету добавив пару тегов, это уже кому как... хотя если этих админов больше 1 шт, то наверное все же лучше ограничить доступ к введению напрямую html, а если пишешь под себя, то почему бы не оставить такую возможность.
з.ы. прошу прощения за ошибки.
Вот к примеру, есть у нас каталог товаров. У каждого товара есть свойства:
......
Меня интересует, как эту инфу о товаре хранить в базе.
....
А вот как хранить "структурированное" описание товара?
.....
Привет. В принципе, вариантов тут несколько.
1. Хранение свободной структуры свойств.
Условно говоря, у тебя есть примерно такой набор таблиц:
Таблица продуктов
product
id
name
Таблица свойств
properties
id
name
Таблица значений свойств для каждого продукта
values
id
product_id
property_id
value
+ ещё нужно ввести либо типы продуктов и их связь со свойствами либо табличку связей продуктов со свойствами что бы заранее знать что для этого продукта нужно заполнять.
Этот вариант, в принципе, достаточно гибкий и удобный если бы не одно но -- если ты работаешь с MySQL, будет очень сложно осуществлять поиск по свойствам, что часто необходимо.
2. Хранение заранее заданного набора свойств
Ну тут всё тривиально и громоздко, правда если свойств не очень много -- может прокатить.
product
id
name
properties
id
product_id
int_value1
int_value2
....
date_value1
...
Ну и так далее. То есть, заводишь по 2-5 полей для каждого типа данных и для каждого типа продуктов запоминаешь что где лежит.
3. Хранение шаблона
А это развитие твоей идеи с HTML-ом.
Делаешь для каждого типа продуктов html-шаблон в котором сам описываешь свойтва,
цепляешь к админ-части какой-нибудь визуальный редактор типа htmlarea и перед заведением нового продукта, запрашиваешь этот шалон из базы и выводишь его в редактор. А админ просто заполняет пустые поля.
Ну вот такие вот идеи :)
посмотрев мануалу, я составил впечатление, что в MYSQL нет достойных структур данных для объектов. **или я их не нашел - т.е. имхо**
можно попробовать деревья, которые нынче очень удобно представлять методом nested sets.
//см. http://detail.phpclub.net/article/db_tree
http://www.codenet.ru/webmast/php/tree.php
так, листьями в дереве будут значения свойств, например 54мм, уровнем выше - сами свойства - например, толщина, а еще уровнем выше - товары. при желании, можно организовывать товары в подкатегории, подкатегории в категории, и т.д., каждый раз добавляя новый уровень к дереву.
...
можно попробовать деревья, которые нынче очень удобно представлять методом nested sets.
...
Ага, это интересная идея. Я об этом думал, но что то мне показалось, что при более-менее приличном кол-ве товаров может начать здорово тормозить. Во всяком случае, при добавлении нового товара -- точно.
А вообще, идея хорошая, было бы правильно попробовать.