Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте, подскажите, как правильно реализовать паттерн Сущность-атрибут-значение (EAV) с указанием типа атрибута.
Структуру базы данных я прикрепляю картинкой к сообщению.
В таблице attributes_types хранятся типы атрибутов. В зависимости от типа, значение атрибута ищется в соответствующей таблице (attributes_int, attributes_decimal, attributes_text).
С такой структурой, чтобы выбрать все атрибуты товара, мне нужно выбрать сначала все описания атрибутов для конкретного товара:
Отредактированно Student20 (18.08.2010 12:22:40)
Неактивен
Любая общая схема, которая умеет всё, что угодно, работает медленнее
частной схемы, на одной и той же задачке. Разумное хранение произволь-
ных данных вполне реалистично в рамках того, что у Вас описано. Если
смущает количество запросов — можете объединять через UNION (но тогда
какой тип данных Вы предпочтете на выходе?). А если всегда будете объ-
единять, то какой смысл хранить в других форматах?
Обычно я рекомендую (если требуются быстрые выборки) делать несколько
табличек с разными типами товаров, и туда добавлять атрибуты, характер-
ные для этого типа товаров. Это вполне разумная денормализация, которая
позволяет значительно упростить логику самого приложения.
Кстати, количество запросов само по себе — это не страшная вещь, если
каждый запрос короткий и простой.
Неактивен
paulus, Спасибо за ответ !
paulus написал:
Если смущает количество запросов — можете объединять через UNION (но тогда
какой тип данных Вы предпочтете на выходе?). А если всегда будете объединять, то какой смысл хранить в других форматах?
В описании товара обычно достаточно просто вывести все атрибуты товара. В этом случае было бы удобно объединить данные и на выходе получить соответственно всё в строковом типе.
Но в фильтрах, при поиске, нет необходимости делать объединение всех атрибутов, а нужно осуществить поиск по определенному полю, например проверить попадает ли размер диагонали телевизора в определенный диапазон.
paulus написал:
Обычно я рекомендую (если требуются быстрые выборки) делать несколько
табличек с разными типами товаров, и туда добавлять атрибуты, характерные для этого типа товаров. Это вполне разумная денормализация, которая
позволяет значительно упростить логику самого приложения.
Спасибо Хороший вариант, может быть так и сделаю. Быстро и просто. Но, конечно большой минус, если типов товаров много, чтобы добавить новый тип, нужно добавлять новую таблицу и не так просто удалить\добавить новый атрибут, придется делать ALTER TABLE.
Видимо универсального решения нет, нужно выбирать, что больше подходит
Неактивен
Страниц: 1