powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вопрос по NHibernate и проектированию структуры БД с учетом наследования
20 сообщений из 70, страница 3 из 3
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36849204
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант 1 и 3 чатные случаи варианта 2
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36849322
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barserСкажите, пожалуйста, какие могут быть 'подводные камни' при следующей организации таблиц БД.
(используется СУБД Oracle 11, NHibernate 2.1)

Основная таблица 'documents' содержит поля, общие для всех видов документов. Например, 'дата создания', 'автор' и т.п.

На уровне приложений работа ведется с экземплярами подклассов документа (например, 'документ-договор' или 'документ-распоряжение').

Каждому подклассу в БД соответствует своя таблица, одно из полей которой - ссылка на id документа в таблице documents. Словом, реализована так называемая схема наследования 'table-per-subclass' (как в учебниках).

Пока всё работает как нужно, но на данный момент существует не так много подклассов документов. Меня интересует, что может произойти при росте их числа.

Конкретно - настораживает следующее:
типичный запрос
Код: plaintext
CreateCriteria(typeof(Document)).SetFirstResult(1).SetMaxResult(20).List()
транслируется в SQL-запрос с join'ами таблицы основного класса и всех таблиц подклассов.
При добавлении подкласса соответственно добавится еще один inner join.

В принципе, мне кажется для конкретных ситуаций можно будет добавить методы в репозитории документов, не использующие эти join'ы, но хотелось бы знать, чего ожидать, может, не стоит вообще 'париться'... Или наоборот придется полностью менять модель данных?
Кто-нибудь наверняка же проходил через подобный этап в проектировании/разработке.

p.s. На уровне модели данных объединение всех типов документов базовым классом 'document' весьма удобно и представляется мне правильным.
На всякий случай добавлю, что разрабатываемый продукт не относится к OLTP-системам (наверное, это уже и так понятно :) )

Повторюсь, используется СУБД Oracle 11g. Может быть, гуру подскажут, существенные особенности реализации inner join в нём. Когда идет, например, выборка единственной строки по конкретному id, но с n inner join'ами ( в n-1 из которых строки 100% не будет)... Или вариант с 'пэйджингом' - когда на странице отображается около 20 документов различных подклассов.

Спасибо!

Вот здесь был спор но только для MS SQL
http://www.sql.ru/forum/actualthread.aspx?tid=405678&hl=%ee%ee%ef

Ничего страшного в такой структуре не нашли, главное правильно спланировать.
У нас вот уже два года, как система с такой структурой внедрена, тоже MS SQL, и проблем пока не видно, подклассов больше 50. Размер базы около 1 Гб, конечно не много, но тормозов не наблюдается.
Соответственно, если грамотно подойти к проектированию, все будет нормально. Единственное мы не использовали Хибирнейт. Используем хранимые процедуры для доступа к данным, к классам документов.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36849688
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barserТеперь есть 2 варианта с введением Категорий (МСУ). Так, на диаграмме 2 первый из них. "Базовый документ", от которого наследуются "Категории" может и отсутствовать, но тогда во всех категориях будут иметься схожие технические поля - такие как "автор документа", "дата создания", "дата регистрации"...
Да поймите же, наконец, что Вы в будущем можете отхватить такую категорию документов, которой не нужны поля базового документа!
P.S. Не нужно скрещивать ООП в организации хранилища - это разные вещи.

Мой вариант в аттаче. Под DML понимается скрипт, который может сгенерить сгенерить категорию. То есть, изначально, к примеру, в системе документооборота проинсталлированы 5 категорий. Но можно доустановить еще 4, доступные в DML. 2, 3 и т.д. уровни DML - это отношения мастер таблцы с детальными таблицами: M => D1 => D2 => D3 => ...
На практике достаточно 1 уровня (M => D1), но в принципе, никто не может нас ограничить заложиться еще под парочку уровней вложенностей.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36849690
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosтфу, вариант 2
и нафиг какие то базовые типы, собственно тип классифицируется множественно
+1 миллион!

P.S. Сахават, просто нектором сильно мозг свернули ООП'ие заморочки. Вот они это уже и БД тянут
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850067
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

вот общая схема типизации объектов.
Идентификационный пул (Ид, ТипИд(опционально), Наименование(опционально))->
Тип(Ид, ТипИД, .....) -> МножественныйКлассификатор(....ТипИд, ...) -> Нетипизировынные свойства(Ид, СвойствоИД, значение)

