powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / EAV модель
25 сообщений из 39, страница 1 из 2
EAV модель
    #39607024
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый вечер,

по задаче необходимо реализовать более 10 таблиц с разным количеством и типами полей. Я подумал и сделал в виде EAV следующим образом:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-------------------------------------------------------
create table entity(id          number(10)
                    ,parent_id  number(10)
                    ,name       varchar2(255));
--
insert into entity(id,parent_id,name) values (1,null,'Завод');
insert into entity(id,parent_id,name) values (2,null,'Марка машины из завода');
insert into entity(id,parent_id,name) values (3,1   ,'Заводы России');
insert into entity(id,parent_id,name) values (4,2   ,'Характеристики машины ВАЗ 2101');
-------------------------------------------------------
create table entity_attr(id         number(10)
                         ,entity_id number(10)
                         ,att_type  char(1)
                         ,name      varchar2(255));
--
insert into entity_attr(id,entity_id,att_type,name) values (1,4,'V','Количество лошадей');
insert into entity_attr(id,entity_id,att_type,name) values (2,4,'V','Цвет машины');
insert into entity_attr(id,entity_id,att_type,name) values (3,4,'V','Количество дверей у машины');
-------------------------------------------------------
create table entity_attr_value(id          number(10)
                               ,attr_id    number(10)
                               ,str_value  varchar2(1000));
--
insert into entity_attr_value(id,attr_id,str_value) values(1,1,'333');
insert into entity_attr_value(id,attr_id,str_value) values(2,2,'Красный');
insert into entity_attr_value(id,attr_id,str_value) values(3,3,'5');



1. Кто нибудь сталкивался с такими задачами? Не хочется плодить 10 новых таблиц, тем более что поля таблиц и их количество могут изменяться. Какие подводные камни есть в EAV?
2. Как можно такую таблицу проиндексировать?
3. Лучше хранить все в стрингах или в entity_attr_value стоит добавить вместо str_value три поля например str_value,number_value и date_value?

если можно поделить плз ссылками.
Спасибо.
...
Рейтинг: 0 / 0
EAV модель
    #39607028
адма и еав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cobalt_frog,

Если жизнь без eav не мила, бери nosql.
...
Рейтинг: 0 / 0
EAV модель
    #39607029
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
адма и еавcobalt_frog,

Если жизнь без eav не мила, бери nosql.

Да не то чтобы не мила...просто после того как я сделал ее по этой схеме возникает мысль, а стоило ли?) Все таки плоские таблицы мне кажутся более предпочтительным варианто, и пес с ним что придется создать новых 10 таблиц. Хотелось бы узнать мнение участников форума по этому поводу.
...
Рейтинг: 0 / 0
EAV модель
    #39607033
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogХотелось бы узнать мнениеEAV в поиск не вбивается?
...
Рейтинг: 0 / 0
EAV модель
    #39607034
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+ хотелось бы узнать, кто из форумчан использовал данный подход при решении задач, с какими трудностями сталкивался и как их решал)
...
Рейтинг: 0 / 0
EAV модель
    #39607045
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogпосле того как я сделал ее по этой схеме возникает мысль, а стоило ли?

Использование EAV требует чуть-чуть другого стиля мышления по сравнению с
квадратно-гнездовым. Так что если ты чувствуешь дискомфорт, значит EAV действительно не
стоило делать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EAV модель
    #39607053
