powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / виртуализация EAV против native create table
25 сообщений из 71, страница 1 из 3
виртуализация EAV против native create table
    #35913716
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предыдущая моя тема выдохлась.
http://sql.ru/forum/actualthread.aspx?tid=653190

Но зато она позволила лучше сформулировать эту тему.
Вопросы EAV были но вот так в лоб конкретно вопрос никогда не ставился.

EAV против native create table

Немного расшифровки
Для возможности создавать динамически изменяемые таблиц что лучше
Использовать частично или полностью EAV (ну или вообще какую то другую виртуализацию типа мусорных таблиц) или использовать простой create table (прямой или косвенный через какое то метаописание типа orm или xml)

Данная возможность нужна скорее не для конечного пользователя а например для модератора или администратора системы то есть человека в какой то степени квалифицированного.

Прошу всех высказывать аргументы только за и против. одного из подходов.
Если бы возможно было бы создать голосования я его создал бы здесь. Дополнительно. Ну можете написать за какой подход вы.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913860
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже, намеков Вы не понимаете. ОК, прямым текстом: Ваши варианты - оба - кривой кусок дерьма. Увы. Одно дерьмо лучше другого быть не может.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913866
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621,

честность ценю. И какой же есть третий вариант ?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913875
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Foxluck,

Ну Волга же лучше Запорожца :)
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913930
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно освежу тему новой информацией.
Вот я юзаю такой популярный фреймворк как django

Если кто не в курсе у Django есть ORM.
как он работает.

Мы создаем модели (классы). И далее работаем с экземплярами этих классов то есть объектами. Причем поддерживаться и наследование. и много чего еще.

Как эти объекты представлены на физическом уровне.
это просто таблицы.

то есть выполняя
команду
manage.py syncdb

Происходит
много
create table если конечно сущности еще не были созданы.

И вот например есть объект
User - этот класс нужен не изменным так как он используеться в модуле авторизации

Но мне нужен User со своими дополнительными полями.

Вот он случай когда пользователю нужны свои дополнительные поля.
Там есть два варианта как это решаеться это profile (не буду о нем сейчас) и более интересный который я использую наследование от User
То есть я делаю

class CustomUser(User):
....

физически
при manage.py syncdb
создается еще одна таблица.

Как я это вижу тут именно избран подход. create table и он неплохо работает.
Но кто то может сказать что это не тоже самое. Может быть буду услышать рад аргументацию.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913943
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> третий вариант

Их не три, их сильно больше. Вы пытаетесь технический прием (в данном случае структуру данных) использовать как универсальный паттерн. Таки нет, это плохой путь. Поищите аналогичные обсуждения, схемы не найдете, но все основные идеи сформулированы.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914014
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621,

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

Ну вот есть если какое это метаописание но на физическом уровне это либо create table либо EAV.

Гибридное решение с xml где в одно дополнительное поле сохраняются все дополнительные поля.
это компромиссная ситуация.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914129
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> к сожалению все эти подходы сводяться по сути к двум

К двум десяткам, Вы хотели сказать?

Ваша проблема в том, что Вы отталкиваетесь от реализации (Django - отличный фреймворк, спору нет, но структура данных - это отдельная задача), совершенно забывая о данных. Набор атрибутов - это набор _связанных_ атрибутов, в противном случае это каша из данных. Разница в реализации сводится к разнице обеспечения целостности и непротиворечивости данных в условиях, когда стандартными реляционными механизмами целостность и непротиворечивость обеспечить невозможно.

Самый простой вариант реализации - это семантическая типизация атрибутов + примитивные конструктивы. Ну то есть: не у телевизора диагональ 32", а у ЭЛТ или панели. Трубки и панели различаются и особенностями техпроцесса, и собственно разными основными физическими процессами. Согласитесь, нетрудно установить семантическую связь между набором конструктивов, их характеристиками и изделиями. Причем, для практического применения таких конструктивов будет относительно немного, часть будет универсальна (физические характеристики, источники питания). Даже если для их описания использовать примитивные структуры типа EAV, Вы уже имеете элементы связей, которые примитивно же решают часть задачи (целостность и непротиворечивость).
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914416
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> к сожалению все эти подходы сводяться по сути к двум

К двум десяткам, Вы хотели сказать?



Перечислите на вскидку сколько все вспомните ?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914534
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Перечислите на вскидку сколько все вспомните ?

Типизация на основе:
- BOM,
- семантических конструкций любого рода,
- моделей,
- процессов,
- комбинации перечисленных способов.
Метамодели, метаметамодели.

Плюс вариации типа реализации единиц измерений, справочников, строгой типизации атрибутов и пр. нюансы.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914724
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621,

Пришли к метаописаниям.. :) Да наверное в случае метаописаний виртуализация оправдана. Ведь в этом случае субд выступает тупо в роли физического носителя. чуть более комфортного чем файлы. Кое что доходит стало
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914786
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Пришли к метаописаниям..

Это хороший вариант. Реализация как правило хм... требует некоторых нестандартных навыков, хотя никаких особых сложностей нет.

> Кое что доходит стало

Рад, что писал не напрасно.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915096
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluckguest_20040621,

