|
|
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Скажите, пожалуйста, какие могут быть 'подводные камни' при следующей организации таблиц БД. (используется СУБД Oracle 11, NHibernate 2.1) Основная таблица 'documents' содержит поля, общие для всех видов документов. Например, 'дата создания', 'автор' и т.п. На уровне приложений работа ведется с экземплярами подклассов документа (например, 'документ-договор' или 'документ-распоряжение'). Каждому подклассу в БД соответствует своя таблица, одно из полей которой - ссылка на id документа в таблице documents. Словом, реализована так называемая схема наследования 'table-per-subclass' (как в учебниках). Пока всё работает как нужно, но на данный момент существует не так много подклассов документов. Меня интересует, что может произойти при росте их числа. Конкретно - настораживает следующее: типичный запрос Код: plaintext При добавлении подкласса соответственно добавится еще один inner join. В принципе, мне кажется для конкретных ситуаций можно будет добавить методы в репозитории документов, не использующие эти join'ы, но хотелось бы знать, чего ожидать, может, не стоит вообще 'париться'... Или наоборот придется полностью менять модель данных? Кто-нибудь наверняка же проходил через подобный этап в проектировании/разработке. p.s. На уровне модели данных объединение всех типов документов базовым классом 'document' весьма удобно и представляется мне правильным. На всякий случай добавлю, что разрабатываемый продукт не относится к OLTP-системам (наверное, это уже и так понятно :) ) Повторюсь, используется СУБД Oracle 11g. Может быть, гуру подскажут, существенные особенности реализации inner join в нём. Когда идет, например, выборка единственной строки по конкретному id, но с n inner join'ами ( в n-1 из которых строки 100% не будет)... Или вариант с 'пэйджингом' - когда на странице отображается около 20 документов различных подклассов. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2010, 14:42 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
* хм... я там ошибся с типом объединения: вместо inner join везде left outer join ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2010, 15:24 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Меня тоже интересуте ответ на Ваш вопрос. Было бы хорошо написать что то вроде теста. Заполнить базу различными документыми и повыбирать их, замеряя время исполнения. А результатами потом можно поделиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2010, 15:00 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Alexey GorbachМеня тоже интересуте ответ на Ваш вопрос. Было бы хорошо написать что то вроде теста. Заполнить базу различными документыми и повыбирать их, замеряя время исполнения. А результатами потом можно поделиться. Обещать не стану, но если такой тест состоится, результатами поделюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2010, 15:54 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Очень не правильно в архитектурном плане раскидывать документы в отдельные таблицы в разрезе их типов. Во-первых, в плане оптимизации - ставим раком сервер при большом кол-ве документов, во вторых в плане расширяемости - нужно создавать новую таблицу под новый тип. Плюс только один - удобство хранения. Очень рекомендую, пока не позлно, перевести всё на одну таблицу и расширять атрибуты по надобности. В моей практике есть один горький опыт такой схемы... Потом очень жалели, но было поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2010, 18:21 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, Вы уволенынах! Очень не правильно в архитектурном плане раскидывать документы в отдельные таблицы в разрезе их типов. Очень правильно создавать модель данных наиболее приближенной к предметной области. С производительностью пусть железячники геморроятся. "Плюс только один - удобство хранения." Нет, нет и нет! Разные документы могут иметь разные связи и условия проверок! Никакие сложности разработки и расширяемости не могут оправдать разрушение логики модели. Иначе вместо того, чтобы защищать ваш проект от тяжелейших ошибок уровня бизнес-логики, БД будет лишь придатком воспаленного воображения разработчиков прикладных модулей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2010, 18:36 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУОчень не правильно в архитектурном плане раскидывать документы в отдельные таблицы в разрезе их типов. Во-первых, в плане оптимизации - ставим раком сервер при большом кол-ве документов, во вторых в плане расширяемости - нужно создавать новую таблицу под новый тип. Плюс только один - удобство хранения. Очень рекомендую, пока не позлно, перевести всё на одну таблицу и расширять атрибуты по надобности. В моей практике есть один горький опыт такой схемы... Потом очень жалели, но было поздно. Большое спасибо за ценное замечание. Фаулер, насколько помню, в "Архитектуре корпоративного ПО" давал схожую рекомендацию. Правда, сложности с установкой constraints not null на уровне БД появляются, а также люди, которые будут работать с базой на уровне MS access могут не понять фишки (ну, тут наверное дополнительные вьюхи смогут помочь)... На данном этапе разработки изменить способ хранения вполне реально, имхо... Вынесу это на обсуждение между участниками проекта на след. неделе. Еще раз спасибо! А может быть есть какое-то общее правило для выбора типа наследования? Когда что лучше подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2010, 18:46 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльМСУ, Вы уволенынах! Очень не правильно в архитектурном плане раскидывать документы в отдельные таблицы в разрезе их типов. Очень правильно создавать модель данных наиболее приближенной к предметной области. С производительностью пусть железячники геморроятся. "Плюс только один - удобство хранения." Нет, нет и нет! Разные документы могут иметь разные связи и условия проверок! Никакие сложности разработки и расширяемости не могут оправдать разрушение логики модели. Иначе вместо того, чтобы защищать ваш проект от тяжелейших ошибок уровня бизнес-логики, БД будет лишь придатком воспаленного воображения разработчиков прикладных модулей. Ну вот, мнения разделились... :) Как же найти разумный компромисс? Меня, честно говоря, несколько смущает обилие join'ов в запросах к сущностям, у которых имеется много наследников... Никак не могу об этом не думать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2010, 18:50 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУВ моей практике есть один горький опыт такой схемы... Потом очень жалели, но было поздно. Если Вас не слишком затруднит, не могли бы Вы хотя бы вкратце перечислить конкретные проблемы, возникновение которых заставило сожалеть о принятом архитектурном решении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2010, 18:55 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barser Меня, честно говоря, несколько смущает обилие join'ов в запросах к сущностям, у которых имеется много наследников... Никак не могу об этом не думать) Архитекторы оракла заявляют, что скорость доступа к двум полям "соединенных" таблиц такая же, как к двум полям одной таблицы. Вопросы производительности всегда будут возникать. Но это не значит, что ей в угоду мы должны впихивать невпихуемое "в одну таблицу". Производители СУБД и АС позаботятся о том, чтобы все возрастающие объемы информации не приводили к замедлению и остановке процессов обработки данных. Так, например, один из известнейших производителей СУБД создал систему с постолбцового хранения данных, взамен построчного. Теперь его СУБД работают с объемами в 50ТБ и не кашляют. А у Вас какие объемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2010, 19:37 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Курдльbarser Меня, честно говоря, несколько смущает обилие join'ов в запросах к сущностям, у которых имеется много наследников... Никак не могу об этом не думать) Архитекторы оракла заявляют, что скорость доступа к двум полям "соединенных" таблиц такая же, как к двум полям одной таблицы. Вопросы производительности всегда будут возникать. Но это не значит, что ей в угоду мы должны впихивать невпихуемое "в одну таблицу". Производители СУБД и АС позаботятся о том, чтобы все возрастающие объемы информации не приводили к замедлению и остановке процессов обработки данных. Так, например, один из известнейших производителей СУБД создал систему с постолбцового хранения данных, взамен построчного. Теперь его СУБД работают с объемами в 50ТБ и не кашляют. Вселяет оптимизм, спасибо! ) Еще бы ссылку на это заявление архитекторов оракла, если Вас не затруднит. КурдльА у Вас какие объемы? Очень много меньше 50-ти ТБ... Сейчас практически никакой (< 1 Гб). И сильно сомневаюсь, что в ближайшие года 2-3 объем основной схемы превысит 50-100 Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 09:51 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльОчень не правильно в архитектурном плане раскидывать документы в отдельные таблицы в разрезе их типов. -1 КурдльОчень правильно создавать модель данных наиболее приближенной к предметной области. Очень правильно понимать принципы хранения информации и принципы построения оптимальных запросов. КурдльС производительностью пусть железячники геморроятся. Вот с таким подходом далеко не уйдёте. Списывать глючность софта под недостаток мощностей это проще простого. А вот написать надежное решение - тут головой нужно думать. Как вижу, Вы не относитесь к категории людей, умеющих думать, планировать и заглядывать наперёд (я об этом Вам уже говорил). КурдльРазные документы могут иметь разные связи и условия проверок! Корневое слово - документы. Документ - это сущность, неделимая. Даже в разрезе типов. Предположим, имеется 100 млн. документов и 100 типов. А теперь пошевелите мозгами и прикиньте, какой будет план при отборе документов 10-и типов? 10 джойнов: Код: plaintext Самая засада будет в индексном скане, хотя стоимость Index Seek будет ещё выше. Нам придётся обращаться к 10 таблицам-миллионникам за дополнительными атрибутами. Именно в этом и есть засада. Проблема в том, милый Курдлёк, что Вы не участвовали в разрабатотке высоконагруженных систем. Имея бы опыт участии в подобных проектах Вы бы так не говорили: КурдльС производительностью пусть железячники геморроятся. ... ибо такие "программисты" нах никому не нужны. P.S. Проекты типа хеллоу-ворлд - вот она Ваша ниша :) КурдльНикакие сложности разработки и расширяемости не могут оправдать разрушение логики модели. См. выше про хеллоу-ворлдщиков P.S. Когда Ваш программный комплекс встанет раком (+ туда же интеграцию со сторонними системами - всякие ссис и бизтолки, + туда же резервое копирование, + туда же репликацию данных), тогда Вы лично пойдёте к директору и расскажете про разрушение логики модели P.S2. Кстати, да будет Вам известно - логика модели при этом не разрушается, ибо мы работаем с единой сущностью документ. Он не должен быть делим в разрезе его типа. barser уже вещал про Фаулеровские наставления. Если Вы, Курдль, считаете себя умнее и опытнее Великого Фаулера, то я умолкаю :) КурдльИначе вместо того, чтобы защищать ваш проект от тяжелейших ошибок уровня бизнес-логики, БД будет лишь придатком воспаленного воображения разработчиков прикладных модулей. Шум травы. А ружье за цевьё не держалось ) С возрастом проходит ) barserБольшое спасибо за ценное замечание. Фаулер, насколько помню, в "Архитектуре корпоративного ПО" давал схожую рекомендацию. Правда, сложности с установкой constraints not null на уровне БД появляются, а также люди, которые будут работать с базой на уровне MS access могут не понять фишки (ну, тут наверное дополнительные вьюхи смогут помочь)... Ну, это уже десятое. Можете переложить логику not null на клиента, можете вьюшки, можете еще как - это уже как требуется. barserНа данном этапе разработки изменить способ хранения вполне реально, имхо... Вынесу это на обсуждение между участниками проекта на след. неделе. Еще раз спасибо! Да, обсудите, дело-то серьезное. barserА может быть есть какое-то общее правило для выбора типа наследования? Когда что лучше подходит? Вот на уровне классов - играйте как хотите, но схема в БД должна быть нераздробленной. Это ж Вам не мастер детэил ) barserКурдльНу вот, мнения разделились... :) Как же найти разумный компромисс? Меня, честно говоря, несколько смущает обилие join'ов в запросах к сущностям, у которых имеется много наследников... Никак не могу об этом не думать) barser, какие мнения могут быть у Курдля, нашего адошного хеллоуворлдщика? barserЕсли Вас не слишком затруднит, не могли бы Вы хотя бы вкратце перечислить конкретные проблемы, возникновение которых заставило сожалеть о принятом архитектурном решении? 1. Тормоза на выборках с большим кол-вом типов документов 2. Периодические блокировки (для наборов под сводные ведомости и прочие отчеты - курилось грязное чтение, но программный комплекс не ограничивался отчетами, разумеется). И как следствие - доп. нагрузка на администрирование БД 3. Мерж-репликация. Танцы с бубном: иногда случалось так, что "типы" раньше приходили на паблишер, чем "шапки" документов. Щас уже не припомню, в чём именно там была засада. 4. Более сложная интеграция со сторонними системами. КурдльАрхитекторы оракла заявляют, что скорость доступа к двум полям "соединенных" таблиц такая же, как к двум полям одной таблицы. Курдль, ну во-первых - это бред. Во-вторых, Вы же знаете правила хорошего тона на sql.ru - всегда заявления подобного рода хорошо было бы подкреплять ссылками на источник. КурдльВопросы производительности всегда будут возникать. Но это не значит, что ей в угоду мы должны впихивать невпихуемое "в одну таблицу". "Всё в одну таблицу" == "Документы в одной таблице" Чуете разницу? Так что выражайтесь яснее и не накручивайте слов не по делу. КурдльПроизводители СУБД и АС позаботятся о том, чтобы все возрастающие объемы информации не приводили к замедлению и остановке процессов обработки данных. Производители СУБД бессильны перед ламерами, которые не знают, не умеют, не понимают. Это факт. КурдльТак, например, один из известнейших производителей СУБД создал систему с постолбцового хранения данных, взамен построчного. Теперь его СУБД работают с объемами в 50ТБ и не кашляют. А у Вас какие объемы? Так например, один человек обрёл крылья и полетел. А у Вас какие крылья? P.S. Как всегда - ниачём. Нт названий, ни ссылок, ни фактов. Просто шелест травы, не более того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 09:59 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barserКурдльЕще бы ссылку на это заявление архитекторов оракла, если Вас не затруднит. Во-во КурдльА у Вас какие объемы? barserИ сильно сомневаюсь, что в ближайшие года 2-3 объем основной схемы превысит 50-100 Гб. Ну, я бы не сказал, что это-таки мало :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 10:05 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, До чего ж забавно наблюдать за всплеском эмоций, который происходит каждый раз, когда всколупывают Ваш нарывающий комплекс ... Наверное всю ночь ответ готовили (как в случае с SolYUtor-ом - не поленились же форум пошерстить в поисках компромата ;) Видимо не раз еще в будущем я не смогу отказать себе в удовольствии закинуть подобный пост в ваш огород. Но тем не менее, я бы взял Вас к себе на работу - в подразделении обязательно должны быть и такие экземпляры! Жаль, что дотнетчики нам не нужны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 10:19 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Курдль, всплески эмоций оставьте у себя в чемодане, Вы, лучше по делу отвечайте :) Итак, прошу ссылку на вот это заявление: КурдльАрхитекторы оракла заявляют, что скорость доступа к двум полям "соединенных" таблиц такая же, как к двум полям одной таблицы. ... и расскажите поподробней про "известнейшую" столбцовую БД: КурдльТак, например, один из известнейших производителей СУБД создал систему с постолбцового хранения данных, взамен построчного. Теперь его СУБД работают с объемами в 50ТБ и не кашляют. P.S. А то как-то не хорошо получается, - заднюю включить не дам! ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 10:45 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, 1. Ради простого поддержания спора не готов тратить свое время на поиски цитат. Но это заявление звучало раньше почти на всех конференциях от оракла. Сходите в форум ораклистов на этом сайте - может они точно наведут (у Вас же "безлимитка":). 2. Sybase IQ. P.S. Не пытайтесь втянуть меня в досужий треп "у кого длиннее и толще" Ведь победивший в таком споре ЗДЕСЬ может иметь длиннее и толще всего-навсего... язык (или пальцы). Огромное Вам спасибо за дельные ответы по темам моих вопросов в рамках этого форума. Бессомненно - Вы гораздо лучший специалист в ОРМ и их прикладном применении, чем я. Можно я и впредь буду обращаться к Вам за советом по теме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 11:06 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Курдль1. Ради простого поддержания спора не готов тратить свое время на поиски цитат. Но это заявление звучало раньше почти на всех конференциях от оракла. Сходите в форум ораклистов на этом сайте - может они точно наведут (у Вас же "безлимитка":). Курдль, так дела не делаются. Если не найдете подтверждения сего безумного факта - будет расценено как слив. Постарайтесь отвечать за свои слова, а не бросать их на ветер. Всё еще жду ссылки. Курдль2. Sybase IQ. Про ограничений сервера тоже читали? Нельзя одновременно вставлять или изменять данные в одной таблице более, чем одной сессии. Почитайте про обсуждения айкю на "Сравнение СУБД": Вот вам и Sybase IQ, господа хорошие . КурдльP.S. Не пытайтесь втянуть меня в досужий треп "у кого длиннее и толще" Я не пытаюсь никого никуда втягивать. Я лишь хочу, чтобы Вы отвечали за свои слова. КурдльВедь победивший в таком споре ЗДЕСЬ может иметь длиннее и толще всего-навсего... язык (или пальцы). Какой спор, Курдль? С кем? Программист, заявляющий такое: КурдльС производительностью пусть железячники геморроятся заранее обречён на погибель. P.S. Остальной оффтоп поскипан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 11:21 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, Вы такой смешной - аппелируете к спору таких же, как Вы программистов на одном единственном форуме. Не примите за попытку принизить Ваш профессионализм - но есть более веские аргументы, чем он. Например, когда пусть даже на рекламном семинаре от Sybase, выходит на сцену начдепа IT налоговой службы США и говорит, что благодаря указанной СУХД за 5 лет ими получена доп. прибыль в $60 млн. и что нынешний объем ХД - 150ТБ, при этом оборудование - отнюдь не "супердома", я не вижу причин ему не верить. А я из своего болота могу квакнуть в оправдвние сентенции об "одной сессии и одновременного доступа" то, что СУХД не специализируются на OLTP системах, а лишь на OLAP, где, как правило, запись ведется по ночам, а в рабочее время - лишь упорная аналитическая выборка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 11:46 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльМСУ, Вы такой смешной - аппелируете к спору таких же, как Вы программистов на одном единственном форуме. Курдль, Вы такой странный - приводите примеры постолбцовых СУБД, кои никак не коррелируют с сабжем, в рамках жалких попыток доказать правильность подхода разбиения таблицы докуменов, махая флагом "правильной логической модели". Хотя, сами же до сих пор не понимаете, что логическая модель не нарушается. К чему вообще был заведен разговор о Sybase IQ, если оное хранилище никак не сопоставимо с начальным вопросом? КурдльНапример, когда пусть даже на рекламном семинаре от Sybase, выходит на сцену начдепа IT налоговой службы США и говорит, что благодаря указанной СУХД за 5 лет ими получена доп. прибыль в $60 млн. и что нынешний объем ХД - 150ТБ, при этом оборудование - отнюдь не "супердома", я не вижу причин ему не верить. Вы хотели чего-то другого ожидать на рекламном семинаре от Sybase? P.S. И, вообще, тема не о Sybase и не о постолбцовом хранении. Забудьте. КурдльА я из своего болота могу квакнуть в оправдвние сентенции об "одной сессии и одновременного доступа" то, что СУХД не специализируются на OLTP системах, а лишь на OLAP, где, как правило, запись ведется по ночам, а в рабочее время - лишь упорная аналитическая выборка. Я, вообще, не понимаю, зачем Вы начали квакать в эту сторону. Оффтоп? P.S. Линк будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 12:04 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУP.S. Линк будет? Нет, конечно! Я же сказал, что не буду тратить свое время на подобные поиски. Я дал свои рекомендации автору этой ветки. А он уж пусть решает, принять ли Ваши аргументы, или мои. И от слов, что производительностью АС должны заниматься специально обученные люди, никак не способные повлиять на структуру данных, я не откажусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 12:20 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльНет, конечно! Я же сказал, что не буду тратить свое время на подобные поиски. То есть, Вы считаете хорошим тоном - ляпнуть и уйти в сторону без аргументов? КурдльЯ дал свои рекомендации автору этой ветки Не поверите, в Ваших "рекомендации" не было ни одного убедительного аргумента, как со стороны рефов (ссылок на доки, статей, обсуждений, ...), так и со стороны опыта... Если я, конечно, нигде не запамятовал. КурдльИ от слов, что производительностью АС должны заниматься специально обученные люди, никак не способные повлиять на структуру данных, я не откажусь. Я чувствую некий спад амбиций. Тут: КурдльС производительностью пусть железячники геморроятся ... было поамбициозней и пожарче заявлено ) P.S. Вы до сих пор не понимаете, что программист способен написать такой кривой код, который и оптимизировать смысла не имеет? P.S2. Во-вторых, если Вы так акцентируете внимание на разделение ролей - то я бы Вас к разработке схемы БД не подпустил бы. Как Вы говорите, пусть этим DBD занимается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 12:28 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barser Конкретно - настораживает следующее: типичный запрос Код: plaintext При добавлении подкласса соответственно добавится еще один inner join. В принципе, мне кажется для конкретных ситуаций можно будет добавить методы в репозитории документов, не использующие эти join'ы, но хотелось бы знать, чего ожидать, может, не стоит вообще 'париться'... Или наоборот придется полностью менять модель данных? Кто-нибудь наверняка же проходил через подобный этап в проектировании/разработке. Спасибо! Проходили. Подобная стратегия - вполне нормальный вариант, другое дело, что ORM совершенно не заточены под это. Выбросите Hibernate и забудьте про него ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 15:00 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Не пользователь sql.ru Проходили. Подобная стратегия - вполне нормальный вариант... Что используете в слое DAL? И какая архитектура у Вас в целом? Не пользователь sql.ru..., другое дело, что ORM совершенно не заточены под это. Что использовать вместо ORM в данном случае? И - интереснее услышать - под что заточены ORM? Не пользователь sql.ruВыбросите Hibernate и забудьте про него Мне кажется к Вашему совету могут прислушаться лишь те, кто находится на самой ранней стадии знакомства с этим замечательным фреймворком. Когда плюсы туманны, а сложность изучения отпугивает... Любой же, кто нашел в себе силы разобраться с этой технологией, будет рад иметь ее в своем арсенале и применять с умом (никто не обязывает сувать ее повсеместно). В общем, спасибо за совет, но я к нему не прислушаюсь, извините. p.s. По моим наблюдениям, самые ярые противники хибера - те, которые в нем ничего не понимают... Вот бы пообщаться с человеком, который бы досконально разобрался что к чему и это ему не понравилось. Но как только разбираются - критика куда-то пропадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 15:23 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barserНе пользователь sql.ru Проходили. Подобная стратегия - вполне нормальный вариант... Что используете в слое DAL? И какая архитектура у Вас в целом? Не пользователь sql.ru..., другое дело, что ORM совершенно не заточены под это. Что использовать вместо ORM в данном случае? И - интереснее услышать - под что заточены ORM? Не пользователь sql.ruВыбросите Hibernate и забудьте про него Мне кажется к Вашему совету могут прислушаться лишь те, кто находится на самой ранней стадии знакомства с этим замечательным фреймворком. Когда плюсы туманны, а сложность изучения отпугивает... Любой же, кто нашел в себе силы разобраться с этой технологией, будет рад иметь ее в своем арсенале и применять с умом (никто не обязывает сувать ее повсеместно). В общем, спасибо за совет, но я к нему не прислушаюсь, извините. p.s. По моим наблюдениям, самые ярые противники хибера - те, которые в нем ничего не понимают... Вот бы пообщаться с человеком, который бы досконально разобрался что к чему и это ему не понравилось. Но как только разбираются - критика куда-то пропадает. Самые яркие приверженцы хибера - те кто ничего не понимает в БД. Посмотрите на запросы вашего любимца, попляшите с бубном вокруг него, сделайте хотя бы один проект, тогда может и сами поймете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 15:53 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Не пользователь sql.ru, ok, обязательно посмотрю, пасибки) А вообще сложно "ничего не понимать в БД", разрабатывая приложения под эти самые БД )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 16:04 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Не пользователь sql.ruСамые яркие приверженцы хибера - те кто ничего не понимает в БД. Посмотрите на запросы вашего любимца, попляшите с бубном вокруг него, сделайте хотя бы один проект, тогда может и сами поймете Есть около десятка проектов на хибере. Двое из них очень крупные. Оптимизация запросов стоит на переднем плане. Все участники проектов "кое-что" понимают в базах даных. Смотрим на запросы "любимца" каждый день. С бубнами не пляшем - просто работаем, не более того. Внимание вопрос - в чём наш косяк? P.S. "Приверженцем хибера" не являюсь. Это просто очень хорошая ORM со своими плюсами и минусами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 16:07 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Не пользователь sql.ruПосмотрите на запросы вашего любимца, попляшите с бубном вокруг него, сделайте хотя бы один проект, тогда может и сами поймете Все запросы "любимца" отслеживаются log4net и NHProfiler'ом. Везде где потребуется, будет произведена оптимизация (но я не сторонник преждевременной опт-ции). "Пляски с бубном" проходили на ранней стадии изучения (я об этом писал). Всё с чем сталкиваемся сейчас вполне поддается логическому объяснению... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 16:10 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barser* хм... я там ошибся с типом объединения: вместо inner join везде left outer join Маразм - он и в Африке маразм. Если бы у вас был DBA, то услышали бы более конкретные определения barser Пока всё работает как нужно, но на данный момент существует не так много подклассов документов. Меня интересует, что может произойти при росте их числа . Конкретно - настораживает следующее : типичный запрос В принципе, мне кажется для конкретных ситуаций можно будет добавить методы в репозитории документов, не использующие эти join'ы, но хотелось бы знать, чего ожидать, может, не стоит вообще 'париться'... Или наоборот придется полностью менять модель данных? Кто-нибудь наверняка же проходил через подобный этап в проектировании/разработке. p.s. На уровне модели данных объединение всех типов документов базовым классом 'document' весьма удобно и представляется мне правильным. На всякий случай добавлю, что разрабатываемый продукт не относится к OLTP-системам (наверное, это уже и так понятно :) ) Повторюсь, используется СУБД Oracle 11g. Может быть, гуру подскажут, существенные особенности реализации inner join в нём. Когда идет, например, выборка единственной строки по конкретному id, но с n inner join'ами ( в n-1 из которых строки 100% не будет) ... Или вариант с 'пэйджингом' - когда на странице отображается около 20 документов различных подклассов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 17:30 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Не пользователь sql.ru, И? В процитированном тексте содержатся вопросы, касающиеся работы не Hibernate, но конкретной БД. Ну, и принципов проектирования структур данных, если хотите. Ответы знаете? Судя по всему, вряд ли, а цитировать и выделять жирненьким я тоже умею, ага. Я услышал только, что хибер - это зло (кто-то его "ниасилил"?) и ни одного ответа на заданные вопросы... Короче, ошиблись темой, не иначе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 20:48 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУОчень не правильно в архитектурном плане раскидывать документы в отдельные таблицы в разрезе их типов. Во-первых, в плане оптимизации - ставим раком сервер при большом кол-ве документов, во вторых в плане расширяемости - нужно создавать новую таблицу под новый тип. Плюс только один - удобство хранения. Очень рекомендую, пока не позлно, перевести всё на одну таблицу и расширять атрибуты по надобности. В моей практике есть один горький опыт такой схемы... Потом очень жалели, но было поздно. Уважаемый МСУ, ответьте плиз на парочку вопросов: 1. Как и где Вам удалось хранить в одной таблице, разные по содержанию и набору атрибутов документы/сущности - платежные поручения, контракты, выписки со счетов, служебные записки, протоколы заседаний и т.д. ?! 2. Как Вы строили уникальный ключ (UK) по такой МЕГА таблице, ведь уникальность для каждого типа документа в системе определяется своим набором атрибутов (выписка со счета ежегодно, номер контракта с рабочего места с контрагентом не должен задублироваться?!). 3. Как Вы создавали внешний ключик (FK) в связанных таблицах .. таблице проводок например на данную таблицу на уровне СУБД, а то на основании СЗ изменения паспортных данных спишутся средства с лицевого счета вкладчика?! 4. По поводу ... barser Правда, сложности с установкой constraints not null на уровне БД появляются, а также люди, которые будут работать с базой на уровне MS access могут не понять фишки (ну, тут наверное дополнительные вьюхи смогут помочь) . Серег, зачем нужен этот гемор у нас и так его хватает ))) 5. Join-ы по внешним ключам при наличии индексов и грамотной настройке сервера выполняются за миллисекунды, мы же не собираемся заниматься тут аналитикой, да и у Oracle кстати неплохой набор аналитических функций. Причем тут блокировки, интеграция, репликация ... ?!!! 6. Вопрос в другом, а зачем связывать 10, 20 ... таблиц документов в один запрос?! Какому нужны в одном запросе данные платежей, контрактов, выписок и т.д. ?! Зачем нужны эти миллионы связанных документов?! )) Может стоит выделить необходимые атрибуты и ссылки в классе Document?! (Id, наименование документа, дата документа, штрих-код, путь к файлу ... и т.д.) МСУ, о чем жалели то, на чем тормозил сервак и застрял проект?! )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 21:49 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
4umg, О! Пришел АРХИТЕКТОР! Во всяком случае человек, который реально сталкивался с прикладными БД побольше, чем "Хэллоу Ворлд"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 21:57 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barserНе пользователь sql.ru, И? В процитированном тексте содержатся вопросы, касающиеся работы не Hibernate, но конкретной БД. Ну, и принципов проектирования структур данных, если хотите. Ответы знаете? Судя по всему, вряд ли, а цитировать и выделять жирненьким я тоже умею, ага. Я услышал только, что хибер - это зло (кто-то его "ниасилил"?) и ни одного ответа на заданные вопросы... Короче, ошиблись темой, не иначе... Когда Асилишь принципы проектирования БД и мало-мальски разберешься, как работает движок БД, тогда сам поймешь, что все ORM для этого совершенно не приспособлены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 10:00 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
4umgУважаемый МСУ, ответьте плиз на парочку вопросов: Ну вот, просили парочу, а родили целых шесть (пять)! 4umg1. Как и где Вам удалось хранить в одной таблице, разные по содержанию и набору атрибутов документы/сущности - платежные поручения, контракты, выписки со счетов, служебные записки, протоколы заседаний и т.д. ?! Во-первых, не нужно таких опрометчивых замечаний по поводу того, что хранение было организовано разными по содержанию и набору атрибутов документов. Ибо документ иного типа имел массу общего с "предком" (номер, различные даты операций). Просто в различных вариациях определенные атрибуты не заполнялись. Но, тем не менее, этот факт не мешал сущности был сущностью :) Во-вторых, бизнес был учетно-транспортный, сбыт. Как-то накладные, счета, счета-фактуры, товарно-транспортные документы и иже. В-третьих, иные документы (как то контракты), не имеющие никакого отношения к кактегории сбыта, хостились в своей отдельной таблице. То есть, иными словами, разнородность документов объединяла некая абстрактная кактегория. Принятие решения под введение новой категории (то есть создание новой таблицы) осуществлялось после исследования, которое показывало, - может ли таблица захостить схожие документы. 4umg2. Как Вы строили уникальный ключ (UK) по такой МЕГА таблице, ведь уникальность для каждого типа документа в системе определяется своим набором атрибутов (выписка со счета ежегодно, номер контракта с рабочего места с контрагентом не должен задублироваться?!). Вы забыли, что еще и номер счета-фактуры должен быть уникальным в разрезе года, а так же быть последовательным и непрерывным )) Во-первых, таблица была не "мега", выше я изложил про идею категорий. Во-вторых, уникальностью документов свободно может отруливать триггер. Клиенту не нужно этой логики. В-третьих, (вопросы типизации) можно возложить работу (частный случай) триггера на SQLCLR по форуме: сервер выбирает - функция SQLCLR обрабатывает и выдает результат. В-четвертых, Вы не сказали - Вы пишете расширяемую СЭД (вида 1С, Documentum, OpenText И иже) или под нужды предприятия? Это очень важно, ибо расширяемость не бесплатна - мы всегда жертвуем произодительностью. Так вот, если Вы пишете расширяемую систему, то самым гуманным выбором в пользу производительности я бы посчитал создание понятия (уже не абстрактного) "категория". Категория имеет ряд атрибутов, по которым создаётся физическая таблица. Разумеется, категория расширяема. В таблицу документов этой категории можно лить различные документы. Не путать категорию с типом, суть категории думаю ясна. Ясен пень, категории должны быть качественно проработаны аналитически, предвариельно обследовав эту область. 4umg3. Как Вы создавали внешний ключик (FK) в связанных таблицах .. таблице проводок например на данную таблицу на уровне СУБД, а то на основании СЗ изменения паспортных данных спишутся средства с лицевого счета вкладчика?! Ну, думаю, уже смысла нет давать комментарии по этому вопросу. 4umg5. Join-ы по внешним ключам при наличии индексов и грамотной настройке сервера выполняются за миллисекунды, мы же не собираемся заниматься тут аналитикой, да и у Oracle кстати неплохой набор аналитических функций. Причем тут блокировки, интеграция, репликация ... ?!!! 1. Разумеется, наличие индексов обязательно. 2. Что понимается под грамотной настройкой сервера? Конкретизируйте. 3. За миллисекунды выполняется запрос на пару джойнов при наборе в сотню строк. При ста джойнах и при объемах таблиц > 10 (про сотни молчу) млн. записей Вы будете петь уже другие песни. 4. Как это блокировки не причём? Уважаемый, читайте про конкурентный доступ, уровни изоляции и иже. Ну даёте, пипец... :) Особенно, когда сервер выбирает на основе плана выполнения запроса - сканирование индекса. А если у Вас еще и индексы, то не забываем, что если есть в таблице кластерный индекс, все некластерные индексы будут содержать столбцы самого индекса и столбцы кластерного индекса. Действительно, причём тут блокировки 5. Репликация и блокировки. Ну да, разумеется, при реплике блокировок быть не может по определению :) 6. Ладно, проехали )) Учите матчасть. 4umg6. Вопрос в другом, а зачем связывать 10, 20 ... таблиц документов в один запрос?! Какому нужны в одном запросе данные платежей, контрактов, выписок и т.д. ?! Зачем нужны эти миллионы связанных документов?! )) В основном для интеграции со сторонними системами. Экспорту данных за период могут понадобиться разнотипные документы. 4umgМожет стоит выделить необходимые атрибуты и ссылки в классе Document?! (Id, наименование документа, дата документа, штрих-код, путь к файлу ... и т.д.) Не получится, уже объяснял почему. Если у Вас пара типов - ваяйте. 4umgМСУ, о чем жалели то, на чем тормозил сервак и застрял проект?! )) Основное, - блокировки. P.S. Проект на застрял, его потом подняли ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 10:48 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Не пользователь sql.rubarserНе пользователь sql.ru, И? В процитированном тексте содержатся вопросы, касающиеся работы не Hibernate, но конкретной БД. Ну, и принципов проектирования структур данных, если хотите. Ответы знаете? Судя по всему, вряд ли, а цитировать и выделять жирненьким я тоже умею, ага. Я услышал только, что хибер - это зло (кто-то его "ниасилил"?) и ни одного ответа на заданные вопросы... Короче, ошиблись темой, не иначе... Когда Асилишь принципы проектирования БД и мало-мальски разберешься, как работает движок БД, тогда сам поймешь, что все ORM для этого совершенно не приспособлены. ))) Занавес..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 11:41 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, 1.Ну так, если вы вводите новую категорию .. значит наследуетесь от документа?! Мы тоже объединяем контракты физических и юридических лиц, заявительные листы в одну категорию контракт, которая наследуется от документа. А типов контрактов и их версий может сколько угодно. На сегодня я бы выделил несколько важных для нас категорий документов: договора/контракты - это основной учет. документы, по которым проводятся начисления/cписания денежных средств и их перераспределение - платежные поручения, бухгалтерские справки, протоколы и распорядительные письма вкладчиков. служебные (внутренние документы) - служебные записки и ответы на них (их кстати может автоматом генерить система по определенному событию) на изменение учетных данных выходные документы - выписки со счетов, справки в налоговую, уведомления, почтовая рассылка .. отчеты и т.д. 2. Да мы пишем СЭД под нужды конкретной организаци и совершенствуем уже существующую, которая проработала лет 15 и порядком устарела )). Да, она интегрирована с 1С и Мотивом, правда в одностороннем порядке - из мотива документы попадают в нашу систему. 3. По поводу производительности сервера Oracle ... я имел ввиду кешировние запросов, секционирование и пр. Вы издеваетесь про пару джойнов на сотню строк??! ))) Вы хоть сами-то писали запросы или хранимики со 100 джойнами или все хибером ??!)). По поводу таблиц миллионников (прям система бюрократ ))), думую на днях промоделируем на тестовых данных и посмотрим план ... на сегодняшний таблица движения средства (4 млн) легко связывается со ста тысячниками документами, счетами, контрагентами, адресами и пр ... 500 записей не более чем за 100ms .. и то, если выбирать все поля таблиц 4. Что-то я не в курю, уважаемый .. вы про какие блокировки и уровни изоляции в ORACLE на обычный SELECT c джойнами?! Или я что-то не догоняю?! Вы под какую СУБД систему писали?! 5. Хмм, экспорт данных разовая служебная операция, которая может выполняться по расписанию, в ночное время, за определенный период, на отдельным серваке и не обязательно через хибер. Это не аргумент, который влияет на на работу СЭД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 10:07 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
4umg, Да, про блокировки оракла меня тоже резануло. P.S. Коллега! Умоляю: договор ы ! ;) А то иногда встречаешь серьезное банковское ППО, в котором прямо в заголовке грида так и написано: "Договор а "! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 10:24 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
4umg1.Ну так, если вы вводите новую категорию .. значит наследуетесь от документа?! Нет и еще раз нет. Вы так и не поняли, - единого понятия "документ" нет и не должно быть. Перечитайте еще раз то, о чём я писал... :( 4umgНа сегодня я бы выделил несколько важных для нас категорий документов: договора/контракты - это основной учет. документы, по которым проводятся начисления/cписания денежных средств и их перераспределение - платежные поручения, бухгалтерские справки, протоколы и распорядительные письма вкладчиков. служебные (внутренние документы) - служебные записки и ответы на них (их кстати может автоматом генерить система по определенному событию) на изменение учетных данных выходные документы - выписки со счетов, справки в налоговую, уведомления, почтовая рассылка .. отчеты и т.д. Отлично! Итого под данные категории создайте 4 таблицы, которые будут принимать документы конкретной категории. Всё. 4umg2. Да мы пишем СЭД под нужды конкретной организаци и совершенствуем уже существующую, которая проработала лет 15 и порядком устарела )). Да, она интегрирована с 1С и Мотивом, правда в одностороннем порядке - из мотива документы попадают в нашу систему. Ох как это знакомо :) Главное - не нагадить и не облажаться в самом начале - этапе проектирования схемы. Так что все ооповские заморочки отложите пока на задний план (я про разделения, думаю, этот момент можно закрыть уже, всем всё понятно) - делайте схему. И такую схему, чтобы акцентировать, прежде всего, внимание на быстродействие . 4umg3. По поводу производительности сервера Oracle ... я имел ввиду кешировние запросов, секционирование и пр. Ну так кеширование есть не только в оракле, нашли чем удивить :) Более того, есть возможность перекомпиляции планов ("рекешинг"). Вот тут есть интересная статейка на тему: Кэширование и повторное использование плана выполнения (правда под сиквел). Ну да ладно, это оффтоп. 4umgВы издеваетесь про пару джойнов на сотню строк??! ))) Вы различаете понятия издёвки и утрирования? По-ходу дела нет 4umgВы хоть сами-то писали запросы или хранимики со 100 джойнами или все хибером ??!)). См. выше про утрирование. Я хотел донести идею, что с ростом количества новых типов Вы будет получать в бубен новый дополнительный джойн, что не может не сказываться на производительности выполнения запроса. Очень жаль, что приходится разжевывать этот момент. Банально, Ваш сотрудник барсер это понял с первого раза... 4umgПо поводу таблиц миллионников (прям система бюрократ ))), думую на днях промоделируем на тестовых данных и посмотрим план ... Вот с этого и нужно было начинать, а не вещать тут про миллисекундность выполнения батчей :) 4umgна сегодняшний таблица движения средства (4 млн) легко связывается со ста тысячниками документами, счетами, контрагентами, адресами и пр ... 500 записей не более чем за 100ms .. и то, если выбирать все поля таблиц Мда, батенька. Да Вы еще и фантаст песатель P.S. Про нагрузочное тестирование рассказывать? Когда в Вашу систему будут ломиться 10к юзеров, интеграционных коннектов, резервных копирований, и иже с ними. 4umg4. Что-то я не в курю, уважаемый .. вы про какие блокировки и уровни изоляции в ORACLE на обычный SELECT c джойнами?! Или я что-то не догоняю?! Вы под какую СУБД систему писали?! Уважаемый, чтобы понимать, про какие блокировки я говорю, нужно понимать, что Вашу систему будут курить не только парочка бабушек со студентом-администратором :) Мысль ясна или расшифровать? 4umg5. Хмм, экспорт данных разовая служебная операция, которая может выполняться по расписанию, в ночное время, за определенный период, на отдельным серваке и не обязательно через хибер. Как Вы недальнозорки... Дорогой 4umg, а Вы не задумывались над тем, что "ночного времени" Вам может не хватить? :) Не нужно мыслить на уровнем full backup, это могут даже студенты начальных курсов. Есть еще такое понятие, как differential backup (full differential backup), а так же резервное копирование журналов транзакций. Например, можно производить полное резервное копирование по понедельникам, а в каждый другой день недели — резервное копирование журналов транзакций. В результате во вторник в резервную копию будут записаны те изменения, которые произошли с понедельника по вторник, в среду будут записаны изменения со вторника по среду и т. п. Такое резервное копирование будет выполняться быстрее, чем разностное, но придется пожертвовать скоростью восстановления. Если сбой произойдет, например, в четверг, то при использовании разностного резервного копирования вам потребуются две резервные копии: за понедельник (полная) и за четверг (разностная). В той же ситуации при использовании резервного копирования только журналов транзакций вам потребуются: полная копия за понедельник и копии журналов транзакций за вторник, среду и четверг. 4umgЭто не аргумент, который влияет на на работу СЭД Это аргумент, который влияет на на работу СЭД, учитае матчасть и читайте про разностное копирование. Да и, вообще, закрепить знания по типам резервного копирования Вам не помешает. P.S. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 10:37 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУделайте схему. И такую схему, чтобы акцентировать, прежде всего, внимание на быстродействие . Вот где ключевая концептуальная ошибка! Да поймите же Вы, что для некоторых предметных областей пытаться пойти на компромисс с логикой ради быстродействия - смерти подобно! Я еще раз повторюсь, что модель данных может послужить отличным защитником от логических ошибок последующих этапов, если она правильно спроектирована. И я не понял сентенцию о 4-х таблицах документов. Вы имеете в виду, что они не должны иметь суперкласс? Так это и повлечет за собой кучу ненужных джоинов при необходимости собрать их в едином списке или при общей обработке. Пример с документами не самый яркий. Есть куда более запущенные случаи, напр. финансовые инструменты. Все они учитываются по похожим правилам и имеют общие поля. Но имеют и кучу специфических полей и специфических связей . Логично отдать все эти связи в руки СУБД для поддержки целостности, а не сунуть все в единую таблицу и изобретать свои правила поддержки целостности на триггерах, ХП, логике сервера приложений (ухудшение - по возрастающей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 11:17 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльВот где ключевая концептуальная ошибка! Это не ошибка, это правильное направление. КурдльДа поймите же Вы, что для некоторых предметных областей пытаться пойти на компромисс с логикой ради быстродействия - смерти подобно! Вы этого не понимаете, так как не работали с высоконагруженными системами. КурдльЯ еще раз повторюсь, что модель данных может послужить отличным защитником от логических ошибок последующих этапов, если она правильно спроектирована. Логических ошибок нет и не было. Где тут логические ошибки? КурдльИ я не понял сентенцию о 4-х таблицах документов. Курдль, для Вас персонально не хочу разжевывать... Писал доходчиво, очень доходчиво. Учитесь читать, что-ли. КурдльВы имеете в виду, что они не должны иметь суперкласс? Не должны. КурдльТак это и повлечет за собой кучу ненужных джоинов при необходимости собрать их в едином списке или при общей обработке. Единый список невозможен ибо это разнородные понятия. Единый список может быть построен только в разрезе документов одной категории. Иначе, получается, что Вы хотите построить список баранов с арбузами. Что общего у барана с арбузов? КурдльПример с документами не самый яркий. Есть куда более запущенные случаи, напр. финансовые инструменты. Курдль, хватит уже хрень нести. Ей Богу, утомили. P.S. Забейте на СУБД - занимайтесь программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 11:28 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Ой, дорогуша! Похоже Вы начинаете злиться - значит я на правильном пути МСУ Это не ошибка, это правильное направление. Ошибка и я ее аргументировал. МСУ Вы этого не понимаете, так как не работали с высоконагруженными системами. Работал с такими, что Вам и не снилось. Но Вы не хотите понять разницу между интернет-магазином, складом, биллинговой системой сотового оператора и банковским фронт-офисом. Заладили, как попугай: "а что будет, если 10 миллиардов юзеров ломанутся одновременно..." Не ломанутся! Автоматизированные системы создаются по четким BRD, в которых указываются граничные нагрузки на них. МСУ Не должны. Да? Ну попробуйте тогда, например, приаттачить файл к документу и поймете нелепость своего высказывания. Будете тянуть ассоциации к каждой сущности? Оборжаться! МСУ Единый список невозможен ибо это разнородные понятия. Единый список может быть построен только в разрезе документов одной категории. Иначе, получается, что Вы хотите построить список баранов с арбузами. Что общего у барана с арбузов? Выведите результат запроса пользователя: "Показать все документы, созданные мной за период с ... по ...!" ?!! Что, бяда? Бараны не кучкуются с арбузами? МСУ Курдль, хватит уже хрень нести. Ей Богу, утомили. Это делает мне честь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 11:42 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльОй, дорогуша! Похоже Вы начинаете злиться - значит я на правильном пути На ламеров не злятся - их чмырят :) КурдльОшибка и я ее аргументировал. Аргументом являлось неправильное заявление. Браво. КурдльРаботал с такими, что Вам и не снилось. КурдльНо Вы не хотите понять разницу между интернет-магазином, складом, биллинговой системой сотового оператора и банковским фронт-офисом. Расскажите нам всем про разницу, мы послушаем. Я запасусь попкорном :) КурдльЗаладили, как попугай: "а что будет, если 10 миллиардов юзеров ломанутся одновременно... Не ломанутся!" Вам виднее ) КурдльАвтоматизированные системы создаются по четким BRD, в которых указываются граничные нагрузки на них. Много пыли - а дела в Вас нет. Ибо. Но Вы пишите, пишите :) КурдльДа? Ну попробуйте тогда, например, приаттачить файл к документу и поймете нелепость своего высказывания. Будете тянуть ассоциации к каждой сущности? Оборжаться! Вот этого выперда не понял. О чём ржёте-то? В написании хранимой процедуры с двумя параметрами - блоб и айди? Вы уволенынах КурдльВыведите результат запроса пользователя: "Показать все документы, созданные мной за период с ... по ...!" ?!! Что, бяда? Бараны не кучкуются с арбузами? Вы как всегда думаете задним местом, а не головой. Речь о другом шла - о ненужности наследования в угоду производительности. Далее. Во-певых, Вы не учитывате нужность такой информации. Данная информация просто бессмысленна. Во-вторых, если уж припечёт - 4 джойна (по категориям) - и пользователь получил нужную информацию за период. КурдльЭто делает мне честь! Это делает из Вас мясо, а не думающего девелопера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 12:07 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ На ламеров не злятся - их чмырят :) Аргументом являлось неправильное заявление. Браво. Расскажите нам всем про разницу, мы послушаем. Я запасусь попкорном :) Вам виднее Много пыли - а дела в Вас нет. Ибо. Но Вы пишите, пишите :) Вы как всегда думаете задним местом, а не головой. Можно я одним высказыванием на все предыдущие сентенции отвечу? У меня нет времени развлекать Вас с попкорном (видимо у Вас таки язык длиннее и мозоли на пальцах крепче). Мне и другим видно, что Вы опытный разработчик (простите, девелопер!). Поэтому некоторые неокрепшие умы могут принять Ваши рекомендации за истину последней инстанции. Вот здесь я вынужден вмешиваться. МСУ КурдльДа? Ну попробуйте тогда, например, приаттачить файл к документу и поймете нелепость своего высказывания. Будете тянуть ассоциации к каждой сущности? Оборжаться! Вот этого выперда не понял. О чём ржёте-то? В написании хранимой процедуры с двумя параметрами - блоб и айди? Вы уволенынах И что, таблицы в БД останутся без единого следа о связи "Документ - Файл"? Вот над этим и ржу! МСУ КурдльВыведите результат запроса пользователя: "Показать все документы, созданные мной за период с ... по ...!" ?!! Что, бяда? Бараны не кучкуются с арбузами? Речь о другом шла - о ненужности наследования в угоду производительности. Далее. Во-певых, Вы не учитывате нужность такой информации. Данная информация просто бессмысленна. Во-вторых, если уж припечёт - 4 джойна (по категориям) - и пользователь получил нужную информацию за период. А какая нужность вообще в выписках из журналов операций? Я в банковских программах с неизменной настойчивостью запрашиваю перечень документов, которые я наплодил. А там и платежки и свифтовки и распоряжения, кредитные выплаты и мн. др. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 12:26 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльМожно я одним высказыванием на все предыдущие сентенции отвечу? Да хоть сидя в припляску. КурдльУ меня нет времени развлекать Вас с попкорном (видимо у Вас таки язык длиннее и мозоли на пальцах крепче). Вуаля, Вы опять съезжаете с темы, как в прошлый раз. Напомнить прошлый раз, когда Вы чесали метлой о том, что оракуль одинаково выполняет операцию джойна и операцию линейного чтения? На просьбу о подкреплении этого бреда ссылками на документацию было промямлено изящное "Фи" с последующей ракировкой в кусты. Процессы повторяются, милый Курдлёчек... :) КурдльВот здесь я вынужден вмешиваться. Если не согласны - аргументируйте. Всегда интересно подискутировать на интересные темы. Но по опыту общения с Вами я понял одно - аргументы Вы не любите. Общаетесь по типу - ляпнул и (если "прокатило") - всё хорошо, а если "не прокатило" - сруливаете в сторону и отвечаете на вопрос "Линк будет?": КурдльНет, конечно! Я же сказал, что не буду тратить свое время на подобные поиски. тут И о чём с Вами можно после этого говорить, о сфеерическом коне в вакууме? Извольте. Поэтому я лучше покушаю попкорн и заценю цирковые качества Вашей персоны. Без обид. КурдльИ что, таблицы в БД останутся без единого следа о связи "Документ - Файл"? Вот над этим и ржу! Про изолированность батча (читай транзакции) Вы тоже ничего не слышали? Создаём документ => Получаем айди свежеиспеченной записи => Привязка блоба Ржите дальше :) а мы будем работать. КурдльА какая нужность вообще в выписках из журналов операций? Я в банковских программах с неизменной настойчивостью запрашиваю перечень документов, которые я наплодил. А там и платежки и свифтовки и распоряжения, кредитные выплаты и мн. др. Создайте фильтр - какую категорию Вы ходите запросить. Вот из этой категории и выбирайте документы. Какие сложности? Зачем юзеру нетипизированная свалка документов в одном списке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 12:42 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУИ о чём с Вами можно после этого говорить, о сфеерическом коне в вакууме? Извольте. Поэтому я лучше покушаю попкорн и заценю цирковые качества Вашей персоны. Без обид. Однако говорите! И, видимо, ожидаете буйных оваций от благодарных зрителей, судя по кол-ву слов на ед. площади! МСУ КурдльИ что, таблицы в БД останутся без единого следа о связи "Документ - Файл"? Вот над этим и ржу!Про изолированность батча (читай транзакции) Вы тоже ничего не слышали? Создаём документ => Получаем айди свежеиспеченной записи => Привязка блоба Ржите дальше :) а мы будем работать. Какое дело до батчей и транзакций? Я хочу узнать, Вы готовы принести в жертву поддержку целостности данных силами СУБД в угоду вездесущей и вездеср... производительности? МСУ Создайте фильтр - какую категорию Вы ходите запросить. Вот из этой категории и выбирайте документы. Какие сложности? Зачем юзеру нетипизированная свалка документов в одном списке? Пример нетипизированной свалки(с) простейших Ценных бумаг: Перечислю только связи с сущностью "Субъект" Акция: - эмитент - акционер Облигация: - эмитент - кредитор Вексель: - векселедатель - векселедержатель - индоссант - индоссат Цессия: - цедент - цессионарий Это не считая специфических полей и других архиважных специфических связей, которые непременно должны контролироваться механизмом поддержки целостности данных СУБД! Но не факт, что вся эта информация постоянно будет запрашиваться и обрабатываться. Зато нет сомнений, что не реже раза в день будут производиться перерасчеты рыночной стоимости всего портфеля , резервов под возможные потери и т.п. в результате чего будут формироваться распоряжения о бухгалтерских проводках. Вот здесь и вступают все жизненно необходимые общие поля и связи суперкласса "ценная бумага", как то: сумма, процент (дисконт), лицевой счет, лот и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 13:02 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльОднако говорите! И, видимо, ожидаете буйных оваций от благодарных зрителей, судя по кол-ву слов на ед. площади! Зачем овации - главное, что бы Вы сами это поняли. КурдльКакое дело до батчей и транзакций? Я хочу узнать, Вы готовы принести в жертву поддержку целостности данных силами СУБД в угоду вездесущей и вездеср... производительности? Так и задавайте вопрос. И Ваших же вопросов нихрена не понятно, что Вы хотите. Вот и приходится додумывать. (кстати, не умеется задавать вопросы - не первый раз уже замечаю ) В пользу производительности? Однозначно. Чем угодно пожертвую :) Ну, а если разобраться - вопрос беспричинный. Рассмотрим вариант хранения файлов в БД (файлы вездесущих документов). Плюсы - целостность. Но, при достаточно большом кол-ве файлов (про размеры пока молчу - уже не раз писал сводки о рекомендуемом размере файла под блоб) мы получаем бубном в пах - размеры БД и удручающее по времени резервное копирование. Выходы? Три (в разрезе сиквела, идея оракуля такая же): 1) Перенести таблцу(-ы) с файлами в отдельную БД. Минусы - ссылочная целостность идёт в печку. 2) Переносим файлы на хард. Минусы - ссылочная целостность идёт в печку. 3) Компоненты NTFS Database Engine ( FILESTREAM ). Минусы - не все еще поднялись до 2к8/R2. Во-вторых, из наставлений MS условия использования FILESTREAM - средний размер сохраняемых объектов превышает 1 МБ. А наши файлы могут быть намного меньшего размера, следовательно FILESTREAM отправляется в печку. Ваши предпочтения: нереально долгое резервное копирование (большой размер базы) или пацанские размышления о целостности? Я выбор сделал. P.S. Не всё так просто, Курдль, как может показать на первый взгляд. Пошевелите мозгами и Вы это поймёте. А пока, я начинаю уставать от Вашего напора сознания попиздить, а не заняться делом... КурдльПример нетипизированной свалки(с) простейших Ценных бумаг: ... Это не считая специфических полей и других архиважных специфических связей, которые непременно должны контролироваться механизмом поддержки целостности данных СУБД! Уважаемый - про целостность (файлы) я уже ответил выше. Остальная целостность в полном порядке. КурдльЗато нет сомнений, что не реже раза в день будут производиться перерасчеты рыночной стоимости всего портфеля , резервов под возможные потери и т.п. в результате чего будут формироваться распоряжения о бухгалтерских проводках. Формируйте, в чём сложности, я реально не понимаю? Нужно выбрать - выбирайте. У нас есть 4 таблицы документов в разрезекатегории, не типа (вместо ста типизированных таблиц) - берите и выбирайте. Какие проблемы? КурдльВот здесь и вступают все жизненно необходимые общие поля и связи суперкласса "ценная бумага", как то: сумма, процент (дисконт), лицевой счет, лот и т.д. Не забывайте, что есть такие категории документов, которые не будут иметь общих полей с таблицей супердокумента. Что будем делать в этом случае? Далее, если рассматривать систему документооборота, то она заранее не знает, какой документ и с какими полями мы хотим сделать. Поэтому пихать такой документ под супердокумент не получится - общих полей может не оказаться. И что тогда делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 13:29 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, Ну вот! А то я уж думал совсем махнуть на Вас рукой! А ведь можете признать, что не всюду и везде разбираетесь! Мимоходом - про файлы в БД (я привел пример навскидку и не готов отстаивать правильность хранения файлов в БД во всех случаях). Но ни один из Ваших приемов не даст лучшей эффективности, чем перенос таблицы, содержащей БЛОБ-данные, в отдельный тэйблспейс! Так все же "остальная целостность в полном порядке" или "готовы пожертвовать"? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 13:36 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
КурдльМСУ, Ну вот! А то я уж думал совсем махнуть на Вас рукой! А ведь можете признать, что не всюду и везде разбираетесь! Человек не может всюду и везде разбираться по определению. К чему сказали? Опять поток мыслей не по делу? КурдльМимоходом - про файлы в БД (я привел пример навскидку и не готов отстаивать правильность хранения файлов в БД во всех случаях). Ну вот, как коснулись реально дела - опять валите в кусты. Ну пипец, ну о чём можно с Вами поговорить? О погоде? :) КурдльНо ни один из Ваших приемов не даст лучшей эффективности, чем перенос таблицы, содержащей БЛОБ-данные, в отдельный тэйблспейс! Откуда такая уверенность без исходных данных (размеры, нагрузки, частота обновления и так далее в том же направлении)? КурдльТак все же "остальная целостность в полном порядке" или "готовы пожертвовать"? ;) Вы еще не поняли, что "остальная целостность в полном порядке" - это не про файлы, а "готовы пожертвовать" - про файлы? А мы говорим за типизацию документов, то есть раскидывание отдельного документа как вид в отдельную свою таблицу. Не суть, имеющего базового родителя или не имеющего (это второй вопрос). Вы еще не поняли, о чём тут толкуют, Курдль? Тогда считайте тред заново ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 13:42 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
Господа! Сорри, что вмешиваюсь в столь жаркую и познавательную дискуссию, но хотел бы привлечь ваше внимание к первоначальному вопросу... ) Картинки того, что получается. (К названию самих классов просьба не придираться, они взяты из головы, а не из реального проекта). На диаграмме 1 изображено то, как примерно обстоят дела сейчас. Выстроена иерархия наследования, атрибуты каждого подкласса хранятся в своих таблицах. Имеем перспективу заполучить проблему с джойнами в (отдаленном) будущем... Теперь есть 2 варианта с введением Категорий (МСУ). Так, на диаграмме 2 первый из них. "Базовый документ", от которого наследуются "Категории" может и отсутствовать, но тогда во всех категориях будут иметься схожие технические поля - такие как "автор документа", "дата создания", "дата регистрации"... "Категориям" соответствуют такие "жирные" таблицы, содержащие атрибуты подклассов, наследующих от категорий. Однако еще как вариант для подклассов могут быть заведены собственные таблицы (см. Class9). Правда, тут надо проверить, возможно ли использовать различные виды наследования в одной иерархии (во Fluent'e как-то пробовал и такой мэппинг мне не удалось создать...). По сути, всё очень похоже на диаграмму 1, отличие лишь в введении Категорий на самом верхнем уровне наследования. По этой схеме у меня имеются вопросы (о невозможности одного документу принадлежать двум категориям), но сначала я приведу третий вариант... На диаграмме 3 имеем двухуровневую иерархию документов "базовый-наследник". В таблице, соответствующей базовому документу, содержится тип наследника. В соответствии с этим типом у наследника в свойствах определяется одна или несколько категорий, каждая из которых содержит необходимые для конкретной задачи атрибуты. То есть имеем что-то типа интерфейсов... К примеру, категория "Документы, которые могут являться основанием для того-то того-то" или "Документы, которые могут быть отправлены по почте" и т.п. В этом случае каждый конкретный тип документа является композицией из таких категорий... Если вдруг это какой-нить паттерн, подскажите название, поищу-почитаю, что к чему... Лично мне почему-то навскидку вариант 3 больше нравится. Это нормально?) Но тут надо еще всё прикинуть... Решил все-таки найти время и провести тесты с таблицами-миллионниками. Сгенерю схемы и проверю в ближайшие дни. О результатах сообщу здесь же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 22:48 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barser, Хочешь получить нормальную систему, то делай вариант 3. (Множественная классификация типов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 23:46 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
тфу, вариант 2 и нафиг какие то базовые типы, собственно тип классифицируется множественно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 23:50 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
вариант 1 и 3 чатные случаи варианта 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 00:09 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barserСкажите, пожалуйста, какие могут быть 'подводные камни' при следующей организации таблиц БД. (используется СУБД Oracle 11, NHibernate 2.1) Основная таблица 'documents' содержит поля, общие для всех видов документов. Например, 'дата создания', 'автор' и т.п. На уровне приложений работа ведется с экземплярами подклассов документа (например, 'документ-договор' или 'документ-распоряжение'). Каждому подклассу в БД соответствует своя таблица, одно из полей которой - ссылка на id документа в таблице documents. Словом, реализована так называемая схема наследования 'table-per-subclass' (как в учебниках). Пока всё работает как нужно, но на данный момент существует не так много подклассов документов. Меня интересует, что может произойти при росте их числа. Конкретно - настораживает следующее: типичный запрос Код: plaintext При добавлении подкласса соответственно добавится еще один 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 Гб, конечно не много, но тормозов не наблюдается. Соответственно, если грамотно подойти к проектированию, все будет нормально. Единственное мы не использовали Хибирнейт. Используем хранимые процедуры для доступа к данным, к классам документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 08:27 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barserТеперь есть 2 варианта с введением Категорий (МСУ). Так, на диаграмме 2 первый из них. "Базовый документ", от которого наследуются "Категории" может и отсутствовать, но тогда во всех категориях будут иметься схожие технические поля - такие как "автор документа", "дата создания", "дата регистрации"... Да поймите же, наконец, что Вы в будущем можете отхватить такую категорию документов, которой не нужны поля базового документа! P.S. Не нужно скрещивать ООП в организации хранилища - это разные вещи. Мой вариант в аттаче. Под DML понимается скрипт, который может сгенерить сгенерить категорию. То есть, изначально, к примеру, в системе документооборота проинсталлированы 5 категорий. Но можно доустановить еще 4, доступные в DML. 2, 3 и т.д. уровни DML - это отношения мастер таблцы с детальными таблицами: M => D1 => D2 => D3 => ... На практике достаточно 1 уровня (M => D1), но в принципе, никто не может нас ограничить заложиться еще под парочку уровней вложенностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 11:25 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosтфу, вариант 2 и нафиг какие то базовые типы, собственно тип классифицируется множественно +1 миллион! P.S. Сахават, просто нектором сильно мозг свернули ООП'ие заморочки. Вот они это уже и БД тянут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 11:27 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, вот общая схема типизации объектов. Идентификационный пул (Ид, ТипИд(опционально), Наименование(опционально))-> Тип(Ид, ТипИД, .....) -> МножественныйКлассификатор(....ТипИд, ...) -> Нетипизировынные свойства(Ид, СвойствоИД, значение) Тип и Свойства содержат метаданные. Объект оздается из иденификациооного пула. Ели надо то типизируется (т.е., получает статические свойства). В пул вносится сооветствующий ТипИд для данного объекта. Тип классифицируется множественным образом по ролям (т.е. типизированные объекты получают динамические свойства со статическим значением = ИдКлассификатора + ИдВсехРодителейЭтойВетки). Далее объект по мере нужды получает динамические свойства в Нетипизировынные свойства(Ид, СвойствоИД, значение). По мере разрастания последнего до полного домена ИДов Типа происходит миграция динамических свойств в Тип. Не знаю понятно ли обяснил. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 13:16 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosНе знаю понятно ли обяснил. :( Запутанно. Нарисуйте понятную доменную модель с классами. Или просто на самом низком уровне - логическую схему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 13:24 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
barser, Думаю, комментарии излишни. Остаётся лишь выбрать более понравившуюся принципиальную схему :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:02 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
baike2000У нас вот уже два года, как система с такой структурой внедрена, тоже MS SQL, и проблем пока не видно, подклассов больше 50. Размер базы около 1 Гб, конечно не много, но тормозов не наблюдается. :) P.S. Я бы понимаю, если бы сказали о размере 1Тб (ну, ладно, - хотя бы уж 100Гб) - я еще понял. Но про 1 Гб можно было бы промолчать. Чисто ради приличия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:22 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, не могу диаграмму скопировать в Paint имена таблиц становятся ????? русские там ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:24 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosМСУ, не могу диаграмму скопировать в Paint имена таблиц становятся ????? русские там FastStone Capture рулит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:40 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУViPRosМСУ, не могу диаграмму скопировать в Paint имена таблиц становятся ????? русские там FastStone Capture рулит. Но, если есть Word - копируйте в ворд, там кодировка нормально воспринимается. Попробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:42 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУНо, если есть Word - копируйте в ворд, там кодировка нормально воспринимается. Попробуйте. А потом, разумеется, обратно из ворда в Paint. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:44 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, FastStone взял кое как Ну, покритикуй. (Классификатор, макроклассификатор с типами и макротипами через триггеры) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:02 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУViPRosтфу, вариант 2 и нафиг какие то базовые типы, собственно тип классифицируется множественно +1 миллион! P.S. Сахават, просто нектором сильно мозг свернули ООП'ие заморочки. Вот они это уже и БД тянут Это ты нам сейчас продемострировал в своей диаграмме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:11 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosFastStone взял кое как Не правильно. Нажмите скроллинговый снапшот: кнопочка со стрелочкой (capture scrolling window), и будет щастье. Переделывайте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:24 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosНу, покритикуй. Саха, мы дискутируем не за универсальные классификаторы с динамик типами Нам не нужен конструктор, нам нужно хранилище документов в системе документооборота, классифицирующееся по некому абстрактному правилу (назовем его категорией). И всё :) P.S. Опять Вы лезете со своими скринами не в ту степь ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:27 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, ну я так и делал, он берет только вертикальный скролл ну там вся информация о метамодели пркладная модель автоматически генерируется из нее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:37 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
МСУ, во блин два года не даешь поставить людей на истинный путь - создать универсальную БД :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:45 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosМСУ, ну я так и делал, он берет только вертикальный скролл Да, работает в вертикальным. Очень удобно скринить с двумя мониторами - растянуть окно на два монитора и скринить. Тогда красиво получается. Купите себе еще один монитор :) ViPRosну там вся информация о метамодели пркладная модель автоматически генерируется из нее Слово "мета" - в топку. Она не нужна и речь о ней не идёт. То, что я привёл (поле DML) - рюшечка, которая ТС'у скорей всего не понадобится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:45 |
|
||
|
Вопрос по NHibernate и проектированию структуры БД с учетом наследования
|
|||
|---|---|---|---|
|
#18+
ViPRosМСУ, во блин два года не даешь поставить людей на истинный путь - создать универсальную БД :) Удар по производительности. Нам хватило 1С с её мета-генерацией, хватит, хлебнули :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=17&tid=1351084]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
114ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 522ms |

| 0 / 0 |
