|
|
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Вопрос: спроектировали БД, где для нахождения одной из сущностей требуется произвести 48 объединений(остальные гораздо меньше ~4-8), это в первую очередь связано с наличием многочисленных адресов, а также ссылками из этой сущности на др. сущности, которые содержат ссылки опять же на сущность "Адреса"(КЛАДР). В целом что бы вытянуть запись или фильтрануть все экземпляры сущности надо построить дикой запрос, отрабатывать который СУБД отказывается. Есть ли технологии в проектирование, которые позволяют доразбить сущности. Думал, что можно отрабатывать отдельно записи основной сущности и отдельно те на которые ссылается основная, а далее произвести объединение в ручную, но вроде как это должна делать СУБД. Может у кого есть опыт в подобных вопросах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 18:33 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_d, вам нужны ответы тлько из области теории - или решить проблему? Если второе - не помешало бы указать используемую Вами СУБД. Ну или подтвердить, что соответствующий вопрос на проыильном форуме этой БД Вы уже задали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 18:44 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, Мне нужно конкретное решение для СУБД ЛИНТЕР, да в принципе та же проблема и в MySQL - потому решение в одной из них подойдет и для другой. Возможно что есть решение и на уровне теории. Ну там как разделить сущность и пр. ТОлько вот с разделением не понятно: как потом фильтровать и пр. - опять придется объединять. Вот и получается, что ходим по замкнутому кругу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 08:07 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
Пример запроса неплохо бы показать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 09:45 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dАнатоЛой, Мне нужно конкретное решение для СУБД ЛИНТЕР, да в принципе та же проблема и в MySQL - потому решение в одной из них подойдет и для другой. Возможно что есть решение и на уровне теории. Ну там как разделить сущность и пр. ТОлько вот с разделением не понятно: как потом фильтровать и пр. - опять придется объединять. Вот и получается, что ходим по замкнутому кругу.Мне кажется, что модель БД, с которой в обычных запросах требуется делать 48 соединений, неправильная, независимо от того, смогут такие запросы выполняться на распространённых СУБД или нет. Бывают, конечно всякие "звёзды" в олапах, но там действительно используются специально заточенные субд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 10:18 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_d, Ответ на проблему в Вашем вопросе. Т.е. вы неправильно спроектировали БД. Ответ на вопрос кроется или в коде или в ограничении времени выполнения запроса. Но я полностью согласен что получать данные методом терморектального анализа не есть хорошо. Правильное решение - перестроить БД, но это потребует времени и самое важное наличия человека который понимает что и как сделать. Решение временное - править код или для начала увеличить время ожидания выполнения запроса. Как по мне - видимо ошибка в коде, знаете иногда заскакивает планка и вместо прямого пути выбираешь путь Сусанина. Покажите код с описанием и вероятно вам смогут что-то предложить более конкретное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 10:29 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
спроектировали БД, где для нахождения одной из сущностей требуется произвести 48 объединенийУвольте архитектора и доведите значение до 5-7 максимум. :) Не верю, что это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 10:31 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_d wrote: > Доброго времени суток. Вопрос: спроектировали БД, где для нахождения > одной из сущностей требуется произвести 48 объединений(остальные гораздо > меньше ~4-8), Если там N таблиц с одной структурой, слей их в одну таблицу. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:48 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
MasterZiv sedoi_d wrote: > Доброго времени суток. Вопрос: спроектировали БД, где для нахождения > одной из сущностей требуется произвести 48 объединений(остальные гораздо > меньше ~4-8), Если там N таблиц с одной структурой, слей их в одну таблицу. Не забыв добавить поле-признак, по которому сможешь отличить, где данные из бывшей таблицы "А1", а где из "А5"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 13:08 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
АнатоЛой wrote: > Не забыв добавить поле-признак, по которому сможешь отличить, где данные > из бывшей таблицы "А1", а где из "А5"... Ну это возможно и не надо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 13:41 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dДумал, что можно отрабатывать отдельно записи основной сущности и отдельно те на которые ссылается основная, а далее произвести объединение Используй представления базы данных - view - для декомпозиции большого и сложного SQL запроса на несколько обозримых и простых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 15:28 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
mcureenab, Дело в том что запрос отрабатывается на одно подключение пользователя, следующий запрос - это новое подключение, а стало быть и view пролетает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 18:44 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dmcureenab, Дело в том что запрос отрабатывается на одно подключение пользователя, следующий запрос - это новое подключение, а стало быть и view пролетает Бред какой... Ты с view знаком? Можешь эту проблему с этого места поподробней? Я ещё понимаю, если сомнения с view будут в том, что: 1. Оптимизатор нормально (без тормозов в оптимизации) будет всегда выполнять запрос с view - тем более на разных БД 2. Удобно будет сопровождать: изменения в структуре таблиц могут потребовать изменений view - но в принципе, это проблема и для запросов без view ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 19:05 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, Это не совсем бред. View создается для пользователя с конкретными правами, он имеет доступ к 10 таблицам из 20 и объединение для него одно(view), другой с другими правами и в результате получаем некоторое множество объединений на одну и туже сущность, что согласитесь затратно будет. Ну да если выбрать view то схема такая получается: сначала строим view на основе 10 первых объединений, а потом достраиваем оставшиеся к нему объединения в несколько этапов. Но вот ведь незадача: представление – это таблица-результат выполнения <запроса выборки>. «Материализация» представления осуществляется СУБД каждый раз при выполнении запроса, в котором имеется ссылка на представление. Получается вроде как спасительное представление вновь вытягивается в мега запрос. Переработать схему тоже не выход, сущность определена в соответствие с требованиями нормативных документов. Другое дело - отработать не все поля, а соответственно и не все объединения. Косяк в этом случае возникнет если пользователь захочет фильтрануть по всем полям - вот тогда потребуются все объединения(вероятность не велика ~2%). Для примера простая схемка. Есть сущность "Персона" у нее имеется ссылочное поле на сущность "Адрес" (проживания\прописки), которое представляет собой КлАдр; ссылочное поле на сущность "Работа". В сущности работа есть ссылочное поле "Адрес"(рег. юр. лица) и многие др. ссылочные поля. Соответственно, когда пользователь захочет посмотреть экземпляр сущности "Персона", то она потянет за собой и все ссылочные поля сущности "Работа"(ну как например узнать всех персон, работающих по улице "Жданова"). Да как видно нельзя просто взять и объединить поля различных сущностей для простоты работы, например с "Персоной". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2010, 10:22 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_d, неправильно значит спроектированы зущности, связи надо выносить из персон и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2010, 15:16 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
Почему неправильно? Если по описанию предметной (тем самым "нормативным документам") области лицо находится в отношениях с местом работы, местом постоянной регистрации, местом временного проживания, местом рождения, местом заключения трудового договора (юрисдикция разных стран или субъектов тоже имеет значение), адресом для корреспонденции и юридическим адресом организации, в которой работает, так от этого никуда же не деться. :) Можно упрощать INNER/LEFT JOIN запросы разбивая их на подзапросы при помощи конструкция типа: Код: plaintext Это, кроме того, может по-разному сказаться на производительности, как в сторону улучшения, так и в сторону ухудшения. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2010, 20:32 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dДоброго времени суток. Вопрос: спроектировали БД, где для нахождения одной из сущностей требуется произвести 48 объединений(остальные гораздо меньше ~4-8), это в первую очередь связано с наличием многочисленных адресов, а также ссылками из этой сущности на др. сущности, которые содержат ссылки опять же на сущность "Адреса"(КЛАДР). В целом что бы вытянуть запись или фильтрануть все экземпляры сущности надо построить дикой запрос, отрабатывать который СУБД отказывается. Есть ли технологии в проектирование, которые позволяют доразбить сущности. Думал, что можно отрабатывать отдельно записи основной сущности и отдельно те на которые ссылается основная, а далее произвести объединение в ручную, но вроде как это должна делать СУБД. Может у кого есть опыт в подобных вопросах. Что значит "построить дикий запрос"? Вы же его не программируете, надеюсь. Ну сформировал пользователь, используя естественные метаданные (объекты и связи между ними) такой запрос, а СУБД его просто должна выполнить. Если не выполняет, обратитесь к разработчикам СУБД, чтобы исправили ошибку:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2010, 21:47 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
Kew, Вот спасибо: первый дельный ответ. Сегодня попробую(правда последний раз когда я делал подзапросы, на основе приведенных примеров, СУБД ЛИНТЕР говорила "НУ и запросы у вас" и подвисала - ну это вопрос конечно к разработчикам). А запросы я сам не программирую, их генерирует наш модуль на основе описания БД. Своего инструмента у ЛИНТЕР нет(точнее он в убогом зачаточном состояние). С временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу. Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности, на которую ссылается поле. Наверное надо смотреть в эту сторону, только вопрос с фильтрацией остается открытым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 08:25 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_d Понравилось как сделано в 1С. У 1С тоже узких мест хватает. Так что ... Напиши нужный тебе запрос в хранимке и дергай из приложения. Это самое простое решение. Для удобства можешь написать хранимки для каждого шага и запускать нужную тебе цепочку, по скорости потеряешь пар секунд но зато будет понятная и самое важное легко реконструируемая структура запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 10:14 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dС временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу. View это не временная таблца, а инкапсулированный текст подзапроса. Материализованное представление, это таблица построенная по результату запроса в представлении. Если не делать материализацию представления, то подзапрос в нём будет выполняться всякий раз, когда выполняется запрос вкотором это представление используется как источник данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 14:07 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dKew, Вот спасибо: первый дельный ответ. Сегодня попробую(правда последний раз когда я делал подзапросы, на основе приведенных примеров, СУБД ЛИНТЕР говорила "НУ и запросы у вас" и подвисала - ну это вопрос конечно к разработчикам). А запросы я сам не программирую, их генерирует наш модуль на основе описания БД. Своего инструмента у ЛИНТЕР нет(точнее он в убогом зачаточном состояние). С временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу. Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности, на которую ссылается поле. Наверное надо смотреть в эту сторону, только вопрос с фильтрацией остается открытым. Все это (настраиваемый вывод характеристик экземпляра по связям 1:1) давно сделано до 1С. Это на уровне навигации по данным (взаимосвязанным объектам). И с фильтрацией не может быть никаких проблем. В схеме запроса есть взаимосвязанные объекты, на характеристики которых устанавливаются условия. В чем проблемы с фильтрацией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 20:54 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
Бредятина, Можно уточнить как это ссылочное поле превращается в связь 1:1. Например есть сущности "Персона" и "Работа". В "Персона" есть ссылочное поле на "Работа". При этом один экземпляр сущности "Работа" может принадлежать множеству экземпляров сущности "Персона". Так как же тут без join обойтися. Подскажите, может где подробно написано, как это круто сделано(ну круче чем в 1С), может даже исходники есть. Сейчас важна любая информация. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 08:11 |
|
||
|
Максимальное кол-во объединений
|
|||
|---|---|---|---|
|
#18+
sedoi_dБредятина, Можно уточнить как это ссылочное поле превращается в связь 1:1. Например есть сущности "Персона" и "Работа". В "Персона" есть ссылочное поле на "Работа". При этом один экземпляр сущности "Работа" может принадлежать множеству экземпляров сущности "Персона". Так как же тут без join обойтися. Подскажите, может где подробно написано, как это круто сделано(ну круче чем в 1С), может даже исходники есть. Сейчас важна любая информация. Спасибо Это Вам нужно уточнять, что Вы имеете в виду. Тогда и я все что нужно уточню. Вот Ваша фраза дословно (только выделено жирным шрифтом мной специально для Вас:)): "Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности , на которую ссылается поле." Так что Вы просто смешали в своем последнем сообщении два разных вопроса. А в моем предыдущем сообщении они именно разделены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2010, 15:47 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36865586&tid=1542523]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 451ms |

| 0 / 0 |