Пришли к метаописаниям.. :) Да наверное в случае метаописаний виртуализация оправдана. Ведь в этом случае субд выступает тупо в роли физического носителя. чуть более комфортного чем файлы. Кое что доходит стало
Можно сделать так что бы этого не было. Немного избыточности и все.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915408
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> Для возможности создавать динамически изменяемые таблиц что лучше
> Использовать частично или полностью EAV (ну или вообще какую то другую
> виртуализацию типа мусорных таблиц) или использовать простой create
> table (прямой или косвенный через какое то метаописание типа orm или

В работающей БД DDL-я быть не должно (только как административные
задачи и апгрейды). Таким образом, ТОЛЬКО EAV.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915418
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> честность ценю. И какой же есть третий вариант ?

Ну, третий - сделать БД так, чтобы вам не нужно было бы менять
её структуру. Т.е. просто отказаться от этого.

Но EAV на самом деле ничем не плох, просто есть особенности --
трудно писать запросы (ну как трудно -- трудно привыкнуть, потом
легче будет, чем писать даже на обычных структурах, так как
структура самой БД маленькая, и все запросы -- только к ней),
неприменимы всякие стандартные тулзы типа отчётников, QBE,
построителей запросов, и очень сложно писать аналитические запросы.
Собственно, по одной причине - аналитические запросы и так обычно
сложны, а с EAV эта сложность возводится в некую степень так, что
общая сложность становится вообще неприемлимой.

Наверное тебя уже отсылали к статье Анатолия Тенцера.
Почитай, она хорошая.

Также, если боязно всё реализовывать на EAV, то можно
порекомендовать гибридную БД, где часть структуры создаётся
в обычной технике проектирования реляционных БД, а другая
часть, требующая возможности расширения атрибутов -- в виде
EAV. При этом одновременно один объект может иметь и обычные
атрибуты, и "динамические" через механизм EAV. Достоинства
очевидны -- это позволяет сочетать достоинтсва двух подходов
и одновременно избегать их недостатков. Но, естественно,
тут важно правильно всё спроектировать, иначе эффект может
быть обратным.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915444
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

Но EAV на самом деле ничем не плох, просто есть особенности --
трудно писать запросы (ну как трудно -- трудно привыкнуть, потом
легче будет, чем писать даже на обычных структурах, так как
структура самой БД маленькая, и все запросы -- только к ней),
неприменимы всякие стандартные тулзы типа отчётников, QBE,
построителей запросов, и очень сложно писать аналитические запросы.
Собственно, по одной причине - аналитические запросы и так обычно
сложны, а с EAV эта сложность возводится в некую степень так, что
общая сложность становится вообще неприемлимой.

Наверное тебя уже отсылали к статье Анатолия Тенцера.
Почитай, она хорошая.


Ерунда. К ЕАВ пишутся обычные запросы чере хранимку с имненм таблицы. Тенцер ТУТ не при чем воще.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915464
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QBE и печать просто.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915493
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
В работающей БД DDL-я быть не должно


Почему?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915614
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов пишет:

> Ерунда. К ЕАВ пишутся обычные запросы чере хранимку с имненм таблицы.

Я чё, писал что ли что не пишут ? И потом, селективные хранимые
процедуры есть не во всех СУБД, не забывай.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915617
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin пишет:

> В работающей БД DDL-я быть не должно
> Почему?

Транзакционный DDL - очень сложная и эксклюзивная
операция. Её нельзя давать пользователям в руки.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915705
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

а зачем мне ВСЕ СУБД????????????
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915706
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

ДА нежелательно
Админам тупым тоже
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915750
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов пишет:

> а зачем мне ВСЕ СУБД????????????
За тебя говорить не могу ...

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35916057
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
belugin пишет:

> В работающей БД DDL-я быть не должно
> Почему?

Транзакционный DDL - очень сложная и эксклюзивная
операция. Её нельзя давать пользователям в руки.

А ее и не надо им давать в руки. В руки они получают инструмент, который полностью контролирует их действия и работает в рамках требований к системе, предъявляя в том числе и свои требования к знаниям и квалификации пользователей, которые будут пользоваться таким инструментом. Здесь стоит только вопрос обоснованности такого инструмента и требования изменения структуры/логики в БД конечным пользователем продукта (естественно имеется ввиду ИТ специалист клиента, а не конечный лузер). В 99% случаев такая динамика используется разработчиками не по назначению - с мифической целью сделать супер пупер платформу, на которой конечный пользователь сам сможет рисовать себе нужные программы. 1% случаев - это или ERP или специфика пользователя. В таких случаях, если в основном требуется хранения данных без сложной обработки (тот же интернет магазин, складской учет и т.д.), EAV хорошее решение. Если требуется не только хранить изменяющиеся структуры данных, но и производить ряд операций над большими массивами данных (статистика, аналитика, автоматизированные расчеты и т.д.), то EAV будет плохим средством, ибо на выходе получим сложные запросы и тормоза, здесь уместнее закладываться на DDL для тех классов сущностей, у которых может изменяться структура.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35916792
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хоть кто то выступил на другой стороне ASCRUS

Про EAV мыши плакали и кололись но все равно жрали кактус :)
модель Тенцера я так понял это просто другое название

Для простейшего функционала может сойдет. Но в дальнешем мы создадим свою СУБД . А свою С
УБД сопаставимую с современными наверное сложно сделать.

Допустим мы отказались от хранения метанинформации EAV в обычной базе данных.

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


Ну вроде сейчас получается стандартом де факто для таких случаев является EAV. Какие то экзотические возможности есть (вроде документоориентированных субд например CoucheDB). но их наверное никто не сможет порекомендовать или сможет?

У нас есть проблемы с тем что у нас рел. субд оперирует четко типизированными объектами.

ddl вроде и изменяет тип сущностей и создает новые

По поводу того что страшно давать пользователю create table
но мы отдаем не весь ddl а только определенные частные случаи.
Да и не всякому пользователю мы дадим такие права только доверенным лицам.
Да может мне и самому так удобнее будет расширять систему. Можно сказать мой девелоперский иструмент дополнительный.


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


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