powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Поиск по произвольному набору условий
6 сообщений из 6, страница 1 из 1
Поиск по произвольному набору условий
    #32447231
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть вопрос не совсем по теме форума, но поскольку система будет писаться на ASA 9.0.1 и соответственно будут работать особенности оптимизатора запросов именно этого сервера, пишу сюда. :)

Описание условий:

Классическая стурктура для хранения информации по учету заключения договоров - справочники фирм, справочники физ. лиц, информация о платежах, прочие реквизиты договоров. Основная таблица - договор, который как сам содержит ссылки на участников договора, так и на него ссылаются другие таблицы, например платежи.

Задача:

Нужно реализовать универсальный механизм поиска данных по произвольному набору реквизитов, касающихся договора, например: по дате заключения; дате рождения человека, заключающего договор; сумме платежа; дате платежа и т.п. Набор возвращаемых полей постоянный, т.е. меняются только условия поиска.

Поскольку информация хранится в разных таблицах, первое, что приходит в голову - создать view, в котором выбираются поля для отображения, а условия поиска подключать коррелированными подзапросами с условием

and exists (select 1 from table1 where table_id = view_id)

Такое было успешно проделано и работает в других системах по сей день. Не устраивает то, что иногда приходится очень сложно описывать эти самые подзапросы и кроме того, если искать по большому набору реквизитов, возникают опасения насчет скорости работы такого запроса при большом объеме базы.

Решал ли кто-нибудь подобные задачи и как выходил из положения?
...
Рейтинг: 0 / 0
Поиск по произвольному набору условий
    #32447888
Guset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если это будет "Классическая стурктура для хранения информации", то Вам нужен не ASA, а IQ.
...
Рейтинг: 0 / 0
Поиск по произвольному набору условий
    #32448050
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такое реализовано очень просто:
1. Есть глобальная темповая таблица с полем ID
2. В нее клиент выбирает все подходящие под фильтр ID:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO  "Filter"  (ID)
SELECT DISTINCT Table1.ID
FROM Table1
  INNER JOIN Table2
  INNER JOIN Table3
  ...и так далее
WHERE ... сюда пишутся все нужные условия клиентом

SELECT @@ROWCOUNT AS RowCount; // кол-во выбранных
3. Если чего то выбрано, клиент спрашивает подтверждение у пользователя
4. Если подтверждение получено, то далее делаем что надо, используя ID с глобальной временной таблицы.

Схема прекрасно работает, не смотря на то, что в запросе перечислены все таблицы и из них может быть в фильтре потребуется только одна. Оптимизатор ASA выкидывает из построения плана запроса ненужные таблицы и соотвествующе скорость работы будет нормальной. Ну а поиск по условиям фильтра естественно разруливается с помощью соответствующих индексов.

В клиентской части для Delphi у меня даже написан специальный компонент, который позволяет регистрировать группы условий фильтра, универсально запрашивать параметры каждой группы условий и централизованно все обрабатывать. Сейчас вот буду переписывать его на PB.
...
Рейтинг: 0 / 0
Поиск по произвольному набору условий
    #32448357
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSСхема прекрасно работает, не смотря на то, что в запросе перечислены все таблицы и из них может быть в фильтре потребуется только одна. Оптимизатор ASA выкидывает из построения плана запроса ненужные таблицы и соотвествующе скорость работы будет нормальной.

Примерно такой же вариант я когда-то делал для ASE, но там оптимизатор работает немного иначе и не всегда использовались те индексы, на которые я рассчитывал, приходилось указывать их явно и универсальность постепенно терялась. Здесь вроде бы ситуация с оптимизацией получше.

Возник такой вопрос: насколько я знаю, для ASA по умолчанию INNER JOIN = KEY JOIN, т.е. это получается строгий поиск, когда выполняются все условия и данные есть во всех связываемых таблицах. Не совсем ясно, что произойдет, если в одной из объединяемых таблиц нет данных по логической связке и в данном наборе условий поиска ее поля не используются?

Например, если в схеме

Код: plaintext
1.
2.
3.
4.
5.
Участники договора
   |
Договор - Платежи
   |
Условия договора


еще нет платежей, но нужно найти все договора с определенным участником. Выкинет ли оптимизатор эту таблицу и вернет какой-то набор данных или все-таки ничего не вернет?

К тому же, "аппетит приходит во время еды" :), заказчик сказал, что было бы неплохо еще реализовать возможность указывать приоритет критерия, по принципу "важно" - "не важно", чтобы одни условия поиска учитывались строго, а другие - нет, в этом случае такой подход, скорее всего, не сработает. Хотя это было просто пожелание, а не требование и в ТЗ не будет включено, хотелось бы найти решение и такой задачи. :)
...
Рейтинг: 0 / 0
Поиск по произвольному набору условий
    #32448540
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВозник такой вопрос: насколько я знаю, для ASA по умолчанию INNER JOIN = KEY JOIN, т.е. это получается строгий поиск, когда выполняются все условия и данные есть во всех связываемых таблицах. Не совсем ясно, что произойдет, если в одной из объединяемых таблиц нет данных по логической связке и в данном наборе условий поиска ее поля не используются?
Для таких случаев нужно использовать [KEY] LEFT JOIN. Соответствующе если в WHERE ничего на таблицу указано не будет, оптимизатор ее выкинет из плана запроса, если будет, то включит и использует так же, как и INNER JOIN.
...
Рейтинг: 0 / 0
Поиск по произвольному набору условий
    #32448895
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS

Спасибо, попробую такой поиск на одной старых систем.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Поиск по произвольному набору условий
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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