Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Реализация универсального интернет-магазина

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Bubuz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В ходе разработки интернет-магазина возникла проблема с тем, что многие товары имеют разный набор параметров, которые в тех или иных ситуациях играют важную роль.
Например товары одной модели, но разных цветов имеют разные цены, для других товаров цвет, скажем, роли не играет, но важно что то другое.
 
Если создавать структуру базы данных то с расширением ассортимента сталкиваешься с тем, что нужно вносить изменения в код под каждую новую категорию.
 
Есть вариант описание товаров держать в одной таблице, в которую по мере добавление категорий и рысширения списка параметров будут вноситься дополнительные поля, права на которые(в зависимости от категории) будут определяться в другой таблице
 
Но в этом случае база будет избыточной - при добавлении одного товара нескольких цветов мы будем иметь несколько идентичных записей в базе отличающихся только колонкой "цвет" и "цена"(наверное это не столь важно)
 
Вобщем вопрос в том, как создать универсальную структуру которую легко было бы наполнять разнотипными товарами
 
Если кто сталкивался с подобной проблемой просьба поделиться опытом

Всего записей: 115 | Зарегистр. 02-08-2003 | Отправлено: 22:03 31-01-2006
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://forum.ru-board.com/topic.cgi?forum=31&topic=9228#1

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 22:22 31-01-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Все просто. Делается вторая таблица с структурой:
TOVAR_ID | PROPERTY_NAME | VALUE

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 15:44 01-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Все просто. Делается вторая таблица с структурой:  
TOVAR_ID | PROPERTY_NAME | VALUE

Структура удобная... для всего... кроме поиска

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 17:11 01-02-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Для какого например?
 
Надо найти товар у которого цвет = красный?
 
SELECT * FROM TABLE_TOVAR WHERE ID IN (SELECT ID FROM TABLE_PROPS WHERE PROPERTY_NAME="color" AND VALUE="красный")

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 17:19 01-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Для какого например?  
Надо найти товар у которого цвет = красный?  

Покажите как будете искать "цвет - красный" + "тип - автомобиль" + "марка - НЕ ока"?

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 17:32 01-02-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SELECT * FROM TABLE_TOVAR WHERE ID IN (SELECT ID FROM TABLE_PROPS WHERE PROPERTY_NAME="color" AND VALUE="красный") AND ID IN (SELECT ID FROM TABLE_PROPS WHERE PROPERTY_NAME="type" AND VALUE="автомобиль") AND... etc
 


----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 18:31 01-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD
Вы считаете это удобным и быстрым способом поиска?  
И для 10 параметров? И для большой БД?

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 19:02 01-02-2006
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
edogs
Предложите свои варианты

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 19:07 01-02-2006
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Предложите свои варианты

можно ещё так сделать:
 
select * from tovari  
left join properties as p1 on p1.tovar=tovari.id  and p1.type='color'
left join properties as p2 on p2.tovar=tovari.id  and p2.type='size'  
.. сколько нужно ..
where p1.value='красный' and p2.value='большой'
 
С индексацией по идее должно быстро проходить.
 


----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 19:14 01-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Church
Собственно его автор топика сам описал. Данные товара должны храниться в самой таблице, или точнее их ID, а raw описание свойств уже хранить в отдельной таблице. И поиск получается быстрый. И избыточности особой нету (ID много места не занимают).
P.S.: Это не значит что этот метод лучше, просто у него есть и + и - по сравнению с tovar_id value name
 

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 19:53 01-02-2006 | Исправлено: edogs, 20:08 01-02-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
edogs
Это ограничивает набор свойств у одного товара, да и удобство поиска в этом случае сомнительные.  
Напиши структуры и запросы для своего варианта?

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 20:53 01-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Это ограничивает набор свойств у одного товара,  

Ограничивает конечно, но весьма косвенно. 50 полей решают.

Цитата:
да и удобство поиска в этом случае сомнительные.  

select * from table where idcolor=red, idprod=avto, idtype!=oka  
Сомнительное удобство по сравнению с составным запросом с 3 подзапросами?
А если вспомнить не только про поиск но и про сортировку? Как тогда?

