Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / EAV БД / 9 сообщений из 9, страница 1 из 1
11.10.2013, 14:43
    #38424507
EAV БД
Проектирую EAV БД интернет-магазина:

// Товаров
products (
product_id [PK],
product_group_id [FK],
...)

// Группы товаров
products_groups (
product_group_id [PK],
...)

// Атрибуты групп товаров
groups_attributes (
group_attribute_id [PK],
product_group_id [FK],
...)

// EAV
attributes_values (
string_atribute_value_id [FK],
product_id [FK],
string_value_id [FK])

// Целочистенные значения атрибутов
integer_values (
id [PK],
value)

// Дробные значения атрибутов
float_value (
id [PK],
value)

// Строковы значения атрибутов
string_values (
id [PK],
value)

Нормальная ли такая схема?

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
11.10.2013, 15:14
    #38424562
EAV БД
я в плане того, хорошо ли хранить не само значение атрибута, а value_id, т.е., например,

не:

integer_attributes_values (
string_atribute_value_id [FK],
product_id [FK],
value)


а:

attributes_values (
string_atribute_value_id [FK],
product_id [FK],
value_id [FK])
integer_values (
id [PK],
value)

Как будет лучше для поиска?
...
Рейтинг: 0 / 0
11.10.2013, 15:48
    #38424621
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV БД
Error-Code-0xDEADBEEFКак будет лучше для поиска?
Для хорошего поиска EAV лучше не использовать

Error-Code-0xDEADBEEFхорошо ли хранить не само значение атрибута, а value_id
Честно говоря особого смысла не вижу. Не забудьте, что вам придется обеспечивать уникальность value_id для совокупности всех таблиц с атрибутами. К тому же схема усложнится лишний раз, и запросы станут более громоздкими.

Храните все атрибуты как строки переменной длины :-). Поиск по строками идет хорошо, + индексов потребуется меньше, да и потери на хранение строк по сравнению с другими типами не такие уж и большие, если не сказать, что их не будет.
...
Рейтинг: 0 / 0
11.10.2013, 15:51
    #38424625
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV БД
Error-Code-0xDEADBEEFПроектирую EAV БД интернет-магазина:

product_group_id - это тоже атрибут
все атрибуты можно хранить как строковые
типы атрибутов - строка, число, дата, ссылка на справочник, список
группы товаров - иерархический справочник
справочников м.б. много разных
...
Рейтинг: 0 / 0
11.10.2013, 16:14
    #38424654
EAV БД
_мод,

а если атрибут списковый с выбором нескольких значений, как лучше хранить его items и выбранные значения?
...
Рейтинг: 0 / 0
11.10.2013, 16:28
    #38424670
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV БД
Error-Code-0xDEADBEEF_мод,

а если атрибут списковый с выбором нескольких значений, как лучше хранить его items и выбранные значения?
Так это и есть справочник. Значение атрибута - ид этого справочника
...
Рейтинг: 0 / 0
11.10.2013, 17:06
    #38424747
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV БД
Arm79Храните все атрибуты как строки переменной длины :-). Поиск по строками идет хорошо, + индексов потребуется меньше, да и потери на хранение строк по сравнению с другими типами не такие уж и большие, если не сказать, что их не будет.
Поиск на полное совпадение по строкам идет хорошо. Мало того что поиск "все элементы, у которых цена больше 100" вгонит такую систему в аут, так даже с поиском "все элементы, у которых цена равна 100" возникнут проблемы, если в базе будет '100.00'.
Для любителей EAV и единой таблицы значений в SQL Server есть тип sql_variant.
...
Рейтинг: 0 / 0
11.10.2013, 17:11
    #38424763
EAV БД
У меня SQLite.
...
Рейтинг: 0 / 0
14.10.2013, 10:12
    #38426131
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV БД
Кот МатроскинМало того что поиск "все элементы, у которых цена больше 100" вгонит такую систему в аут, так даже с поиском "все элементы, у которых цена равна 100" возникнут проблемы, если в базе будет '100.00'.

1. Индекс по значению
2. Значения преобразуются к единому виду, а только потом сравниваются.
Т.е. 100 -> 100.00 и сравнение
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / EAV БД / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]