Goldenlady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cobalt_frog,
EAV целесообразно использовать в крайнем случае, например, когда для описания товара используется переменный набор атрибутов (товар 1: майка синяя, строчка белая, материал хлопок, принт Покемоны; товар2: макароны вес 0.5 кг, производитель Макфа, состав: твердые сорта пшеницы и т.д. ). Т.е, даже если вы работаете с однотипными товарами, у которых один и тот же набор атрибутов, то я вам настоятельно не рекомендую использовать EAV. Большой минус у такой структуры: запросы и dml-операции занимают больше времени, чем с обычной таблицей в нормальной 3й форме.
авторНе хочется плодить 10 новых таблиц
Вот это вообще не основание для использования EAV :(. Прочтите хотя бы в Википедии описание, ваш пример показывает как НЕ нужно проектировать структуру.
...
Рейтинг: 0 / 0
EAV модель
    #39607059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog2. Как можно такую таблицу проиндексировать?

На этот вопрос невозможно ответить. Ты должен подойти к бизнесу и спросить. Какие будут объемы? Какие
поисковые операции будут? Какие SLA стоят? Сколько милисекунд согласны ждать и т.п.
Потом проанализировать какие их этих операций будут затрагивать какие поля. Возможно
будет два сета полей. Один - денормализованный (обычные плоские таблицы). Проиндексированный.
Второй сет - будет лежать в EAV как дополнение. Туда пойдут всякие descriptions, comments, и редко
используемые атрибуты типа "диаметр_хомута_топливного_шланга" e.t.c. Потом построить макет
и прогнать на нем свои требования.

Можно делать твою задачку и без этих макетов и требований. Но есть риск что спор будет
сводится к богословским вопросам типа "бог един или троица?" или "сколько ангелов могут стоять ...?"
и т.п. риторические споры где нет никакого критерия истинности а есть просто частные мнения.
...
Рейтинг: 0 / 0
EAV модель
    #39607134
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytoncobalt_frog2. Как можно такую таблицу проиндексировать?

На этот вопрос невозможно ответить. Ты должен подойти к бизнесу и спросить. Какие будут объемы? Какие
поисковые операции будут? Какие SLA стоят? Сколько милисекунд согласны ждать и т.п.
Потом проанализировать какие их этих операций будут затрагивать какие поля. Возможно
будет два сета полей. Один - денормализованный (обычные плоские таблицы). Проиндексированный.
Второй сет - будет лежать в EAV как дополнение. Туда пойдут всякие descriptions, comments, и редко
используемые атрибуты типа "диаметр_хомута_топливного_шланга" e.t.c. Потом построить макет
и прогнать на нем свои требования.

Можно делать твою задачку и без этих макетов и требований. Но есть риск что спор будет
сводится к богословским вопросам типа "бог един или троица?" или "сколько ангелов могут стоять ...?"
и т.п. риторические споры где нет никакого критерия истинности а есть просто частные мнения.

Объемы - десятки тысяч записей в месяц, ждать согласны хоть секунду, по этим данным будут обычные выгрузки в Excel, возможно изменение записи в последующем, поиск по какому либо полю (атрибуту).
Можно поподробнее по поводу:
mayton Возможно будет два сета полей. Один - денормализованный (обычные плоские таблицы). Проиндексированный.
Второй сет - будет лежать в EAV как дополнение. Туда пойдут всякие descriptions, comments, и редко
используемые атрибуты типа "диаметр_хомута_топливного_шланга" e.t.c. Потом построить макет
и прогнать на нем свои требования.
Если можно ссылку. Большое спасибо.
...
Рейтинг: 0 / 0
EAV модель
    #39607158
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылку не дам. Это просто из личного опыта. А ты должен привести примеры поисковых запросов.
На языке бизнес-постановки. "Найти все машины с 4 дверями и мощностью не менее..." и т.д.
И чем больше - тем лучше.
...
Рейтинг: 0 / 0
EAV модель
    #39607166
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonСсылку не дам. Это просто из личного опыта. А ты должен привести примеры поисковых запросов.
На языке бизнес-постановки. "Найти все машины с 4 дверями и мощностью не менее..." и т.д.
И чем больше - тем лучше.

Найти все машины с 4 дверями

Найти количество всех машин красного цвета с количеством дверей <4

Найти дату самой первой модели машины

Найти стоимость всех машин с датой создания < 2000 года

Интересует как организовать два сета полей(денормализованынй и eav) для примера который я привел.
Спасибо.
...
Рейтинг: 0 / 0
EAV модель
    #39607167
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to mayton
Хотелось ыб увидеть пример именно смешанной структуры (реляционной и eav).
...
Рейтинг: 0 / 0
EAV модель
    #39607176
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и все. Двери, стоимость и дату создания ты переносишь в плоскую таблицу. И строишь индексы (по запросам конечно).
А все остальные атрибуты - в EAV.
...
Рейтинг: 0 / 0
EAV модель
    #39607188
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а потом появляются новые хотелки и "тщательно продуманная струкура" идёт в хлам.
...
Рейтинг: 0 / 0
EAV модель
    #39607192
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov... а потом появляются новые хотелки и "тщательно продуманная струкура" идёт в хлам.
хотелки будут, могут добавляться/удаляться некоторые из полей, если только eav использовать это решается просто созданием новой сущности и нового атрибутного состава для нее, если смешанная модель, то возникают проблемы.
...
Рейтинг: 0 / 0
EAV модель
    #39607193
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видел систему, когда сначала все сделали в EAV, потом для поиска сделали View поверх EAV, потом для ускорения View заменили на таблицы и система параллельно хранила данные и там и там, потом сделали опцию настройки как хранить: EAV + таблица или просто в таблицах )))

