EvilDev
10.11.2013 - 16:11
Всем привет!
Все ломаю голову, но не пойму как такую вещь сделать. Вот допустим у нас есть товары, у которых есть аттрибуты (например цветА футболки, размеры и пр). Казалось бы все отлично и можно поделить аттрибуты на категории, относящиеся к какому либо товару. Но! Как посчитать количество оставшихся футболок красного цвета, размера M на складе? Было бы все просто, если количество категорий аттрибутов (цвет, размер и пр) были бы заранее известны, но мы не знаем что взбредет в голову модератору.
Мне кажется, что mongodb для этих целей подошла бы, но у меня и так используются 2 бд: Redis, Postgres и появление 3-ей - это перебор думаю.
_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
что мешает сжойнить два раза товары с атрибутами, первый раз с условием по цвету, второй по размеру. но так появляется проблема с количеством джоинов.
а еще
dr.nomore может вам рассказать как ваш вариант с атрибутами отдельной таблицей извращает принципы реляционных отношений
EvilDev
10.11.2013 - 17:17
Цитата (Aeq @ 10.11.2013 - 13:09) |
а еще dr.nomore может вам рассказать как ваш вариант с атрибутами отдельной таблицей извращает принципы реляционных отношений |
Это почему?
_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
inpost
10.11.2013 - 17:32
EvilDevНесколько запросов и результат в какую-нибудь кеш-таблицу, к примеру сейчас в наличии Х таких футболок. При изменении в админке или при заказе товара - меняешь кеш-таблицу. В итоге трудный запрос к 5-и таблицам будет лишь 1 раз.
- Товары
- Категории выборок
- Выборки
- Связь между товарами и категорией
- Связь между категорией и выборками
В итоге получится просто тяжелый скрипт в плане разработки.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Цитата (EvilDev @ 10.11.2013 - 17:17) |
Цитата (Aeq @ 10.11.2013 - 13:09) | а еще dr.nomore может вам рассказать как ваш вариант с атрибутами отдельной таблицей извращает принципы реляционных отношений |
Это почему?
|
то что вы предлагаете это EAV (Entity-attribute-value)
обсуждают это много. например вот что первое попалось в гугле
http://www.sql.ru/forum/833365-1/eav-eto-v...odeli-naiznankuПрименяется например в Magento, о чем сами разрабы жалели, пруфлинка не дам, т.к. не помню уже где читал.
вообще если глянуть в классику, то то что простые смертные называют таблицами - называется "отношение", то что мы с вами называем строками - принято называть "кортеж", а ячейки/колонки - атрибуты. Так вот извращение в том и заключается, что вы атрибуты хотите вынести оттуда где они должны быть в отдельную таблицу )
EvilDev
10.11.2013 - 18:53
Теперь понятно, спасибо. Все же заморочная реализация. Меня сейчас озарило двумя идеями
1. Почему бы не воспользоваться временными таблицами в sql?
2. Вспомнил, что в postgres есть тип json, благодаря которому можно создать любую структуру.
Я ни разу не пользовался такими вариантами. Что думаете по поводу этого? Могут ли возникнуть какие то проблемы?
_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
1. вариант с временными таблицами, это как раз то о чем написал выше inpost
2. если хранить json, то сразу озадачтесь хранением версии формата этого json-а. рано или поздно вы захотите изменить формат, и надо быть к этому готовым.
EvilDev
11.11.2013 - 06:32
Пардон, не внимательно прочитал. Позже отпишусь, как все сделал.
_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
sergeiss
11.11.2013 - 08:07
Цитата (EvilDev @ 10.11.2013 - 16:11) |
но у меня и так используются 2 бд: Redis, Postgres |
Постгрес - намного мощнее, чем Мускуль. У него есть достаточно простые (но мощные) средства, которые и не снились апологетам мускуля
Так что с твоей задачей он справится вполне. Надо только подумать немного будет...
Сформулируй задачу чуть подробнее. И структуру таблиц покажи, какие есть сейчас. Придумаем, как сделать. И не такое приходилось делать.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
EvilDev
11.11.2013 - 16:09
На данный момент есть только это.
1. Есть товары.
2. У каждого из них может быть по нескольку валют.
3. У каждого из которых может быть куча спецификаций (например материал из которого была сделана футболка, для мужчины или женщины и пр.)
4. Есть категории аттрибутов (например цвет: красный, желтый, оранжевый)
5. Товар может отображаться не только в одной категории, но в нескольких сразу
PS Подскажите хороший софт для проектирования бд под линукс. Ед нормальный - это mysql workbench, остальные что видел не понравились.
_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
EvilDev
11.11.2013 - 16:58
Цитата (MiksIr @ 11.11.2013 - 12:48) |
many_products_has_many_attributes - это таблица связка. В атрибутах будут свалены все значения справочника, и желтый, и мужской, и хлопок. Для ввода значений добавляем еще поле в many_products_has_many_attributes в этой же схеме. У EAV есть один недостаток серьезный - это выборки по И условию, решается джойном само на себя столько раз, сколько И условий у нас. |
Спасибо, учту)
_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.