powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно составить справочник условий поиска?
15 сообщений из 15, страница 1 из 1
Как правильно составить справочник условий поиска?
    #34530410
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дня доброго, многознающий ALL!

Вот, заткнулся на вроде бы несложной (с виду) задачке, которую опишу на упрощённом примере:

Допустим, есть книжная база BBase , куда привозят книги Book из разных издательств Izdat , по разным ценам, разных авторов, разных жанров.
У базы есть клиенты Klient , которые хотят получать инфу о вновьприбывших книжках.
Но у каждого клиента свои требования Wants .
Один хочет знать, что пришли книги из конкретного издательства, другой - что есть книги конкретного жанра, третьему - в нужном ценовом диапазоне.

Так вот сложность у меня в том, как корректно сделать справочник требований клиентов (Wants) так, чтобы:
автоматически on insert BBase создавать некий док-т для каждого клиента

можно было легко добавить нового клиента со сложным желанием (ну, например, из конкретного издательства, конкретных авторов)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
table BBase
  book_id  int,
  Book_cnt  int

table Book
  book_id  int,
  Zhanr_id  int,
  Izdat_id  int,
  Name  char(),
  Author  char(),
  Cena  float

table Zhanr (Zhanr_id int ...)

Table Izdat (Izdat_id int ...)
  
table Klient(Klient_id  int ...)

table Wants
  Klient_id  int

  ...А дальше как???

Я ещё понимаю, если бы только 2-3 требования, пересекающиеся. И то у меня избыточность появляется... А ежели, допустим, ((Издат1+(Жанр1 или Жанр5)) или Автор1 или Автор7) и Цена<ХХХ

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

В общем, голова уже опухла думать, как ЭТО реализовать...
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530447
lepton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так, но не самый быстрый вариант
Код: plaintext
1.
2.
3.
4.
5.
Want_ID,
Klient_ID,
List_Izdat_ID,
List_Zhanr_ID,
List_Author_ID

Хранить null если все. Хранить список из айдишников через запятую, если несколько.

Сложная хранимая процедура будет выбирать нужные книжки.
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530625
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leptonМожно так, но не самый быстрый вариант
...
Сложная хранимая процедура будет выбирать нужные книжки.

ДыкЪ, не хотелось очень сложно делать... Да и я слишком упростил описание, как оказалось.
То есть, я забыл, что у меня есть данные в связанной таблице, диапазон изкоторой и надо выбирать...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
table T1
id1 int
data1 char

table T2
val_col1,
val_col2,
id1

То есть, мне нужны данные из диапазона значенийT2.val_col1 и T1.data1
А как это описать??? если в одном случае, мне нужно одна часть T1.data1, а в другом - другая
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530688
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosqТак вот сложность у меня в том, как корректно сделать справочник требований клиентов (Wants) так, чтобы:
Все довольно просто - храните желания клиентов в виде sql-выражения. По приходу очередной партии выполняйте

Код: plaintext
select book_id from books where <условие отбора последней партии> and <условие интереса клиента>

P.S. И лучше бы сразу учесть, что у книги бывает несколько авторов и жанров, цена - атрибут не книги, а партии, бывают сборники и все прочее, о чем я забыл, но легко нагуглить.
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530799
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerВсе довольно просто - храните желания клиентов в виде sql-выражения. По приходу очередной партии выполняйте

Т.е. надо будет всё равно динамически sql-выражение формировать, я правильно понял?
И хранить тогда <условие> в полном виде?
Код: plaintext
test_value in (select test_value from... where...)
А, кстати, как правильно написать, если test_value может принять, допустим, 3 char значения:
Код: plaintext
test_value in ("ДА","НЕТ","?")
Так, али я хлуп? ;)

softwarerP.S. И лучше бы сразу учесть, что у книги бывает несколько авторов и жанров, цена - атрибут не книги, а партии, бывают сборники и все прочее, о чем я забыл, но легко нагуглить.
Книги - это в качестве примера, реально всё подругому, посложнее.
Мне ведь принцип в данном случае важен.
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530834
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosqТ.е. надо будет всё равно динамически sql-выражение формировать, я правильно понял?
Либо вбивать их в интерфейс прямо в виде sql :)

Да, именно так. Не стоит этого бояться, формировать sql довольно легко, и особенно - на клиенте. Есть готовые компоненты, да и с нуля написать несложно.

В принципе можно обойтись без динамического sql - уложив условия в конфигурационную таблицу а-ля qbe и отбирая записи хитрым join-ом. Но во-первых, это заведомо неэффективно (у динамического sql есть шанс), а во-вторых, если у Вас вызывает затруднения последний заданный Вами вопрос, написать этот хитрый join Вы просто не сможете.

kosqИ хранить тогда <условие> в полном виде?
Не очень понимаю, что такое "полный вид", но в целом - как Вам будет удобнее.

kosqА, кстати, как правильно написать, если test_value может принять, допустим, 3 char значения:
Код: plaintext
test_value in ("ДА","НЕТ","?")
Так, али я хлуп? ;)
Как вариант.
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530842
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй представить внешний вид формы поиска, полагаю, исходя из этого представления структуры данных будет проще представить.

