powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Наследование атрибутов
25 сообщений из 77, страница 3 из 4
Наследование атрибутов
    #33211306
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как насчет фильтров на дополнительные поля или сортировки по таким полям? Мы рассматривали такой вариант, как хранение всех атрибутов в текстовом виде в xml, но он кучу подобного рода ограничений накладывает.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211311
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladiChСуществующие средства маппинга работают по всем трем вариантам + их вариации, но они нам все не очень подходят, т.к. в нашей системе помимо маппинга хранятся свои метаданные, которые могут изменяться из приложения + не для каждого типа требуется своя таблица (если все атрибуты типа - т.н. "статические"). То есть это комбинация стандартного маппинга с class table inheritance и хранением метаданных как объектов системы и хранением всех "статических" атрибутов всех объектов в отдельной таблице.
Метаданные здесь стоят перпенидикулярно.
Если вы сами в силах карандашом на бумажке для каждого атрибута класса написать однозначное соответствие атрибут --> (таблица, поле), то все то же самое можно сделать и в файле описания маппинга.
Поскольку у вас обратный инжиниринг, то понадобятся всякие вспомогательные классы и неочевидные на уровне БД иерархии и ассоциации.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211312
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если сериализовать каждый атрибут как отдельную строку в некой таблице - получается то же самое, что сейчас есть. Других вариантов сериализации я пока не вижу.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211321
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Templar.
Совсем не перпендикулярно.
Метаданные тут к тому, что они могут меняться в процессе работы приложения, при этом не меняется структура базы данных (т.к. меняться могут только текстовые атрибуты, которые хранятся по-другому, не так как остальные). И конечно это делается без перекомпиляции приложения и ручной настройки маппинга. Получается что обратный инжениринг в этом случае перпендикулярен. Прочитайте внимательнее то, что я об этом писал, если что непонятно - объясню подробнее.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211323
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы рассматривали такой вариант, как хранение всех атрибутов в текстовом виде в xml, но он кучу подобного рода ограничений накладывает

да нет же, не в виде xml хранить, а в виде все той же структуры таблиц объек-атрибут-значение, запросов соответственно для получения данных будет несколько.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211324
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело, что для части атрибутов я могу написать на бумажке соответствие атрибут -> поле в таблице, а для части атрибутов соответствие будет атрибут -> строка в таблице.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211327
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
Мы рассматривали такой вариант, как хранение всех атрибутов в текстовом виде в xml, но он кучу подобного рода ограничений накладывает

да нет же, не в виде xml хранить, а в виде все той же структуры таблиц объек-атрибут-значение, запросов соответственно для получения данных будет несколько.
И чем это тогда будет отличаться от того, что есть сейчас?
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211330
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вы что вообще тогда хотите получить? :)
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211337
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут спор вообще-то начался из-за того, что мне посоветовали не заниматься ерундой и выбрать существующее ORM-средство. И я уже половину топика объясняю, почему это будет неудобно.
Вот и вы мне тут объясняете что-то, а в результате пришли к тому, что уже сейчас реализовано :)
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211382
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...в свое время причиной отказа от существующих orm-средств для меня послужило отсутствие нормального маппинга на хп.
...
Описанную вами задачу может решить не средство orm, а скорее средство MDA, Bold например, но в данном случае вы отказываетесь от ручной поддержки структуры БД и возлагаете эту миссию на MDA средство которое по UML-диаграмме контролирует структуру данных . как следствие отпадает необходимость существования структуры объект-атрибут-значение.
При этом конечный пользователь управляет моделью UML, а не создает атрибуты из какого-либо интерфейса приложения.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211403
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расслабьтесь, сама задача в том объеме, в котором была описана, уже решена :).
Изначально топик создавался для того, чтобы прикинуть, что получится с этим решением при больших объемах данных (просто некоторые подозрения возникли, которые мне тут благополучно развеяли :)).
MDA - это конечно хорошо, но UML-диаграммы - это слишком круто для обычного пользователя. Да и не для обычного тоже мне кажется проще реализовать изменение структуры данных в своем конфигураторе.
В нем можно в принципе незначительно менять и структуру БД - для обычных атрибутов и редактировать описание связей. Это пока не реализовано, но я думаю будет следующим шагом.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211413
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У варианта с дополнительными атрибутами в отдельной таблице есть еще одно преимущество по сравнению с хранением атрибутов разных типов в разных таблицах - это возможность сквозного текстового поиска по всем типам данных без использования средств типа full-text search. Другими средствами организовать это довольно проблематично. Ну и еще одно преимущество - это собственно изменение структуры данных без изменения структуры БД.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211535
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня это уже реализовано :-)
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33211854
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladiCh
Вопросы:
Насколько будет замедляеться вставка в таблицу, при возрастании количества отношений один-к-одному к ней?


Кол-во дочерних классов - это кол-во FK на родительскую таблицу.
Чем больше их, тем больше серверу проверять. Но если в дочерних
есть индекс на ссылающееся поле ( а он будет, ибо это - ПК дочерней таблицы), то практически замедления никакого не будет, ибо - индексный поиск, O(log(n)).
Но самое главное - это все не для операций вставки , а для операций удаления. При вставках у вас эти FK проверяться не будут.
Так что просто никакого влияния это не оказывает на создание экземпляров классов-братьев. А вот другое дело - вставка в родительскую таблицу всегда будет узким местом, его нужно грамотно уметь разводить, но это уже детали реализации, в основном, СУБД.

VladiCh
Насколько быстро выполняется выборка из таблиц, связанных по ключу при отношении один-к-одному (скажем по отношению к один-ко-многим - также, быстрее, медленнее)?


Пофигу. Т.е. сам JOIN пофигу, а так естественно, чем больше записей генерирует запрос за счет "один-ко-многим" - тем медленнее выборка.
Просто потому что записей больше. На практике join-ы у нас вообще никогда не тормозили, хоть в иерархии было по 10 уровней иногда.

VladiCh
Насколько серьезно все это будет тормозить при возрастании количества данных?

Не более серьезно, чем в обычной БД с обычными таблицами (в смысле без применения наследования). Просто вообще никакой разницы.
Но вообще log(n) - он рулит!!

VladiCh
Интересует опыт людей, работавших с аналогичными структурами данных, субъективная оценка.

Опыт есть огромный в данном вопросе, он в общем согласуется с тем, что я написал.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33213126
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladiCh2Templar.
Совсем не перпендикулярно.
Метаданные тут к тому, что они могут меняться в процессе работы приложения, при этом не меняется структура базы данных (т.к. меняться могут только текстовые атрибуты, которые хранятся по-другому, не так как остальные). И конечно это делается без перекомпиляции приложения и ручной настройки маппинга. Получается что обратный инжениринг в этом случае перпендикулярен. Прочитайте внимательнее то, что я об этом писал, если что непонятно - объясню подробнее.
У вас что, атрибуты хранятся вертикально?
Тогда это нереляционная модель, а потому ORM не подходит по определению.
Если сможете вначале свою доморощенную модель привести к реляционной, например, с помощью проекций, тогда все получится.
P.S. Присоединяюсь к MasterZiv, особенных проблем нет.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33213297
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часть атрибутов горизонтально, часть вертикально.
Насчет того что нереляционная модель - это вы конечно загнули...
Вполне реляционная, просто часть атрибутов выбирается одной строкой, а часть списком.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33213700
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>>У вас что, атрибуты хранятся вертикально

Templar,
тут ядро для всех модулей - горизонтально, а расширенные атрибуты - вертикально.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33213779
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынниктут ядро для всех модулей - горизонтально, а расширенные атрибуты - вертикально.
Теперь ясно :)
Тоже проецируется без особых проблем. Расширенные атрибуты идут как коллекция объектов класса "Атрибут" и иже с ним.