Вот такая была эволюция. С другой стороны, изначальный выбор EAV позволил быстро сделать первую версию системы, а дальше она уже развивалась...
...
Рейтинг: 0 / 0
EAV модель
    #39607197
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogесли смешанная модель, то возникают проблемы.О том и речь.
У EAV хватает своих проблем, чтобы добавлять ещё и чужие.
...
Рейтинг: 0 / 0
EAV модель
    #39607201
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovУ EAV хватает своих проблем, чтобы добавлять ещё и чужие.
На мой взгляд у EAV не проблемы, а родовые травмы.

Пока EAV устраивает - все хорошо. Как только нужен нормальный/сложный поиск + нормальные/сложные отчеты от EAV приходится уходить. Ну или оставаясь на EAV создавать тысячи строк говно-кода, который и пишется сложно и на серверах все процессоры и память выжирает.... как только процессоры и память заканчиваются.... от EAV приходится уходить )))

AFAIK

НО на подходящих/простых задачах EAV конечно может упростить кодирование и добавить универсальности. Хотя, не очень понятно, почему тогда вместо EAV просто не использовать Dinamic SQL и не сделать простейший GUI интерфейс к ALTER TABLE ... ADD COLUMN. Для систем 24*7 это конечно вряд ли подходит, но для 99% остальных систем - вполне.

IMHO
...
Рейтинг: 0 / 0
EAV модель
    #39607224
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevBasil A. SidorovУ EAV хватает своих проблем, чтобы добавлять ещё и чужие.

AFAIK

НО на подходящих/простых задачах EAV конечно может упростить кодирование и добавить универсальности.

IMHO

Например, хранение метаданных.
...
Рейтинг: 0 / 0
EAV модель
    #39607275
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
Leonid KudryavtsevBasil A. SidorovУ EAV хватает своих проблем, чтобы добавлять ещё и чужие.
На мой взгляд у EAV не проблемы, а родовые травмы.

Пока EAV устраивает - все хорошо. Как только нужен нормальный/сложный поиск + нормальные/сложные отчеты от EAV приходится уходить. Ну или оставаясь на EAV создавать тысячи строк говно-кода, который и пишется сложно и на серверах все процессоры и память выжирает.... как только процессоры и память заканчиваются.... от EAV приходится уходить )))

AFAIK

НО на подходящих/простых задачах EAV конечно может упростить кодирование и добавить универсальности. Хотя, не очень понятно, почему тогда вместо EAV просто не использовать Dinamic SQL и не сделать простейший GUI интерфейс к ALTER TABLE ... ADD COLUMN. Для систем 24*7 это конечно вряд ли подходит, но для 99% остальных систем - вполне.

IMHO

Если Вы не умеете работать с EAV, это не значит, что проблемы у нее.
GUI интерфейс к ALTER TABLE ... ADD COLUMN - это бред. Максимум - для студенческих поделок, типа "смотрите как я умею!".
Dinamic SQL обладает не меньшим количеством недостатков, чем EAV. Особенно если использовать его сплошь и рядом.
Говнокод люди пишут, потому как не в состоянии построить нормальную архитектуру, не различают OLTP и DWH, ну и не понимают, где есть смысл в EAV, а где нет.
...
Рейтинг: 0 / 0
EAV модель
    #39607280
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdxGUI интерфейс к ALTER TABLE ... ADD COLUMN - это бред. Максимум - для студенческих поделок, типа "смотрите как я умею!".

Очень часто нужны настраиваемые системы. К примеру:

www.kamis.ru (alter table)
Модуль Качества из OeBS
Descriptive Flex Fields из того же OeBS
Case в Oracle Utilitites. Customer Care & Billing (все в xml)

что из них более "студенческая поделка", я не знаю. Вариант сделать через alter table, лично мне нравится больше, что извращения с XML, EAV и прочим.

Как "готовить" EAV, что бы по нему был нормальный поиск - лично я не знаю. Написать поиск для EAV (c учетом or, and etc...) можно.... но конструкция из SELECT'ов и UNION'ов будет монструозная. IMHO & AFAIK
...
Рейтинг: 0 / 0
EAV модель
    #39607284
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdxМаксимум - для студенческих поделокAxapta так сделана.

AdxDinamic SQL обладает не меньшим количеством недостатков, чем EAV.dynamic это условности времени компиляции и инвалидации хранимого plsql-кода. В клиентском коде все "динамик", в рантайме ораклу все равно, записан ли запрос статически в хранимом коде, или сформирован на лету.
...
Рейтинг: 0 / 0
EAV модель
    #39607289
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут только один минус, про всякие новомодные средства типа Hibernate лучше забыть )))

ну или придется нефиговую кодогенерацию лепить, совершенно непонятно ради чего.

например Oracle CC&B: Метаданные => анотация-генерация => анотации => xml-генерация по анотация => разбор xml => json - xml - dto - copy book'и - dto - xml - json. Туда, сюда обратно, тебе и мне приятно ( C ) ))) ну и программисты в Маниле работой заняты (copy book'и пишутся вручную!). Зато Hibernate и XML в полный рост )))

AFAIK
...
Рейтинг: 0 / 0
EAV модель
    #39607298
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAdxGUI интерфейс к ALTER TABLE ... ADD COLUMN - это бред. Максимум - для студенческих поделок, типа "смотрите как я умею!".

Очень часто нужны настраиваемые системы. К примеру:

www.kamis.ru (alter table)
Модуль Качества из OeBS
Descriptive Flex Fields из того же OeBS
Case в Oracle Utilitites. Customer Care & Billing (все в xml)

что из них более "студенческая поделка", я не знаю. Вариант сделать через alter table, лично мне нравится больше, что извращения с XML, EAV и прочим.

Как "готовить" EAV, что бы по нему был нормальный поиск - лично я не знаю. Написать поиск для EAV (c учетом or, and etc...) можно.... но конструкция из SELECT'ов и UNION'ов будет монструозная. IMHO & AFAIK

Я не говорю, что так не делают. Идея вполне очевидная. GUI есть, ALTER есть, почему бы не объединить?
Но в целом это либо от безысходности (кейсы разные бывают), либо от неумения найти альтернативу.
Но как замена EAV - это бред.
В ORACLE у функции PIVOT какие-то проблемы? Не очень много с ним работал (
...
Рейтинг: 0 / 0
EAV модель
    #39607305
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-AdxМаксимум - для студенческих поделокAxapta так сделана.


У EAV есть один очень серьезный недостаток - ей нужно уметь пользоваться. Все ничего, пока систему пишут профи, но как только она попадает в руки джунов - начинает лезть говнокод. С плоскими таблицами работать проще , и зачастую это перевешивает все возможные достоинства. Если ты уверен, что с системой будут работать ... э ... не очень квалифицированные разработчики, то лучше EAV не использовать. Решается построением ядра вокруг модели, ядро пишут профи, обвязку - джуны, но не всегда возможно. Особенно проблематично, если Вы пишите систему для сторонних разработчиков.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / EAV модель
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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