powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / EAV варианты реализаций.
25 сообщений из 612, страница 1 из 25
EAV варианты реализаций.
    #37943738
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто и регулярно обсуждается, в том числе и тут. Предлагаю собрать воедино различные подходы их плюсы и минусы.

Пока классифицировал на такие варианты:

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 силами Мускуля.
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37945602
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакой MySQL-специфики я в этом вопросе не вижу, поэтому топик переношу.

Модератор: Тема перенесена из форума "MySQL".
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37945823
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
а зря. Планировал показать как можно использовать handlerSocket в реализации..
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37945929
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat1091. "Двухуровневое решение" - к таблице сущности (товар, посетитель) добавляет простую таблицу "ид_сущности, имя_параметра - строка_значение"
"имя сущности, ид_сущности, имя_параметра, значение параметра, дата действия"
Преобразование типов ничего не стоит
Все нормализовано
индексы по
1. имя сущности, имя_параметра, ид_сущности,
2 имя сущности, имя_параметра, значение параметра
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37946029
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Планировал показать как можно использовать handlerSocket в реализации..Ну так с этого и надо было начинать, а не с общих слов. Или, по крайней мере, на них не останавливаться.
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37946052
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Мой" вариант упрощенно:

Древовидная таблица настроек атрибутов:
ИД, Название, Тип сущности(например прих.накладная), тип подсущности(например для товаров прих.накл.), прочие настройки(тип данных, знач. по умолчанию, форматирование, актуальность и пр.)

Таблица значений:
Автонумератор, Тип сущности+ ИД сущности, Тип подсущности+ ИД подсущности, Поля всех типов(целое, флоат, дата, строка, бит), дата модификции.

Таблица значений для атрибутов, зависимых от даты (например курс валют):
ИД автонумератора(см. выше), поля всех типов (см. выше), дата актуальности.

ИТОГО: всего три ключевых таблицы + несколько ХП.
Легко привязывается к любой сущности в системе, да и вообще к любой системе. Отображается в любом контейнере - панель, закладка, отдельная форма.
Может хранить любые данные, в т.ч. ссылку на другой документ в системе.
Пользователь видит список или фрагмент дерева(см. выше первую таблицу) "название атрибута+значение атрибута".
Все выборки из ЕАВ - ХП или SQL-функциями.
Есть настройка прав (читать, редактировать) в разрезе атрибут-пользователь.
Пока не умеет хранить файлы, но это предполагается, причем без переделки уже существующей схемы. Просто будет еще один тип данных + дописки в SQL.

Работает только с ключами типа INT. Использование других ключей(например ГУИД) не предполагается, хотя не противоречит схеме.

Делфи7/2007 + МССКЛ
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37947310
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
блин, я только выкачал это всё, сижу собираю... ещё ни разу ни компилял Мускуль с плагинами... ;)
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37949370
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полуофф:
удивительно, что еще не сделали какого-нибудь дополнительного MySQL-модуля для EAVешников, например:

Код: plsql
1.
CREATE OR REPLACE EAV_SCHEMA DEFAULT
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37949542
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н, собственно именно этим и планировал заняться (рабочее название mumpsDb), но похоже что "без надобности".
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37949713
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Максим Н, собственно именно этим и планировал заняться (рабочее название mumpsDb), но похоже что "без надобности".
А по-моему идея неплохая. К самому EAV я не очень хорошо отношусь, но многие юзают и бывает даже успешно (если в меру), так почему бы и не сделать модуль ? А если его еще и "встроить" в мускуль (а не реализовывать средствами sql), тогда вообще шикарно )
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954629
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уже давно понятно что EAV - не вариант (вернее может быть вариантом использования в 1-2% задач)

В чем его привлекательность: быстро и безболезненно (ну почти) добавлять новые сущности и изменять аттрибуты у них
А в чем антипривлекательность:
- это нереляционно
- требует очень, очень больших временных затрат на создание фреймворка и его развитие
- тормоза на больших объемах

То есть - совсем непривлекательно!

Главная проблема остается - на лету добавлять/изменять сущности
Так таки такой проблемы нету!
Создаем структуру из простых реляционных табличек для хранения мета-информации о структуре БД и при каждом чихе при помощи нескольких SP автоматом генерим/изменяем любые сущности
При этом получаем все только плюсики:
- быстро и безболезненно добавлять новые сущности и изменять аттрибуты у них
- структура реляционна -> высокая производительность
- малые временные затраты на модификацию структуры

Реализаций такой структуры много - Microsoft CRM, Arbidana.com и т.п.
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954816
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spпри каждом чихе при помощи нескольких SP автоматом генерим/изменяем любые сущности
Кто это будет делать - end user ?
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954873
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод,

ну если сумасшедший администратор даст права рядовому юзеру - может и он :)
как правило этим должны заниматься аналитики
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954880
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp,

этим рулит не админ а предметная область
потому УЖЕ 10000000000 - делайте либо чистый еав, либо гибрид, либо не делайте нифига
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954910
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

предметной областью рулит админ, а если это не так - это бардак! да хоть 20000000000! :)
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954916
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

я понимаю вашу категоричность - про "только EAV"! - вы вложили туда много сил - но это вредно делать всем стоящим перед выбором (только желающим :) )
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954970
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spViPRos,

