Фильтрация по атрибутам записи.

 
0
 
SQL
ava
EasyTask | 24.03.2013, 09:30
Добрый день! Помогите составить оптимальный алгоритм для следующей ситуации.

Таблицы:
products - Хранит только идентификаторы продуктов
products_property - Хранит пары Идентификатор свойства/Значение свойства с сылкой на продукт
products_property_type - Хранит иденификаторы свойств

Задача:
Составить запрос, который бы делал выборку по нескольким свойствам.

Пример:
Выбрать все продукты, у которых свойство цена > 10 и категория "Стройматериалы"
Выбрать все продукты, у которых есть свойство изображение, свойство "В наличии" равно 1, свойство название равно "Краска"

Свойств очень много, поэтому вариант джойнить таблицу саму на себя не является оптимальным. Пожалуйста, подскажете решение.
Заранее спасибо.
Comments (8)
ava
EasyTask | 24.03.2013, 11:44 #
Все свойства продукта, в том числе категория, хранятся в products_property

Пример одного продукта:

products
id = 25
cdate = 25.03.2013

products_property
product = 25
property = 12
value = 'Стройматериалы'
-
product = 25
property = 13
value = '1500'
-
product = 25
property = 14
value = 'Белый'
ava
Zloxa | 24.03.2013, 12:42 #
Цитата (EasyTask @  24.3.2013,  09:30 findReferencedText)
не является оптимальным

Это издержки той структуры, которую вы выбрали. Цена гибкости. smile 
Данная структура не предназначена для такого рода запросов. Нормального решения нет, только компромиссные.
ava
EasyTask | 24.03.2013, 12:48 #
Можете привести примеры таких решений? smile
ava
Zloxa | 24.03.2013, 13:00 #
Зачем? Вы и так знаете правильный ответ.
Цитата (EasyTask @  24.3.2013,  09:30 findReferencedText)
джойнить таблицу саму на себя

ava
EasyTask | 24.03.2013, 13:08 #
Я бы назвал такое решение не компромисным, а радикальным )
ava
Zloxa | 24.03.2013, 14:47 #
EasyTask, после того, как вы договоритесь с собой/заказчиком принять это решение  не смотря на его радикальность, оно станет компроммисным  smile 
ava
EasyTask | 24.03.2013, 15:45 #
Почему вы считаете это решение таким уж радикальным? smile Мне оно вполне нравится.
ava
Zloxa | 24.03.2013, 16:39 #
Потому, что это лучше джойна это может быть лишь в частных случаях, когда селективность предикатов слишком велика, чтобы использовать индекс. В случаях, когда индексный доступ по предикатам может быть эффективен, вариант с группировкой против варианта с джойном будет иметь лишнюю сортировку, необходимую для группировки.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
ava  Zloxa   EasyTask
advanced
Submit