Цитата:
Напиши структуры и запросы для своего варианта?

ну выше грубо написано
или это "тупой" вариант - значения раскидать по полям
или более "умный" где в самой таблице с товаром указаны только ID типа
tovar
idtovar idcolor idprod (все int)
 
proper
id value
 1 red
 2 oka
 

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 21:55 01-02-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
edogs
Не подходит... ибо появится товар у которого новое свойство, например там прозрачность/непрозрачность и ты будешь альтерить таблицу и дописывать код.

Цитата:
 более "умный" где в самой таблице с товаром указаны только ID типа

ничего умного в общем то... умнее было бы хранить парами:
типа param1type|param1value|param2type|param2value
Но тогда с выборками будет вообще жопа
 
Короче если аффтору темы нужен "ограничено универсальный" магазин... но имхо вложенные селекты прекрасно работают - все на индексах там.

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 22:47 01-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Не подходит... ибо появится товар у которого новое свойство, например там прозрачность/непрозрачность и ты будешь альтерить таблицу и дописывать код

А зарезервировать поля заранее не судьба?

Цитата:
ничего умного в общем то... умнее было бы хранить парами:  
типа param1type|param1value|param2type|param2value  
Но тогда с выборками будет вообще жопа  

то есть "по умному" это если "организовывать структуру удобно", а с "выборками, поиском, сортировкой" пусть будет жопа
На самом деле всё конечно зависит от ситуации. "Универсальный" магазин это утопия, это на форум к советстким фантастам скорее

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 02:20 02-02-2006
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
edogs
резервировать поля глупо а две таблицы предложенные UncoNNecteD это самое то...
а при правильном построении индексов работать будет даже быстрее чем одна таблица + освобождаемся от избыточности
З.Ы. UncoNNecteD респект
 


----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 13:05 02-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mamay

Цитата:
резервировать поля глупо  

Обосновать можете?
 

Цитата:
а при правильном построении индексов работать будет даже быстрее чем одна таблица + освобождаемся от избыточности  

При поиске и сортировке быстрее работать не будет. Мы уже писали причину выше.
 
По поводу избыточности в варианте с "запасными" полями... кхм... а Вы избыточности в варианте UncoNNecteD не видите? Если таки увидите, посчитайте где она будет больше в пересчете на реально занимаемое место, а не на теоретически лишние поля.
 
Мы реально использовали в нескольких скриптах и ту и другую структуру. Так что вышесказанное это фактически перечень граблей на которые наступали.
 
А вообще в магазинах используется нечто среднее. "Дополнительные" поля действительно хранятся доп. таблице, залинкованной на основную. Но поля по которым идёт сортировка или поиск - они в основной. Разумные подход кстати.

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 16:27 02-02-2006 | Исправлено: edogs, 16:31 02-02-2006
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
edogs

Цитата:
При поиске и сортировке быстрее работать не будет. Мы уже писали причину выше.

Тестировал?
 

Цитата:
А вообще в магазинах используется нечто среднее.

Безусловно.
 
Mamay
!

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 23:37 02-02-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Тестировал?  

Да.  
Как мы уже говорили

Цитата:
Мы реально использовали в нескольких скриптах и ту и другую структуру. Так что вышесказанное это фактически перечень граблей на которые наступали.  

Первый раз кстати мы наткнулись на эти грабли при попытке выстроить фильтрованную статистику в своём модуле опросов под нюку.

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 03:54 03-02-2006
N Sensey N



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так к слову... иногда есть свойства которые одинаковы у всех.. например цвет....
 
создаем массив с.... в базу кидаем id в виде ключа к массиву....
 
конечно все туда не закидаешь... но иногда помогает....
 
например у меня в скрипте продажи автомобилей так и делается.... вместо хранения марок автомобилей в базе и соединения таблиц... я беру лишь $auto[$id_fom_table]
 
все летает....

----------
sPaiz-Nuke - Free PHP CMS Web Design and Development Портал для израильтян

Всего записей: 1409 | Зарегистр. 01-10-2002 | Отправлено: 08:59 03-02-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Реализация универсального интернет-магазина


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru