Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как хранить множество в Paradox'e? [D6, Paradox]


Страницы:   1 2

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]

Вхождение


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо