|
|
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Всем добрый вечер, по задаче необходимо реализовать более 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. 1. Кто нибудь сталкивался с такими задачами? Не хочется плодить 10 новых таблиц, тем более что поля таблиц и их количество могут изменяться. Какие подводные камни есть в EAV? 2. Как можно такую таблицу проиндексировать? 3. Лучше хранить все в стрингах или в entity_attr_value стоит добавить вместо str_value три поля например str_value,number_value и date_value? если можно поделить плз ссылками. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 20:41 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
cobalt_frog, Если жизнь без eav не мила, бери nosql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 21:14 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
адма и еавcobalt_frog, Если жизнь без eav не мила, бери nosql. Да не то чтобы не мила...просто после того как я сделал ее по этой схеме возникает мысль, а стоило ли?) Все таки плоские таблицы мне кажутся более предпочтительным варианто, и пес с ним что придется создать новых 10 таблиц. Хотелось бы узнать мнение участников форума по этому поводу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 21:20 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
cobalt_frogХотелось бы узнать мнениеEAV в поиск не вбивается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 21:31 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
+ хотелось бы узнать, кто из форумчан использовал данный подход при решении задач, с какими трудностями сталкивался и как их решал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 21:37 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
cobalt_frogпосле того как я сделал ее по этой схеме возникает мысль, а стоило ли? Использование EAV требует чуть-чуть другого стиля мышления по сравнению с квадратно-гнездовым. Так что если ты чувствуешь дискомфорт, значит EAV действительно не стоило делать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 22:22 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
cobalt_frog, EAV целесообразно использовать в крайнем случае, например, когда для описания товара используется переменный набор атрибутов (товар 1: майка синяя, строчка белая, материал хлопок, принт Покемоны; товар2: макароны вес 0.5 кг, производитель Макфа, состав: твердые сорта пшеницы и т.д. ). Т.е, даже если вы работаете с однотипными товарами, у которых один и тот же набор атрибутов, то я вам настоятельно не рекомендую использовать EAV. Большой минус у такой структуры: запросы и dml-операции занимают больше времени, чем с обычной таблицей в нормальной 3й форме. авторНе хочется плодить 10 новых таблиц Вот это вообще не основание для использования EAV :(. Прочтите хотя бы в Википедии описание, ваш пример показывает как НЕ нужно проектировать структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2018, 23:20 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
cobalt_frog2. Как можно такую таблицу проиндексировать? На этот вопрос невозможно ответить. Ты должен подойти к бизнесу и спросить. Какие будут объемы? Какие поисковые операции будут? Какие SLA стоят? Сколько милисекунд согласны ждать и т.п. Потом проанализировать какие их этих операций будут затрагивать какие поля. Возможно будет два сета полей. Один - денормализованный (обычные плоские таблицы). Проиндексированный. Второй сет - будет лежать в EAV как дополнение. Туда пойдут всякие descriptions, comments, и редко используемые атрибуты типа "диаметр_хомута_топливного_шланга" e.t.c. Потом построить макет и прогнать на нем свои требования. Можно делать твою задачку и без этих макетов и требований. Но есть риск что спор будет сводится к богословским вопросам типа "бог един или троица?" или "сколько ангелов могут стоять ...?" и т.п. риторические споры где нет никакого критерия истинности а есть просто частные мнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 00:53 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
maytoncobalt_frog2. Как можно такую таблицу проиндексировать? На этот вопрос невозможно ответить. Ты должен подойти к бизнесу и спросить. Какие будут объемы? Какие поисковые операции будут? Какие SLA стоят? Сколько милисекунд согласны ждать и т.п. Потом проанализировать какие их этих операций будут затрагивать какие поля. Возможно будет два сета полей. Один - денормализованный (обычные плоские таблицы). Проиндексированный. Второй сет - будет лежать в EAV как дополнение. Туда пойдут всякие descriptions, comments, и редко используемые атрибуты типа "диаметр_хомута_топливного_шланга" e.t.c. Потом построить макет и прогнать на нем свои требования. Можно делать твою задачку и без этих макетов и требований. Но есть риск что спор будет сводится к богословским вопросам типа "бог един или троица?" или "сколько ангелов могут стоять ...?" и т.п. риторические споры где нет никакого критерия истинности а есть просто частные мнения. Объемы - десятки тысяч записей в месяц, ждать согласны хоть секунду, по этим данным будут обычные выгрузки в Excel, возможно изменение записи в последующем, поиск по какому либо полю (атрибуту). Можно поподробнее по поводу: mayton Возможно будет два сета полей. Один - денормализованный (обычные плоские таблицы). Проиндексированный. Второй сет - будет лежать в EAV как дополнение. Туда пойдут всякие descriptions, comments, и редко используемые атрибуты типа "диаметр_хомута_топливного_шланга" e.t.c. Потом построить макет и прогнать на нем свои требования. Если можно ссылку. Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 09:30 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Ссылку не дам. Это просто из личного опыта. А ты должен привести примеры поисковых запросов. На языке бизнес-постановки. "Найти все машины с 4 дверями и мощностью не менее..." и т.д. И чем больше - тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:00 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
maytonСсылку не дам. Это просто из личного опыта. А ты должен привести примеры поисковых запросов. На языке бизнес-постановки. "Найти все машины с 4 дверями и мощностью не менее..." и т.д. И чем больше - тем лучше. Найти все машины с 4 дверями Найти количество всех машин красного цвета с количеством дверей <4 Найти дату самой первой модели машины Найти стоимость всех машин с датой создания < 2000 года Интересует как организовать два сета полей(денормализованынй и eav) для примера который я привел. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:10 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
to mayton Хотелось ыб увидеть пример именно смешанной структуры (реляционной и eav). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:14 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Ну вот и все. Двери, стоимость и дату создания ты переносишь в плоскую таблицу. И строишь индексы (по запросам конечно). А все остальные атрибуты - в EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:24 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
... а потом появляются новые хотелки и "тщательно продуманная струкура" идёт в хлам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:44 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov... а потом появляются новые хотелки и "тщательно продуманная струкура" идёт в хлам. хотелки будут, могут добавляться/удаляться некоторые из полей, если только eav использовать это решается просто созданием новой сущности и нового атрибутного состава для нее, если смешанная модель, то возникают проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:51 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Видел систему, когда сначала все сделали в EAV, потом для поиска сделали View поверх EAV, потом для ускорения View заменили на таблицы и система параллельно хранила данные и там и там, потом сделали опцию настройки как хранить: EAV + таблица или просто в таблицах ))) Вот такая была эволюция. С другой стороны, изначальный выбор EAV позволил быстро сделать первую версию системы, а дальше она уже развивалась... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:52 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
cobalt_frogесли смешанная модель, то возникают проблемы.О том и речь. У EAV хватает своих проблем, чтобы добавлять ещё и чужие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 10:55 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovУ EAV хватает своих проблем, чтобы добавлять ещё и чужие. На мой взгляд у EAV не проблемы, а родовые травмы. Пока EAV устраивает - все хорошо. Как только нужен нормальный/сложный поиск + нормальные/сложные отчеты от EAV приходится уходить. Ну или оставаясь на EAV создавать тысячи строк говно-кода, который и пишется сложно и на серверах все процессоры и память выжирает.... как только процессоры и память заканчиваются.... от EAV приходится уходить ))) AFAIK НО на подходящих/простых задачах EAV конечно может упростить кодирование и добавить универсальности. Хотя, не очень понятно, почему тогда вместо EAV просто не использовать Dinamic SQL и не сделать простейший GUI интерфейс к ALTER TABLE ... ADD COLUMN. Для систем 24*7 это конечно вряд ли подходит, но для 99% остальных систем - вполне. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 11:13 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevBasil A. SidorovУ EAV хватает своих проблем, чтобы добавлять ещё и чужие. AFAIK НО на подходящих/простых задачах EAV конечно может упростить кодирование и добавить универсальности. IMHO Например, хранение метаданных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 11:41 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
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, а где нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 13:05 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 13:16 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
AdxМаксимум - для студенческих поделокAxapta так сделана. AdxDinamic SQL обладает не меньшим количеством недостатков, чем EAV.dynamic это условности времени компиляции и инвалидации хранимого plsql-кода. В клиентском коде все "динамик", в рантайме ораклу все равно, записан ли запрос статически в хранимом коде, или сформирован на лету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 13:25 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
Тут только один минус, про всякие новомодные средства типа Hibernate лучше забыть ))) ну или придется нефиговую кодогенерацию лепить, совершенно непонятно ради чего. например Oracle CC&B: Метаданные => анотация-генерация => анотации => xml-генерация по анотация => разбор xml => json - xml - dto - copy book'и - dto - xml - json. Туда, сюда обратно, тебе и мне приятно ( C ) ))) ну и программисты в Маниле работой заняты (copy book'и пишутся вручную!). Зато Hibernate и XML в полный рост ))) AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 13:34 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
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 какие-то проблемы? Не очень много с ним работал ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 13:42 |
|
||
|
EAV модель
|
|||
|---|---|---|---|
|
#18+
-2-AdxМаксимум - для студенческих поделокAxapta так сделана. У EAV есть один очень серьезный недостаток - ей нужно уметь пользоваться. Все ничего, пока систему пишут профи, но как только она попадает в руки джунов - начинает лезть говнокод. С плоскими таблицами работать проще , и зачастую это перевешивает все возможные достоинства. Если ты уверен, что с системой будут работать ... э ... не очень квалифицированные разработчики, то лучше EAV не использовать. Решается построением ядра вокруг модели, ядро пишут профи, обвязку - джуны, но не всегда возможно. Особенно проблематично, если Вы пишите систему для сторонних разработчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39607059&tid=1884368]: |
0ms |
get settings: |
13ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
142ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 523ms |

| 0 / 0 |
