powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Максимальное кол-во объединений
23 сообщений из 23, страница 1 из 1
Максимальное кол-во объединений
    #36863188
sedoi_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Вопрос: спроектировали БД, где для нахождения одной из сущностей требуется произвести 48 объединений(остальные гораздо меньше ~4-8), это в первую очередь связано с наличием многочисленных адресов, а также ссылками из этой сущности на др. сущности, которые содержат ссылки опять же на сущность "Адреса"(КЛАДР). В целом что бы вытянуть запись или фильтрануть все экземпляры сущности надо построить дикой запрос, отрабатывать который СУБД отказывается. Есть ли технологии в проектирование, которые позволяют доразбить сущности. Думал, что можно отрабатывать отдельно записи основной сущности и отдельно те на которые ссылается основная, а далее произвести объединение в ручную, но вроде как это должна делать СУБД. Может у кого есть опыт в подобных вопросах.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36863211
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_d, вам нужны ответы тлько из области теории - или решить проблему?
Если второе - не помешало бы указать используемую Вами СУБД. Ну или подтвердить, что соответствующий вопрос на проыильном форуме этой БД Вы уже задали :)
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36863774
sedoi_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛой, Мне нужно конкретное решение для СУБД ЛИНТЕР, да в принципе та же проблема и в MySQL - потому решение в одной из них подойдет и для другой. Возможно что есть решение и на уровне теории. Ну там как разделить сущность и пр. ТОлько вот с разделением не понятно: как потом фильтровать и пр. - опять придется объединять. Вот и получается, что ходим по замкнутому кругу.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36863892
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример запроса неплохо бы показать.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36863981
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dАнатоЛой, Мне нужно конкретное решение для СУБД ЛИНТЕР, да в принципе та же проблема и в MySQL - потому решение в одной из них подойдет и для другой. Возможно что есть решение и на уровне теории. Ну там как разделить сущность и пр. ТОлько вот с разделением не понятно: как потом фильтровать и пр. - опять придется объединять. Вот и получается, что ходим по замкнутому кругу.Мне кажется, что модель БД, с которой в обычных запросах требуется делать 48 соединений, неправильная, независимо от того, смогут такие запросы выполняться на распространённых СУБД или нет.

Бывают, конечно всякие "звёзды" в олапах, но там действительно используются специально заточенные субд...
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36864010
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_d,

Ответ на проблему в Вашем вопросе. Т.е. вы неправильно спроектировали БД.
Ответ на вопрос кроется или в коде или в ограничении времени выполнения запроса. Но я полностью согласен что получать данные методом терморектального анализа не есть хорошо.

Правильное решение - перестроить БД, но это потребует времени и самое важное наличия человека который понимает что и как сделать.
Решение временное - править код или для начала увеличить время ожидания выполнения запроса. Как по мне - видимо ошибка в коде, знаете иногда заскакивает планка и вместо прямого пути выбираешь путь Сусанина. Покажите код с описанием и вероятно вам смогут что-то предложить более конкретное.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36864018
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спроектировали БД, где для нахождения одной из сущностей требуется произвести 48 объединенийУвольте архитектора и доведите значение до 5-7 максимум. :)
Не верю, что это невозможно.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36864318
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_d wrote:

> Доброго времени суток. Вопрос: спроектировали БД, где для нахождения
> одной из сущностей требуется произвести 48 объединений(остальные гораздо
> меньше ~4-8),

Если там N таблиц с одной структурой, слей их в одну таблицу.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36864681
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
sedoi_d wrote:

> Доброго времени суток. Вопрос: спроектировали БД, где для нахождения
> одной из сущностей требуется произвести 48 объединений(остальные гораздо
> меньше ~4-8),

Если там N таблиц с одной структурой, слей их в одну таблицу.


Не забыв добавить поле-признак, по которому сможешь отличить, где данные из бывшей таблицы "А1", а где из "А5"...
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36864794
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой wrote:

> Не забыв добавить поле-признак, по которому сможешь отличить, где данные
> из бывшей таблицы "А1", а где из "А5"...

Ну это возможно и не надо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36865163
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dДумал, что можно отрабатывать отдельно записи основной сущности и отдельно те на которые ссылается основная, а далее произвести объединение

Используй представления базы данных - view - для декомпозиции большого и сложного SQL запроса на несколько обозримых и простых.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36865586
sedoi_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab, Дело в том что запрос отрабатывается на одно подключение пользователя, следующий запрос - это новое подключение, а стало быть и view пролетает
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36865609
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dmcureenab, Дело в том что запрос отрабатывается на одно подключение пользователя, следующий запрос - это новое подключение, а стало быть и view пролетает
Бред какой... Ты с view знаком? Можешь эту проблему с этого места поподробней?

Я ещё понимаю, если сомнения с view будут в том, что:
1. Оптимизатор нормально (без тормозов в оптимизации) будет всегда выполнять запрос с view - тем более на разных БД
2. Удобно будет сопровождать: изменения в структуре таблиц могут потребовать изменений view - но в принципе, это проблема и для запросов без view
...
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36866539
sedoi_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛой, Это не совсем бред. View создается для пользователя с конкретными правами, он имеет доступ к 10 таблицам из 20 и объединение для него одно(view), другой с другими правами и в результате получаем некоторое множество объединений на одну и туже сущность, что согласитесь затратно будет. Ну да если выбрать view то схема такая получается: сначала строим view на основе 10 первых объединений, а потом достраиваем оставшиеся к нему объединения в несколько этапов. Но вот ведь незадача: представление – это таблица-результат выполнения <запроса выборки>.
«Материализация» представления осуществляется СУБД каждый раз при выполнении запроса, в котором имеется ссылка на представление. Получается вроде как спасительное представление вновь вытягивается в мега запрос.
Переработать схему тоже не выход, сущность определена в соответствие с требованиями нормативных документов. Другое дело - отработать не все поля, а соответственно и не все объединения. Косяк в этом случае возникнет если пользователь захочет фильтрануть по всем полям - вот тогда потребуются все объединения(вероятность не велика ~2%). Для примера простая схемка.
Есть сущность "Персона" у нее имеется ссылочное поле на сущность "Адрес" (проживания\прописки), которое представляет собой КлАдр; ссылочное поле на сущность "Работа". В сущности работа есть ссылочное поле "Адрес"(рег. юр. лица) и многие др. ссылочные поля. Соответственно, когда пользователь захочет посмотреть экземпляр сущности "Персона", то она потянет за собой и все ссылочные поля сущности "Работа"(ну как например узнать всех персон, работающих по улице "Жданова"). Да как видно нельзя просто взять и объединить поля различных сущностей для простоты работы, например с "Персоной".
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36866776
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_d,

неправильно значит спроектированы зущности, связи надо выносить из персон и т.д.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36867004
Kew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему неправильно?

Если по описанию предметной (тем самым "нормативным документам") области лицо находится в отношениях с местом работы, местом постоянной регистрации, местом временного проживания, местом рождения, местом заключения трудового договора (юрисдикция разных стран или субъектов тоже имеет значение), адресом для корреспонденции и юридическим адресом организации, в которой работает, так от этого никуда же не деться. :)

