[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проектирование ИМ
Страницы: 1, 2
EvilDev
Всем привет!
Все ломаю голову, но не пойму как такую вещь сделать. Вот допустим у нас есть товары, у которых есть аттрибуты (например цветА футболки, размеры и пр). Казалось бы все отлично и можно поделить аттрибуты на категории, относящиеся к какому либо товару. Но! Как посчитать количество оставшихся футболок красного цвета, размера M на складе? Было бы все просто, если количество категорий аттрибутов (цвет, размер и пр) были бы заранее известны, но мы не знаем что взбредет в голову модератору.
Мне кажется, что mongodb для этих целей подошла бы, но у меня и так используются 2 бд: Redis, Postgres и появление 3-ей - это перебор думаю.

_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
Aeq
что мешает сжойнить два раза товары с атрибутами, первый раз с условием по цвету, второй по размеру. но так появляется проблема с количеством джоинов.
Aeq
а еще dr.nomore может вам рассказать как ваш вариант с атрибутами отдельной таблицей извращает принципы реляционных отношений biggrin.gif
EvilDev
Цитата (Aeq @ 10.11.2013 - 13:09)
а еще dr.nomore может вам рассказать как ваш вариант с атрибутами отдельной таблицей извращает принципы реляционных отношений biggrin.gif

Это почему?

_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
inpost
EvilDev
Несколько запросов и результат в какую-нибудь кеш-таблицу, к примеру сейчас в наличии Х таких футболок. При изменении в админке или при заказе товара - меняешь кеш-таблицу. В итоге трудный запрос к 5-и таблицам будет лишь 1 раз.
- Товары
- Категории выборок
- Выборки
- Связь между товарами и категорией
- Связь между категорией и выборками

В итоге получится просто тяжелый скрипт в плане разработки.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Aeq
Цитата (EvilDev @ 10.11.2013 - 17:17)
Цитата (Aeq @ 10.11.2013 - 13:09)
а еще dr.nomore может вам рассказать как ваш вариант с атрибутами отдельной таблицей извращает принципы реляционных отношений  biggrin.gif

Это почему?

то что вы предлагаете это EAV (Entity-attribute-value)
обсуждают это много. например вот что первое попалось в гугле http://www.sql.ru/forum/833365-1/eav-eto-v...odeli-naiznanku
Применяется например в Magento, о чем сами разрабы жалели, пруфлинка не дам, т.к. не помню уже где читал.

вообще если глянуть в классику, то то что простые смертные называют таблицами - называется "отношение", то что мы с вами называем строками - принято называть "кортеж", а ячейки/колонки - атрибуты. Так вот извращение в том и заключается, что вы атрибуты хотите вынести оттуда где они должны быть в отдельную таблицу )
EvilDev
Теперь понятно, спасибо. Все же заморочная реализация. Меня сейчас озарило двумя идеями
1. Почему бы не воспользоваться временными таблицами в sql?
2. Вспомнил, что в postgres есть тип json, благодаря которому можно создать любую структуру.

Я ни разу не пользовался такими вариантами. Что думаете по поводу этого? Могут ли возникнуть какие то проблемы?

_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
Aeq
1. вариант с временными таблицами, это как раз то о чем написал выше inpost

2. если хранить json, то сразу озадачтесь хранением версии формата этого json-а. рано или поздно вы захотите изменить формат, и надо быть к этому готовым.
EvilDev
Пардон, не внимательно прочитал. Позже отпишусь, как все сделал.

_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
sergeiss
Цитата (EvilDev @ 10.11.2013 - 16:11)
но у меня и так используются 2 бд: Redis, Postgres

Постгрес - намного мощнее, чем Мускуль. У него есть достаточно простые (но мощные) средства, которые и не снились апологетам мускуля wink.gif Так что с твоей задачей он справится вполне. Надо только подумать немного будет...

Сформулируй задачу чуть подробнее. И структуру таблиц покажи, какие есть сейчас. Придумаем, как сделать. И не такое приходилось делать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
EvilDev
user posted image
На данный момент есть только это.
1. Есть товары.
2. У каждого из них может быть по нескольку валют.
3. У каждого из которых может быть куча спецификаций (например материал из которого была сделана футболка, для мужчины или женщины и пр.)
4. Есть категории аттрибутов (например цвет: красный, желтый, оранжевый)
5. Товар может отображаться не только в одной категории, но в нескольких сразу

PS Подскажите хороший софт для проектирования бд под линукс. Ед нормальный - это mysql workbench, остальные что видел не понравились.

_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
EvilDev
Цитата (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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.