Кроме задания критерия поиска, как например в google или в секции where SQL запроса, есть старый, и ИМХО, достаточно простой для понимания, но мощный способ описания запроса - Query By Example (QBE).
Самый простой вариант - автофильтр в Excel'е.
Суть в том, что пользователь видит матрицу запроса. В ячейках матрицы пользователь задаёт искомое значение колонки таблицы с данными, которая соответствует колонке матрицы запроса или более сложные ограничения, например !=, <, >, between и т.п..
Все непустые поля в строке матрицы связаны оператором and. Условия составленные из разных строк матрицы связываются опертором or. Ну и дальше в таком духе.

Чтобы пользователь не думал о структуре БД и соединениях отношений, её нужно представить в виде одного отношения в 1НФ.
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530877
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer kosqТ.е. надо будет всё равно динамически sql-выражение формировать, я правильно понял?
Либо вбивать их в интерфейс прямо в виде sql :)
Хм... Или я таки туп или одно из двух :)
Код: plaintext
1.
2.
3.
4.
5.
table Wish
wish_id int,
klient_id int,
sql varchar()

insert into Wish select  1 , 1 ,'Tipogr_id = 15'

Теперь, если я делаю
Код: plaintext
1.
select book_id from books where <условие отбора последней партии> and <условие интереса клиента>
где <условие интереса клиента> = 'Tipogr_id = 15' как мне этот select book_id from books... дополнить сим условием? Разве можно обойтись как-нибудь без написания этого селекта динамически?

softwarer... формировать sql довольно легко...
Ну, сформировать-то действительно не проблема ;)
softwarerВ принципе можно обойтись без динамического sql - уложив условия в конфигурационную таблицу а-ля qbe и отбирая записи хитрым join-ом. Но во-первых, это заведомо неэффективно (у динамического sql есть шанс), а во-вторых, если у Вас вызывает затруднения последний заданный Вами вопрос, написать этот хитрый join Вы просто не сможете.
Мде... "уложив условия в конфигурационную таблицу а-ля qbe" пока для меня тёмный лес :)

softwarer
Код: plaintext
test_value in ("ДА","НЕТ","?")
Как вариант.
А кстати, какие ещё варианты? (кроме таблицы)
Увы, мы академиев не кончали © не помню откуда , а под рукой книжки нет, вот и плыву в тумане, как студент на сессии :))
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530881
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabПопробуй представить внешний вид формы поиска...
Чтобы пользователь не думал...
Пользователь тут не при чём: Автоматика, панымаишь :))
Хотя, если писать оболочку ввода требования клиента, то да - мысль того стОит
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530890
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosqкак мне этот select book_id from books... дополнить сим условием? Разве можно обойтись как-нибудь без написания этого селекта динамически?
Хм. Я не очень понимаю, неужели у Вас вызывает проблему конкатенация пары строк? Или что?
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530900
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я подозреваю, что мы говорим об одном и том же разными словами.
Речь в итоге идёт о
Код: plaintext
1.
select @result_sql='select book_id from books where'+sql from Wish where wish_id= 1 
sp_executesql @result_sql
?
Или же существует другой путь, мне неизвестный?
Может, я действительно не догоняю... :((
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530933
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosqРечь в итоге идёт о
Код: plaintext
1.
select @result_sql='select book_id from books where'+sql from Wish where wish_id= 1 
sp_executesql @result_sql
?
Или же существует другой путь, мне неизвестный?
Думаю, это вопрос к используемой Вами СУБД (и в соответствующий ей форум). Лично я - представления не имею, существует ли другой путь в некоей неизвестной мне СУБД :)
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34530937
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, конечно. Речь про MS SQL 2000
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34531119
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosqкак ЭТО реализовать...Как вариант, разбить один сложный запрос на цепочку более простых, которые и соединять с полученными на предыдущей итерации результатами. Грубый алгоритм:

1. Выбрать данные по условию, по которому будет получено минимальное количество записей. Например, во временную таблицу или табличную переменную.
2. Найти следующее, из оставшихся, условие, по которому будет получено минимальное количество записей.
3. В соответствии с условием соединения, добавляем в или удаляем из временной таблицы записи, получаемые по условию выбранному на предыдущем шаге.
4. Если остались еще условия, то переходим на шаг 2.
5. Возвращаем окончательный результат пользователю.

Эффективность такого подхода зависит от многих причин. И вполне может сильно проиграть решению с построением и выполнением динамического запроса. Но может и несильно. Основная проблема, в определении условий с минимальным количеством выбираемых записей. Для этого возможно придется вести свою статистику и опираться на нее при построении последовательности. Впрочем, в данном случае, пожалуй, все-таки проще строить динамически, так как даже этот вариант, похоже, вызывает у Вас сложности.
...
Рейтинг: 0 / 0
Как правильно составить справочник условий поиска?
    #34534365
kosq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся!
В своём конкретном случае реализовываю вариант softwarera.
Но не ожидал, что в функции нельзя запустить sp_executesql :(( (MS SQL 2000)
Однако, это явно тема другого топика...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно составить справочник условий поиска?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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