|
|
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Часто и регулярно обсуждается, в том числе и тут. Предлагаю собрать воедино различные подходы их плюсы и минусы. Пока классифицировал на такие варианты: 1. "Двухуровневое решение" - к таблице сущности (товар, посетитель) добавляет простую таблицу "ид_сущности, имя_параметра - строка_значение" Позволяет легко расширять набор базовых параметров сущности (столбцы основной таблицы) дополнительными значениями и делать относительно простой CRUD с одним join. Недостатки: а) значение - только строка (преобразования типов) б) недостаточная нормализация (повторяемость имен параметров) Достоинство вижу только одно - скорость выборок. 2. "Трехуровневое решение" - значения хранятся в отдельных таблицах значений (по типам данных например), имена - суть значения предопределенного типа (например char(64) ) в отдельной таблице. В этом случае, дополнительная таблица параметров становится примерно такой: (object_id, paramName_id, paramType_id, paramValue_id), где paramType_id -- какой-либо способ идентификации таблицы конкретной таблицы значений. 3. Вариант 2 с динамическим DDL для построения упрощенных с точки зрения выборки представлениями. 4. Вариант 2 с дополнительным полем parent_id -- позволяет организовывать "вложенность параметров" и/или их контекстную зависимость. Как равиант "ускорения" работы с параметрами - вижу применение плагинов прямого доступа к индексам (handlerSocket к примеру) ... приглашаю гуру добавлять/критиковать подходы к реализации EAV силами Мускуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 06:47 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Никакой MySQL-специфики я в этом вопросе не вижу, поэтому топик переношу. Модератор: Тема перенесена из форума "MySQL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 22:08 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
miksoft, а зря. Планировал показать как можно использовать handlerSocket в реализации.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 06:03 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Arhat1091. "Двухуровневое решение" - к таблице сущности (товар, посетитель) добавляет простую таблицу "ид_сущности, имя_параметра - строка_значение" "имя сущности, ид_сущности, имя_параметра, значение параметра, дата действия" Преобразование типов ничего не стоит Все нормализовано индексы по 1. имя сущности, имя_параметра, ид_сущности, 2 имя сущности, имя_параметра, значение параметра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 09:22 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Arhat109Планировал показать как можно использовать handlerSocket в реализации..Ну так с этого и надо было начинать, а не с общих слов. Или, по крайней мере, на них не останавливаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 10:26 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
"Мой" вариант упрощенно: Древовидная таблица настроек атрибутов: ИД, Название, Тип сущности(например прих.накладная), тип подсущности(например для товаров прих.накл.), прочие настройки(тип данных, знач. по умолчанию, форматирование, актуальность и пр.) Таблица значений: Автонумератор, Тип сущности+ ИД сущности, Тип подсущности+ ИД подсущности, Поля всех типов(целое, флоат, дата, строка, бит), дата модификции. Таблица значений для атрибутов, зависимых от даты (например курс валют): ИД автонумератора(см. выше), поля всех типов (см. выше), дата актуальности. ИТОГО: всего три ключевых таблицы + несколько ХП. Легко привязывается к любой сущности в системе, да и вообще к любой системе. Отображается в любом контейнере - панель, закладка, отдельная форма. Может хранить любые данные, в т.ч. ссылку на другой документ в системе. Пользователь видит список или фрагмент дерева(см. выше первую таблицу) "название атрибута+значение атрибута". Все выборки из ЕАВ - ХП или SQL-функциями. Есть настройка прав (читать, редактировать) в разрезе атрибут-пользователь. Пока не умеет хранить файлы, но это предполагается, причем без переделки уже существующей схемы. Просто будет еще один тип данных + дописки в SQL. Работает только с ключами типа INT. Использование других ключей(например ГУИД) не предполагается, хотя не противоречит схеме. Делфи7/2007 + МССКЛ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 10:36 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
miksoft, блин, я только выкачал это всё, сижу собираю... ещё ни разу ни компилял Мускуль с плагинами... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 19:51 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
полуофф: удивительно, что еще не сделали какого-нибудь дополнительного MySQL-модуля для EAVешников, например: Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2012, 11:42 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Максим Н, собственно именно этим и планировал заняться (рабочее название mumpsDb), но похоже что "без надобности". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2012, 19:37 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Arhat109Максим Н, собственно именно этим и планировал заняться (рабочее название mumpsDb), но похоже что "без надобности". А по-моему идея неплохая. К самому EAV я не очень хорошо отношусь, но многие юзают и бывает даже успешно (если в меру), так почему бы и не сделать модуль ? А если его еще и "встроить" в мускуль (а не реализовывать средствами sql), тогда вообще шикарно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2012, 01:05 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Да уже давно понятно что EAV - не вариант (вернее может быть вариантом использования в 1-2% задач) В чем его привлекательность: быстро и безболезненно (ну почти) добавлять новые сущности и изменять аттрибуты у них А в чем антипривлекательность: - это нереляционно - требует очень, очень больших временных затрат на создание фреймворка и его развитие - тормоза на больших объемах То есть - совсем непривлекательно! Главная проблема остается - на лету добавлять/изменять сущности Так таки такой проблемы нету! Создаем структуру из простых реляционных табличек для хранения мета-информации о структуре БД и при каждом чихе при помощи нескольких SP автоматом генерим/изменяем любые сущности При этом получаем все только плюсики: - быстро и безболезненно добавлять новые сущности и изменять аттрибуты у них - структура реляционна -> высокая производительность - малые временные затраты на модификацию структуры Реализаций такой структуры много - Microsoft CRM, Arbidana.com и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 16:12 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
spпри каждом чихе при помощи нескольких SP автоматом генерим/изменяем любые сущности Кто это будет делать - end user ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 17:37 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
_мод, ну если сумасшедший администратор даст права рядовому юзеру - может и он :) как правило этим должны заниматься аналитики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 18:09 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
sp, этим рулит не админ а предметная область потому УЖЕ 10000000000 - делайте либо чистый еав, либо гибрид, либо не делайте нифига ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 18:14 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
ViPRos, предметной областью рулит админ, а если это не так - это бардак! да хоть 20000000000! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 18:37 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
ViPRos, я понимаю вашу категоричность - про "только EAV"! - вы вложили туда много сил - но это вредно делать всем стоящим перед выбором (только желающим :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 18:39 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
spViPRos, предметной областью рулит админ, а если это не так - это бардак! да хоть 20000000000! :) воще фантастика - админ рулит конструктором, технологом, механиком,... (открой хоть B2MML, ISA95, OAGIS, ...) хватит с него бухгалтерш долбать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 19:00 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
sp, вd ВИПРОС гибридная схема с механизмом динамической классификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 19:01 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
ViPRos, тогда не пойму ваших попыток пощщипать меня :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 19:05 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
ViPRos, все претензии к Microsoft CRM, Arbidana.com и др проектам ...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 19:06 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
ViPRosspViPRos, предметной областью рулит админ, а если это не так - это бардак! да хоть 20000000000! :) воще фантастика - админ рулит конструктором, технологом, механиком,... (открой хоть B2MML, ISA95, OAGIS, ...) хватит с него бухгалтерш долбать мне всегда нравится непредсказуемый ход обсуждения тем в русскоязычных форумах просто фантастика какаято! :)) обсуждаем вопросы архитектур БД, тут вопрос из зала - а что будет делать дворник если упадет метеорит!??? - ответ: ну возможно убежит - аааа, так ты дурак и правый глаз у тебя косит!!! ..... тут вся аудитория наваливаецца и пинает выступающего... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2012, 19:16 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
sp_мод, ну если сумасшедший администратор даст права рядовому юзеру - может и он :) как правило этим должны заниматься аналитики ИМХО, но именно этот Ваш ответ "не в тему" и привел ко флуду ниже. Поскольку автор - то хочется попросить модеров снести тол что было ниже. Конкретно Вам: 1. Вопрос был задан по-существу. И он - как ни странно, основной. "Хто будет рулить?" Варианты ответа: а) программисты (DBA + прикладник) -- в этом случае "проблем ваще нет" - добавляем, переделываем структуру данных, приложения, наворачиваем фильтры, валидаторы, интерфейсы, связи со старыми данными и т.д. От этого "поклона" дорогим и любимым говнокодерам (как тем так и другим) и хочется уйти совсем. Причем всем и давно. ;) б) пользователь -- и? куды Вы от EAV денетесь? :) Недостатки хорошо изучены, и Вы правы: тормоза системы на больших данных/нагрузках. И даже mumps не спасение. Вот как раз тут, могут быть гибридные решения: что-то в основных структурах (фиксированно), что-то туда динамически лезет (что надо быстро И позволяет обходится имеющимися ТИПОВЫМИ интерфейсами), что-то чистым EAV. в) ал-ля ЦМС - метаструктуры, метапрограммирование... всё это хорошо, когда есть готовые (читай типовые) интерфейсы использования... а когда их нет? Как к примеру, пользователь, добавив к сущности пользователя (под)колонку: "Образование"->"ВУЗ"->"специальность"(ид строки справочника "Специальности ВУЗОВ") может привязать обработку валидатором с проверкой наличия данной специальности в данном ВУЗе в заданный период обучения ... БЕЗ шаманства и п."а"? только силами ЦМС? Или сгенерит событие-уведомление всем, пользователям, которые имеют тот же самый ВУЗ уведомление о добавлении "однокурсника" (ишо период обучения совпадать должон)? Или ... Всё что он сможет сделать ... должно быть заранее реализовано в ЦМС или создаем ещё один "метаязык" и обучаем новых "метаговнокодеров". Круг замкнулся. И ведь это не единственные проблемы ... их тыщи! ;) Так вот, несмотря на свой недостаток (он практически единственный) - EAV позволяет динамически наращивать структуры данных ручками самих пользователей... впрочем и обработки тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 06:35 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Arhat109Как к примеру, пользователь, добавив к сущности пользователя (под)колонку: "Образование"->"ВУЗ"->"специальность"(ид строки справочника "Специальности ВУЗОВ") может привязать обработку валидатором с проверкой наличия данной специальности в данном ВУЗе в заданный период обучения ... БЕЗ шаманства и п."а"? только силами ЦМС? Или сгенерит событие-уведомление всем, пользователям, которые имеют тот же самый ВУЗ уведомление о добавлении "однокурсника" (ишо период обучения совпадать должон)? Или ... Всё что он сможет сделать ... должно быть заранее реализовано в ЦМС или создаем ещё один "метаязык" и обучаем новых "метаговнокодеров". Круг замкнулся.Какой-то сумбур во всей это фразе. Попробуйте немного свою мысль структурировать и объясните, что из вами перечисленного делается в EAV без программирования и почему это нельзя точно также без EAV сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 09:05 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Arhat109Как к примеру, пользователь, добавив к сущности пользователя (под)колонку: "Образование"->"ВУЗ"->"специальность"(ид строки справочника "Специальности ВУЗОВ") может привязать обработку валидатором с проверкой наличия данной специальности в данном ВУЗе в заданный период обучения ... БЕЗ шаманства и п."а"? С вами во всем согласен. Ессно, фраймворк для конечного пользователя должен иметь (и имеет) язык выражений - числовых, символьных, булевых и т.д. Механизм валидации, подстановки и пр. по выражениям встраивается в экранный интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 09:30 |
|
||
|
EAV варианты реализаций.
|
|||
|---|---|---|---|
|
#18+
Arhat1091. "Двухуровневое решение" - к таблице сущности (товар, посетитель) добавляет простую таблицу "ид_сущности, имя_параметра - строка_значение" строка_значение -- не катит никак. Нарушение доменной целостности данных в самом ядре БД? Ни тебе нормальных индексов, ни тебе нормальных операций с полем. Только в разных полях по типу данных (тогда они все должны быть NULL) или даже в разных таблицах (тогда не должны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 09:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37955465&tid=1541531]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 483ms |

| 0 / 0 |