Тип и Свойства содержат метаданные.
Объект оздается из иденификациооного пула. Ели надо то типизируется (т.е., получает статические свойства). В пул вносится сооветствующий ТипИд для данного объекта.
Тип классифицируется множественным образом по ролям (т.е. типизированные объекты получают динамические свойства со статическим значением = ИдКлассификатора + ИдВсехРодителейЭтойВетки).
Далее объект по мере нужды получает динамические свойства в Нетипизировынные свойства(Ид, СвойствоИД, значение).
По мере разрастания последнего до полного домена ИДов Типа происходит миграция динамических свойств в Тип.

Не знаю понятно ли обяснил. :(
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850089
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНе знаю понятно ли обяснил. :(
Запутанно. Нарисуйте понятную доменную модель с классами. Или просто на самом низком уровне - логическую схему.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850201
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barser,

физическая модель


Думаю, комментарии излишни. Остаётся лишь выбрать более понравившуюся принципиальную схему :)
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850251
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000У нас вот уже два года, как система с такой структурой внедрена, тоже MS SQL, и проблем пока не видно, подклассов больше 50. Размер базы около 1 Гб, конечно не много, но тормозов не наблюдается.

:)

P.S. Я бы понимаю, если бы сказали о размере 1Тб (ну, ладно, - хотя бы уж 100Гб) - я еще понял. Но про 1 Гб можно было бы промолчать. Чисто ради приличия
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850258
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

не могу диаграмму скопировать в Paint имена таблиц становятся ????? русские там
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850314
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ, не могу диаграмму скопировать в Paint имена таблиц становятся ????? русские там

FastStone Capture рулит.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850327
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУViPRosМСУ, не могу диаграмму скопировать в Paint имена таблиц становятся ????? русские там
FastStone Capture рулит.
Но, если есть Word - копируйте в ворд, там кодировка нормально воспринимается. Попробуйте.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850331
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНо, если есть Word - копируйте в ворд, там кодировка нормально воспринимается. Попробуйте.
А потом, разумеется, обратно из ворда в Paint.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850402
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

FastStone взял кое как
Ну, покритикуй. (Классификатор, макроклассификатор с типами и макротипами через триггеры)
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850438
МСУViPRosтфу, вариант 2
и нафиг какие то базовые типы, собственно тип классифицируется множественно
+1 миллион!

P.S. Сахават, просто нектором сильно мозг свернули ООП'ие заморочки. Вот они это уже и БД тянут

Это ты нам сейчас продемострировал в своей диаграмме.
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850485
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosFastStone взял кое как
Не правильно. Нажмите скроллинговый снапшот: кнопочка со стрелочкой (capture scrolling window), и будет щастье. Переделывайте!
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850495
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНу, покритикуй.
Саха, мы дискутируем не за универсальные классификаторы с динамик типами
Нам не нужен конструктор, нам нужно хранилище документов в системе документооборота, классифицирующееся по некому абстрактному правилу (назовем его категорией). И всё :)

P.S. Опять Вы лезете со своими скринами не в ту степь )
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850535
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ну я так и делал, он берет только вертикальный скролл
ну там вся информация о метамодели
пркладная модель автоматически генерируется из нее
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850564
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

во блин два года не даешь поставить людей на истинный путь - создать универсальную БД :)
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850570
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ, ну я так и делал, он берет только вертикальный скролл
Да, работает в вертикальным. Очень удобно скринить с двумя мониторами - растянуть окно на два монитора и скринить. Тогда красиво получается. Купите себе еще один монитор :)

ViPRosну там вся информация о метамодели
пркладная модель автоматически генерируется из нее
Слово "мета" - в топку. Она не нужна и речь о ней не идёт. То, что я привёл (поле DML) - рюшечка, которая ТС'у скорей всего не понадобится :)
...
Рейтинг: 0 / 0
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
    #36850573
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМСУ, во блин два года не даешь поставить людей на истинный путь - создать универсальную БД :)
Удар по производительности. Нам хватило 1С с её мета-генерацией, хватит, хлебнули :)
...
Рейтинг: 0 / 0
20 сообщений из 70, страница 3 из 3
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вопрос по NHibernate и проектированию структуры БД с учетом наследования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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