VladiCh, это НЕреляционная структура.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33213809
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да понятно, что в принципе проецируется, любую реляционную БД во что-нибудь объектное можно спроецировать, вопрос в том, насколько потом с этим удобно будет работать :). Если поставить своей задачей во чтобы то ни стало заставить работать с такой структурой например nHibernate, я думаю, что такую задачу можно решить, но толку от этого будет мало.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33213855
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Templar.
1. На уровне логики приложения нет разделения на обычные - нерасширенные атрибуты. Об этом знает только слой доступа к данным. В случае с ORM слой доступа к данным находится внутри (ORM), поэтому придется вводить еще один слой, делающий прозрачным обращения к атрибутам любого типа.
2. Если реализовывать это предлагаемым вами способом, даже банальная загрузка атрибутов для коллекции объектов будет менее эффективной, чем специализированное решение, а про загрузку с различными сортировками / фильтрами по "расширенным" атрибутам и говорить нечего. Стандартные ORM-средства для таких задач неприспособлены и если их все-таки прикрутить, то эффективность генерируемых ими запросов будет весьма низкая.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33231722
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladiCh2. Если реализовывать это предлагаемым вами способом, даже банальная загрузка атрибутов для коллекции объектов будет менее эффективной, чем специализированное решение, а про загрузку с различными сортировками / фильтрами по "расширенным" атрибутам и говорить нечего. Стандартные ORM-средства для таких задач неприспособлены и если их все-таки прикрутить, то эффективность генерируемых ими запросов будет весьма низкая.
Я об этом сказал в самом начале. У вас НЕреляционная структура с вертикальным хранением атрибутов. Поэтому не только ORM, где R - это relational, но и обычный SQL в качестве средства запросов будет неэффективным.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33233183
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Templar.
Не хотелось бы здесь много времени уделять доказательствам того, что более эффективно, что менее. Просто поверьте на слово, что если соответствующим образом построить структуру базы данных и спроектировоать приложение, то запросы на выборку таких атрибутов будут довольно эффективными, а в некототрых случаях даже эффективнее, чем запросы на выборку из таблиц с горизонтальным хранением атрибутов. Например, при выборке коллекции, в которых содержатся разнородные объекты, в случае с вертикальным хранением, мне вернется один рекордсет, с горизонтальным столько, сколько типов объектов находится в коллекции, т.е. теоретически неограниченное количество. Да, структура нереляционная, если ее рассматривать с вашей точки зрения, как набор обычных атрибутов объектов. Если же представить, что все вертикально хранимые атрибуты - это просто некие сериализованные XML-данные объекта, то структура вполне реляционная. Как они представляются в приложении - это другой вопрос. Все зависит от точки зрения.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33233190
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, еще по поводу эффективности. В общем случае SQL в качестве языка запросов к таким данным будет менее эффективен. Но у нас на уровне бизнес-логики и не используется SQL, используется свой довольно простой язык запросов, который транслируется в довольно эффективный для данной структуры SQL. Да, он менее гибкий и гораздо более проостой, чем SQL, но нашим требованиям вполне удовлетворяет.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33234057
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый VladiCh,
при вертикальном хранении SQL в принципе не может быть эффективнее, т.к. требует большего числа joins. Если у вас чистый OLTP, то это не помеха. Если хотя бы несложные поиски со связыванием 3-5 сущностей, то соедиений будет не 3-5, а 9-15.
Вы пошли по пути содзания собственной надстройки, это один из вариантов.
Другой вариант - максимальное использование стандартных средств. Наприиер Роман вам предлагал раскрутить данные в реляцонную форму (например, через view) и далее по известной методе.
Никто не говорит, что первый вариант плох или наоброт. Какой вариант оптимальнее в ваших условиях - вам и решать.
...
Рейтинг: 0 / 0
Наследование атрибутов
    #33237601
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связывание сущностей у нас производится только по горизонтально хранимым атрибутам. Вертикально хранимые, как я уже говорил, вспомогательные, и 90% из них - текстовые. Поиск и сортировка производится по вертикально хранимым атрибутам точно также как и по горизонтально хранимым без дополнительных накладных расходов. К чему я это все говорю - к тому, что при правильном использовании нашей модели (вертикально + горизонтально хранимые атрибуты) - т.е. с определенными ограничениями + использование адаптированной под эту структуру надстройки, потерь производительности по сравнению с горизонтально хранимыми атрибутами почти не будет, зато появляются определенные преимущества, про которые я тоже писал выше.
...
Рейтинг: 0 / 0
25 сообщений из 77, страница 3 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Наследование атрибутов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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