|
|
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Предыдущая моя тема выдохлась. http://sql.ru/forum/actualthread.aspx?tid=653190 Но зато она позволила лучше сформулировать эту тему. Вопросы EAV были но вот так в лоб конкретно вопрос никогда не ставился. EAV против native create table Немного расшифровки Для возможности создавать динамически изменяемые таблиц что лучше Использовать частично или полностью EAV (ну или вообще какую то другую виртуализацию типа мусорных таблиц) или использовать простой create table (прямой или косвенный через какое то метаописание типа orm или xml) Данная возможность нужна скорее не для конечного пользователя а например для модератора или администратора системы то есть человека в какой то степени квалифицированного. Прошу всех высказывать аргументы только за и против. одного из подходов. Если бы возможно было бы создать голосования я его создал бы здесь. Дополнительно. Ну можете написать за какой подход вы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 10:35 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Похоже, намеков Вы не понимаете. ОК, прямым текстом: Ваши варианты - оба - кривой кусок дерьма. Увы. Одно дерьмо лучше другого быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 11:17 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
guest_20040621, честность ценю. И какой же есть третий вариант ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 11:18 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Foxluck, Ну Волга же лучше Запорожца :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 11:19 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Ладно освежу тему новой информацией. Вот я юзаю такой популярный фреймворк как django Если кто не в курсе у Django есть ORM. как он работает. Мы создаем модели (классы). И далее работаем с экземплярами этих классов то есть объектами. Причем поддерживаться и наследование. и много чего еще. Как эти объекты представлены на физическом уровне. это просто таблицы. то есть выполняя команду manage.py syncdb Происходит много create table если конечно сущности еще не были созданы. И вот например есть объект User - этот класс нужен не изменным так как он используеться в модуле авторизации Но мне нужен User со своими дополнительными полями. Вот он случай когда пользователю нужны свои дополнительные поля. Там есть два варианта как это решаеться это profile (не буду о нем сейчас) и более интересный который я использую наследование от User То есть я делаю class CustomUser(User): .... физически при manage.py syncdb создается еще одна таблица. Как я это вижу тут именно избран подход. create table и он неплохо работает. Но кто то может сказать что это не тоже самое. Может быть буду услышать рад аргументацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 11:36 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
> третий вариант Их не три, их сильно больше. Вы пытаетесь технический прием (в данном случае структуру данных) использовать как универсальный паттерн. Таки нет, это плохой путь. Поищите аналогичные обсуждения, схемы не найдете, но все основные идеи сформулированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 11:39 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
guest_20040621, к сожалению все эти подходы сводяться по сути к двум. это использовать виртуализацию или нет. то есть пользоваться всеми встроенными возможностями базы или использовать только базовые для построение своих средств. Ну или еще какое то компромиссный случай когда одновременно и то и другое используется. Ну вот есть если какое это метаописание но на физическом уровне это либо create table либо EAV. Гибридное решение с xml где в одно дополнительное поле сохраняются все дополнительные поля. это компромиссная ситуация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 11:58 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
> к сожалению все эти подходы сводяться по сути к двум К двум десяткам, Вы хотели сказать? Ваша проблема в том, что Вы отталкиваетесь от реализации (Django - отличный фреймворк, спору нет, но структура данных - это отдельная задача), совершенно забывая о данных. Набор атрибутов - это набор _связанных_ атрибутов, в противном случае это каша из данных. Разница в реализации сводится к разнице обеспечения целостности и непротиворечивости данных в условиях, когда стандартными реляционными механизмами целостность и непротиворечивость обеспечить невозможно. Самый простой вариант реализации - это семантическая типизация атрибутов + примитивные конструктивы. Ну то есть: не у телевизора диагональ 32", а у ЭЛТ или панели. Трубки и панели различаются и особенностями техпроцесса, и собственно разными основными физическими процессами. Согласитесь, нетрудно установить семантическую связь между набором конструктивов, их характеристиками и изделиями. Причем, для практического применения таких конструктивов будет относительно немного, часть будет универсальна (физические характеристики, источники питания). Даже если для их описания использовать примитивные структуры типа EAV, Вы уже имеете элементы связей, которые примитивно же решают часть задачи (целостность и непротиворечивость). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 12:22 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
guest_20040621> к сожалению все эти подходы сводяться по сути к двум К двум десяткам, Вы хотели сказать? Перечислите на вскидку сколько все вспомните ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 13:45 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
> Перечислите на вскидку сколько все вспомните ? Типизация на основе: - BOM, - семантических конструкций любого рода, - моделей, - процессов, - комбинации перечисленных способов. Метамодели, метаметамодели. Плюс вариации типа реализации единиц измерений, справочников, строгой типизации атрибутов и пр. нюансы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 14:22 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
guest_20040621, Пришли к метаописаниям.. :) Да наверное в случае метаописаний виртуализация оправдана. Ведь в этом случае субд выступает тупо в роли физического носителя. чуть более комфортного чем файлы. Кое что доходит стало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 15:22 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
> Пришли к метаописаниям.. Это хороший вариант. Реализация как правило хм... требует некоторых нестандартных навыков, хотя никаких особых сложностей нет. > Кое что доходит стало Рад, что писал не напрасно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 15:41 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Foxluckguest_20040621, Пришли к метаописаниям.. :) Да наверное в случае метаописаний виртуализация оправдана. Ведь в этом случае субд выступает тупо в роли физического носителя. чуть более комфортного чем файлы. Кое что доходит стало Можно сделать так что бы этого не было. Немного избыточности и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 17:38 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Foxluck пишет: > Для возможности создавать динамически изменяемые таблиц что лучше > Использовать частично или полностью EAV (ну или вообще какую то другую > виртуализацию типа мусорных таблиц) или использовать простой create > table (прямой или косвенный через какое то метаописание типа orm или В работающей БД DDL-я быть не должно (только как административные задачи и апгрейды). Таким образом, ТОЛЬКО EAV. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 20:32 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Foxluck пишет: > честность ценю. И какой же есть третий вариант ? Ну, третий - сделать БД так, чтобы вам не нужно было бы менять её структуру. Т.е. просто отказаться от этого. Но EAV на самом деле ничем не плох, просто есть особенности -- трудно писать запросы (ну как трудно -- трудно привыкнуть, потом легче будет, чем писать даже на обычных структурах, так как структура самой БД маленькая, и все запросы -- только к ней), неприменимы всякие стандартные тулзы типа отчётников, QBE, построителей запросов, и очень сложно писать аналитические запросы. Собственно, по одной причине - аналитические запросы и так обычно сложны, а с EAV эта сложность возводится в некую степень так, что общая сложность становится вообще неприемлимой. Наверное тебя уже отсылали к статье Анатолия Тенцера. Почитай, она хорошая. Также, если боязно всё реализовывать на EAV, то можно порекомендовать гибридную БД, где часть структуры создаётся в обычной технике проектирования реляционных БД, а другая часть, требующая возможности расширения атрибутов -- в виде EAV. При этом одновременно один объект может иметь и обычные атрибуты, и "динамические" через механизм EAV. Достоинства очевидны -- это позволяет сочетать достоинтсва двух подходов и одновременно избегать их недостатков. Но, естественно, тут важно правильно всё спроектировать, иначе эффект может быть обратным. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 20:41 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
MasterZiv Но EAV на самом деле ничем не плох, просто есть особенности -- трудно писать запросы (ну как трудно -- трудно привыкнуть, потом легче будет, чем писать даже на обычных структурах, так как структура самой БД маленькая, и все запросы -- только к ней), неприменимы всякие стандартные тулзы типа отчётников, QBE, построителей запросов, и очень сложно писать аналитические запросы. Собственно, по одной причине - аналитические запросы и так обычно сложны, а с EAV эта сложность возводится в некую степень так, что общая сложность становится вообще неприемлимой. Наверное тебя уже отсылали к статье Анатолия Тенцера. Почитай, она хорошая. Ерунда. К ЕАВ пишутся обычные запросы чере хранимку с имненм таблицы. Тенцер ТУТ не при чем воще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 20:59 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
QBE и печать просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 21:14 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
MasterZiv В работающей БД DDL-я быть не должно Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 21:33 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов пишет: > Ерунда. К ЕАВ пишутся обычные запросы чере хранимку с имненм таблицы. Я чё, писал что ли что не пишут ? И потом, селективные хранимые процедуры есть не во всех СУБД, не забывай. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 22:52 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
belugin пишет: > В работающей БД DDL-я быть не должно > Почему? Транзакционный DDL - очень сложная и эксклюзивная операция. Её нельзя давать пользователям в руки. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 22:54 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
MasterZiv, а зачем мне ВСЕ СУБД???????????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 23:30 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ДА нежелательно Админам тупым тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2009, 23:30 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов пишет: > а зачем мне ВСЕ СУБД???????????? За тебя говорить не могу ... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2009, 00:02 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
MasterZiv belugin пишет: > В работающей БД DDL-я быть не должно > Почему? Транзакционный DDL - очень сложная и эксклюзивная операция. Её нельзя давать пользователям в руки. А ее и не надо им давать в руки. В руки они получают инструмент, который полностью контролирует их действия и работает в рамках требований к системе, предъявляя в том числе и свои требования к знаниям и квалификации пользователей, которые будут пользоваться таким инструментом. Здесь стоит только вопрос обоснованности такого инструмента и требования изменения структуры/логики в БД конечным пользователем продукта (естественно имеется ввиду ИТ специалист клиента, а не конечный лузер). В 99% случаев такая динамика используется разработчиками не по назначению - с мифической целью сделать супер пупер платформу, на которой конечный пользователь сам сможет рисовать себе нужные программы. 1% случаев - это или ERP или специфика пользователя. В таких случаях, если в основном требуется хранения данных без сложной обработки (тот же интернет магазин, складской учет и т.д.), EAV хорошее решение. Если требуется не только хранить изменяющиеся структуры данных, но и производить ряд операций над большими массивами данных (статистика, аналитика, автоматизированные расчеты и т.д.), то EAV будет плохим средством, ибо на выходе получим сложные запросы и тормоза, здесь уместнее закладываться на DDL для тех классов сущностей, у которых может изменяться структура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2009, 09:48 |
|
||
|
виртуализация EAV против native create table
|
|||
|---|---|---|---|
|
#18+
Хоть кто то выступил на другой стороне ASCRUS Про EAV мыши плакали и кололись но все равно жрали кактус :) модель Тенцера я так понял это просто другое название Для простейшего функционала может сойдет. Но в дальнешем мы создадим свою СУБД . А свою С УБД сопаставимую с современными наверное сложно сделать. Допустим мы отказались от хранения метанинформации EAV в обычной базе данных. А хранить её например в файле. Пишем свой демон чтобы это как то висело в оперативной памяти , реализуем алгоритмы математических множеств типа декартово произведение ну или реализуем свои специфические какие-нибудь нечеткие множества :) , написать свой специфический язык запросов (как то надо управлять этим же) Ну вроде сейчас получается стандартом де факто для таких случаев является EAV. Какие то экзотические возможности есть (вроде документоориентированных субд например CoucheDB). но их наверное никто не сможет порекомендовать или сможет? У нас есть проблемы с тем что у нас рел. субд оперирует четко типизированными объектами. ddl вроде и изменяет тип сущностей и создает новые По поводу того что страшно давать пользователю create table но мы отдаем не весь ddl а только определенные частные случаи. Да и не всякому пользователю мы дадим такие права только доверенным лицам. Да может мне и самому так удобнее будет расширять систему. Можно сказать мой девелоперский иструмент дополнительный. По поводу проблем многотранзакционности интересное замечание. Ну могут быть какие то проблемы но тоже решаемые скорее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2009, 12:59 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35913930&tid=1543307]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 525ms |

| 0 / 0 |