предметной областью рулит админ, а если это не так - это бардак! да хоть 20000000000! :)
воще фантастика - админ рулит конструктором, технологом, механиком,...
(открой хоть B2MML, ISA95, OAGIS, ...)
хватит с него бухгалтерш долбать
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954972
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp,

вd ВИПРОС гибридная схема с механизмом динамической классификации
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954980
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

тогда не пойму ваших попыток пощщипать меня :)
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954982
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

все претензии к Microsoft CRM, Arbidana.com и др проектам ...:)
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37954993
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosspViPRos,

предметной областью рулит админ, а если это не так - это бардак! да хоть 20000000000! :)
воще фантастика - админ рулит конструктором, технологом, механиком,...
(открой хоть B2MML, ISA95, OAGIS, ...)
хватит с него бухгалтерш долбать

мне всегда нравится непредсказуемый ход обсуждения тем в русскоязычных форумах просто фантастика какаято! :))

обсуждаем вопросы архитектур БД, тут вопрос из зала
- а что будет делать дворник если упадет метеорит!???
- ответ: ну возможно убежит
- аааа, так ты дурак и правый глаз у тебя косит!!!
..... тут вся аудитория наваливаецца и пинает выступающего...
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37955342
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp_мод,

ну если сумасшедший администратор даст права рядовому юзеру - может и он :)
как правило этим должны заниматься аналитики

ИМХО, но именно этот Ваш ответ "не в тему" и привел ко флуду ниже. Поскольку автор - то хочется попросить модеров снести тол что было ниже.

Конкретно Вам:

1. Вопрос был задан по-существу. И он - как ни странно, основной. "Хто будет рулить?"
Варианты ответа:
а) программисты (DBA + прикладник) -- в этом случае "проблем ваще нет" - добавляем, переделываем структуру данных, приложения, наворачиваем фильтры, валидаторы, интерфейсы, связи со старыми данными и т.д. От этого "поклона" дорогим и любимым говнокодерам (как тем так и другим) и хочется уйти совсем. Причем всем и давно. ;)

б) пользователь -- и? куды Вы от EAV денетесь? :) Недостатки хорошо изучены, и Вы правы: тормоза системы на больших данных/нагрузках. И даже mumps не спасение. Вот как раз тут, могут быть гибридные решения: что-то в основных структурах (фиксированно), что-то туда динамически лезет (что надо быстро И позволяет обходится имеющимися ТИПОВЫМИ интерфейсами), что-то чистым EAV.

в) ал-ля ЦМС - метаструктуры, метапрограммирование... всё это хорошо, когда есть готовые (читай типовые) интерфейсы использования... а когда их нет?
Как к примеру, пользователь, добавив к сущности пользователя (под)колонку: "Образование"->"ВУЗ"->"специальность"(ид строки справочника "Специальности ВУЗОВ") может привязать обработку валидатором с проверкой наличия данной специальности в данном ВУЗе в заданный период обучения ... БЕЗ шаманства и п."а"? только силами ЦМС? Или сгенерит событие-уведомление всем, пользователям, которые имеют тот же самый ВУЗ уведомление о добавлении "однокурсника" (ишо период обучения совпадать должон)? Или ... Всё что он сможет сделать ... должно быть заранее реализовано в ЦМС или создаем ещё один "метаязык" и обучаем новых "метаговнокодеров". Круг замкнулся.

И ведь это не единственные проблемы ... их тыщи! ;)

Так вот, несмотря на свой недостаток (он практически единственный) - EAV позволяет динамически наращивать структуры данных ручками самих пользователей... впрочем и обработки тоже.
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37955432
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Как к примеру, пользователь, добавив к сущности пользователя (под)колонку: "Образование"->"ВУЗ"->"специальность"(ид строки справочника "Специальности ВУЗОВ") может привязать обработку валидатором с проверкой наличия данной специальности в данном ВУЗе в заданный период обучения ... БЕЗ шаманства и п."а"? только силами ЦМС? Или сгенерит событие-уведомление всем, пользователям, которые имеют тот же самый ВУЗ уведомление о добавлении "однокурсника" (ишо период обучения совпадать должон)? Или ... Всё что он сможет сделать ... должно быть заранее реализовано в ЦМС или создаем ещё один "метаязык" и обучаем новых "метаговнокодеров". Круг замкнулся.Какой-то сумбур во всей это фразе. Попробуйте немного свою мысль структурировать и объясните, что из вами перечисленного делается в EAV без программирования и почему это нельзя точно также без EAV сделать.
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37955465
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109Как к примеру, пользователь, добавив к сущности пользователя (под)колонку: "Образование"->"ВУЗ"->"специальность"(ид строки справочника "Специальности ВУЗОВ") может привязать обработку валидатором с проверкой наличия данной специальности в данном ВУЗе в заданный период обучения ... БЕЗ шаманства и п."а"?
С вами во всем согласен.
Ессно, фраймворк для конечного пользователя должен иметь (и имеет) язык выражений - числовых, символьных, булевых и т.д.
Механизм валидации, подстановки и пр. по выражениям встраивается в экранный интерфейс.
...
Рейтинг: 0 / 0
EAV варианты реализаций.
    #37955482
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat1091. "Двухуровневое решение" - к таблице сущности (товар, посетитель) добавляет простую таблицу "ид_сущности, имя_параметра - строка_значение"


строка_значение -- не катит никак.
Нарушение доменной целостности данных в самом ядре БД?
Ни тебе нормальных индексов, ни тебе нормальных операций с полем.

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


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