![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как хранить множество в Paradox'e? [D6, Paradox]
G2 © (2006-10-24 14:24:00)Дайте совет новичку: в поле какого типа данных лучше хранить множество (набор чисел от 1 до, скажем, 250) в Paradox'e? Можно как набор битов в LongInteger, но тогда получаем ограничение 32 вместо 250, можно как набор символов в строке. Но все это выглядит притянутым за уши. Не существует ли стандартных решений для храниения множества?
novill (2006-10-24 16:26:00) [1]> где бы битовые операции были поддержаны на уровне клиентских
> запросов
Postgres, подключаемо в IB
Anatoly Podgoretsky (2006-10-24 16:15:00) [2]Я не знаю ни одной, где бы битовые операции были поддержаны на уровне клиентских запросов. Да и зачем по задаче отлично подходит вариант с A250
novill (2006-10-24 16:04:00) [3]
> [17] Anatoly Podgoretsky © (24.10.06 15:56)
Похоже это самый для G2 подходящий вариант.
А вариант
>битами символов строки? 32 символа всего
для Парадокса скорее всего не подойдет. В базах помощнее можно было прикрутить побитовые операции.
G2 (2006-10-24 16:04:00) [4]
> Anatoly Podgoretsky © (24.10.06 15:56) [17]
Вот только увидел [17], еще раз спасибо.
G2 (2006-10-24 16:01:00) [5]
> Anatoly Podgoretsky © (24.10.06 15:43) [12]
>
> Если бы Парадокс или другая база поддерживали оператор IN
> для множеств, то искать бы можно было
Я до этого аналогичную задачу делал через вхождение битов в число, т.е.
суммируются: (число) в степени 2, результирующая сумма - аналог множества. Но одно поле Int - предел в 32, сумма двух - 64, а дальше наращивать невозможно. Да и запросы те еще: в половине случаев приводить к строке и тот же шаблон, только формировать его не проще.
Спасибо за подтверждение, делаю через А250.
Сергей М. (2006-10-24 15:58:00) [6]
> G2 (24.10.06 15:35) [10]
> НД в моем случае вся таблица
Не суть как важно в дан.случае.
Но ты с блобами-то определился ?
Anatoly Podgoretsky (2006-10-24 15:56:00) [7]То есть ты согласен с хранением в виде A 250, тогда это лучший вариант, только для построения запроса, части LIKE сделай несложную функцию, можно не экономить, а сделать ее однотипной из 256 символов, где 1 входит, 0 не входит и вопрос безразличное состояние. Это не сложно, а задачу твою решит. Алгоритм простой построить строку из 250 вопросов и затем заменить позиции на входит и позиции не входит. Что бы не ломать голову с каждым запросом.
G2 (2006-10-24 15:50:00) [8]
> Anatoly Podgoretsky © (24.10.06 15:46) [13]
> > Предельное множество: 1..250. Например, нужно найти записи
> > с множествами, в которые входят 1, 3, 6 и не входит 11.
> Запрос в этом случае был бы такой where myset like '1?1?
> ?1????0%'
Да, я к этому и веду, просто до сих пор не понял:
> novill © (24.10.06 15:09) [5]
> А битами символов строки? 32 символа всего
Anatoly Podgoretsky (2006-10-24 15:47:00) [9]
> Стандарное решение для хранения множеств - отдельная таблица
> типа
> id записи в главной таблице, элемент множества.
Это тоже вариант, реляционный, но запрос в худшем случае будет состоять из 250 параметров, что врядли потянет не только Парадокс, но и большинство более мощных баз, если такие вообще найдутся.
G2 (2006-10-24 15:47:00) [10]
> Стандарное решение для хранения множеств - отдельная таблица
> типа
> id записи в главной таблице, элемент множества.
Я извиняюсь еще раз и еще много раз, за непонятливость. У меня бит из множества это и есть идентификатор. Естественно в другой таблице расписано что он означает (т.е. Id=Value). Но ! в главной то таблице мне нужно иметь как раз множество, или, следуя Вашей логике, мне нужна еще одна таблица описывающая все воможные варианты наполнения множества, идентификатор каждого такого вырианта и уже его - в главную таблицу?
Anatoly Podgoretsky (2006-10-24 15:46:00) [11]
> Предельное множество: 1..250. Например, нужно найти записи
> с множествами, в которые входят 1, 3, 6 и не входит 11.
Запрос в этом случае был бы такойwhere myset like '1?1??1????0%'
Anatoly Podgoretsky (2006-10-24 15:43:00) [12]Если бы Парадокс или другая база поддерживали оператор IN для множеств, то искать бы можно было, а так на клиенте ручками, перебор по всей таблице, или как сказали делаешь текстовое поле и из "0" и "1", тогда можешь делать запрос с подстановочными символами, но это будет не совсем множество, а его иммитация через текстовое поле, но такое не доступно для полного множеста, но твой случай проходит через ограничения.
novill (2006-10-24 15:38:00) [13]> [5] novill © (24.10.06 15:09)
>
> А битами символов строки?
> 32 символа всего...
- это не ответ на вопрос Не существует ли стандартных решений для храниения множества?
Стандарное решение для хранения множеств - отдельная таблица типа
id записи в главной таблице, элемент множества.
G2 (2006-10-24 15:35:00) [14]
> Сергей М. © (24.10.06 15:28) [9]
> Ты же вроде бы повел речь о поиске вхождения в конкретное
> множество, представленное конкретным блоб-полем конкретной
> записи конкретного НД ?
Не вполне владею терминологией, извините. НД в моем случае вся таблица. В каждой записи таблицы в требуемом поле множество может быть свое. Предельное множество: 1..250. Например, нужно найти записи с множествами, в которые входят 1, 3, 6 и не входит 11.
Сергей М. (2006-10-24 15:28:00) [15]
> G2 (24.10.06 15:19) [8]
> Стороны клиента нет
Клиент есть всегда.
> Это что-то упрощает?
Абсолютно никак.
> анализировать каждую запись в таблице?
При чем здесь каждая запись ?
Ты же вроде бы повел речь о поиске вхождения в конкретное множество, представленное конкретным блоб-полем конкретной записи конкретного НД ?
G2 (2006-10-24 15:19:00) [16]
> Сергей М. © (24.10.06 15:10) [6]
> В случае с Парадоксом придется тянуть весь блоб на сторону
> клиента и там уже анализировать на предмет вхождения.
Стороны клиента нет - локалка (BDE). Это что-то упрощает? Или все равно анализировать каждую запись в таблице?
G2 (2006-10-24 15:16:00) [17]
> novill © (24.10.06 15:09) [5]
> А битами символов строки? 32 символа всего...
Это как? В смысле как запрос строить? Если строка 250 символов - то понятно: номер символа в строке - это число, сам символ, например 0/1 - входит/не входит в множество, дальше не трудно сформировать шаблон. Я не понял идею, туплю к вечеру потихоньку.
Сергей М. (2006-10-24 15:10:00) [18]
> G2 (24.10.06 15:07) [4]
В случае с Парадоксом придется тянуть весь блоб на сторону клиента и там уже анализировать на предмет вхождения.
novill (2006-10-24 15:09:00) [19]> [0] G2 (24.10.06 14:24)
А битами символов строки?
32 символа всего...
G2 (2006-10-24 15:07:00) [20]Вхождение