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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Если не делать материализацию представления, то подзапрос в нём будет выполняться всякий раз, когда выполняется запрос вкотором это представление используется как источник данных.
...
Рейтинг: 0 / 0
27.09.2010, 20:54
    #36868797
Бредятина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное кол-во объединений
sedoi_dKew,
Вот спасибо: первый дельный ответ. Сегодня попробую(правда последний раз когда я делал подзапросы, на основе приведенных примеров, СУБД ЛИНТЕР говорила "НУ и запросы у вас" и подвисала - ну это вопрос конечно к разработчикам). А запросы я сам не программирую, их генерирует наш модуль на основе описания БД. Своего инструмента у ЛИНТЕР нет(точнее он в убогом зачаточном состояние). С временными таблицами(view) я проблему описывал: не очень они ложатся на нашу задачу.
Понравилось как сделано в 1С. У них есть ссылочные поля, но в значение его выводится некая обобщенная информация об экземпляре сущности, на которую ссылается поле. Наверное надо смотреть в эту сторону, только вопрос с фильтрацией остается открытым.
Все это (настраиваемый вывод характеристик экземпляра по связям 1:1) давно сделано до 1С. Это на уровне навигации по данным (взаимосвязанным объектам). И с фильтрацией не может быть никаких проблем. В схеме запроса есть взаимосвязанные объекты, на характеристики которых устанавливаются условия. В чем проблемы с фильтрацией?
...
Рейтинг: 0 / 0
30.09.2010, 08:11
    #36873510
sedoi_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное кол-во объединений
Бредятина, Можно уточнить как это ссылочное поле превращается в связь 1:1. Например есть сущности "Персона" и "Работа". В "Персона" есть ссылочное поле на "Работа". При этом один экземпляр сущности "Работа" может принадлежать множеству экземпляров сущности "Персона". Так как же тут без join обойтися. Подскажите, может где подробно написано, как это круто сделано(ну круче чем в 1С), может даже исходники есть. Сейчас важна любая информация. Спасибо
...
Рейтинг: 0 / 0
30.09.2010, 15:47
    #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]