Можно упрощать INNER/LEFT JOIN запросы разбивая их на подзапросы при помощи конструкция типа:
Код: plaintext
.. WHERE лицо.ид_адреса_постоянной_регистрации IN ([а тут подзапрос, формирующий необходимый список в соответсвии с критериями отбора этих самых адресов]) ...
Можно даже подзапросы материализовать во временные таблицы.
Это, кроме того, может по-разному сказаться на производительности, как в сторону улучшения, так и в сторону ухудшения. :)
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36867076
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dДоброго времени суток. Вопрос: спроектировали БД, где для нахождения одной из сущностей требуется произвести 48 объединений(остальные гораздо меньше ~4-8), это в первую очередь связано с наличием многочисленных адресов, а также ссылками из этой сущности на др. сущности, которые содержат ссылки опять же на сущность "Адреса"(КЛАДР). В целом что бы вытянуть запись или фильтрануть все экземпляры сущности надо построить дикой запрос, отрабатывать который СУБД отказывается. Есть ли технологии в проектирование, которые позволяют доразбить сущности. Думал, что можно отрабатывать отдельно записи основной сущности и отдельно те на которые ссылается основная, а далее произвести объединение в ручную, но вроде как это должна делать СУБД. Может у кого есть опыт в подобных вопросах.
Что значит "построить дикий запрос"? Вы же его не программируете, надеюсь. Ну сформировал пользователь, используя естественные метаданные (объекты и связи между ними) такой запрос, а СУБД его просто должна выполнить. Если не выполняет, обратитесь к разработчикам СУБД, чтобы исправили ошибку:)
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36867300
sedoi_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kew,
Вот спасибо: первый дельный ответ. Сегодня попробую(правда последний раз когда я делал подзапросы, на основе приведенных примеров, СУБД ЛИНТЕР говорила "НУ и запросы у вас" и подвисала - ну это вопрос конечно к разработчикам). А запросы я сам не программирую, их генерирует наш модуль на основе описания БД. Своего инструмента у ЛИНТЕР нет(точнее он в убогом зачаточном состояние). С временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу.
Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности, на которую ссылается поле. Наверное надо смотреть в эту сторону, только вопрос с фильтрацией остается открытым.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36867411
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_d Понравилось как сделано в 1С.
У 1С тоже узких мест хватает. Так что ...
Напиши нужный тебе запрос в хранимке и дергай из приложения. Это самое простое решение. Для удобства можешь написать хранимки для каждого шага и запускать нужную тебе цепочку, по скорости потеряешь пар секунд но зато будет понятная и самое важное легко реконструируемая структура запроса.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36867965
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dС временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу.

View это не временная таблца, а инкапсулированный текст подзапроса. Материализованное представление, это таблица построенная по результату запроса в представлении.

Если не делать материализацию представления, то подзапрос в нём будет выполняться всякий раз, когда выполняется запрос вкотором это представление используется как источник данных.
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36868797
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dKew,
Вот спасибо: первый дельный ответ. Сегодня попробую(правда последний раз когда я делал подзапросы, на основе приведенных примеров, СУБД ЛИНТЕР говорила "НУ и запросы у вас" и подвисала - ну это вопрос конечно к разработчикам). А запросы я сам не программирую, их генерирует наш модуль на основе описания БД. Своего инструмента у ЛИНТЕР нет(точнее он в убогом зачаточном состояние). С временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу.
Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности, на которую ссылается поле. Наверное надо смотреть в эту сторону, только вопрос с фильтрацией остается открытым.
Все это (настраиваемый вывод характеристик экземпляра по связям 1:1) давно сделано до 1С. Это на уровне навигации по данным (взаимосвязанным объектам). И с фильтрацией не может быть никаких проблем. В схеме запроса есть взаимосвязанные объекты, на характеристики которых устанавливаются условия. В чем проблемы с фильтрацией?
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36873510
sedoi_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бредятина, Можно уточнить как это ссылочное поле превращается в связь 1:1. Например есть сущности "Персона" и "Работа". В "Персона" есть ссылочное поле на "Работа". При этом один экземпляр сущности "Работа" может принадлежать множеству экземпляров сущности "Персона". Так как же тут без join обойтися. Подскажите, может где подробно написано, как это круто сделано(ну круче чем в 1С), может даже исходники есть. Сейчас важна любая информация. Спасибо
...
Рейтинг: 0 / 0
Максимальное кол-во объединений
    #36874889
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sedoi_dБредятина, Можно уточнить как это ссылочное поле превращается в связь 1:1. Например есть сущности "Персона" и "Работа". В "Персона" есть ссылочное поле на "Работа". При этом один экземпляр сущности "Работа" может принадлежать множеству экземпляров сущности "Персона". Так как же тут без join обойтися. Подскажите, может где подробно написано, как это круто сделано(ну круче чем в 1С), может даже исходники есть. Сейчас важна любая информация. Спасибо

Это Вам нужно уточнять, что Вы имеете в виду. Тогда и я все что нужно уточню.
Вот Ваша фраза дословно (только выделено жирным шрифтом мной специально для Вас:)):
"Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности , на которую ссылается поле."
Так что Вы просто смешали в своем последнем сообщении два разных вопроса. А в моем предыдущем сообщении они именно разделены.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Максимальное кол-во объединений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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