Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Как хранить множество в Paradox e?   Найти похожие ветки 

 
G2   (2006-10-24 14:24) [0]

Дайте совет новичку: в поле какого типа данных лучше хранить множество (набор чисел от 1 до, скажем, 250) в Paradox"e? Можно как набор битов в LongInteger, но тогда получаем ограничение 32 вместо 250, можно как набор символов в строке. Но все это выглядит притянутым за уши. Не существует ли стандартных решений для храниения множества?


 
Anatoly Podgoretsky ©   (2006-10-24 14:36) [1]

В любом BLOB или преоразовывать в Hex строку A 64


 
G2   (2006-10-24 15:04) [2]

А каким образом искать по BLOB-полю?
Я к тому, что вхождение битов - математика, набор символов - по шаблону, а здесь как? Я, честно говоря никогда с ними не сталкивался.


 
Anatoly Podgoretsky ©   (2006-10-24 15:06) [3]

Ни каким, это не предусмотрено по стандарту и что же ты собрался искать в случае множеств?


 
G2   (2006-10-24 15:07) [4]

Вхождение


 
novill ©   (2006-10-24 15:09) [5]

> [0] G2   (24.10.06 14:24)

А битами символов строки?
32 символа всего...


 
Сергей М. ©   (2006-10-24 15:10) [6]


> G2   (24.10.06 15:07) [4]


В случае с Парадоксом придется тянуть весь блоб на сторону клиента и там уже анализировать на предмет вхождения.


 
G2   (2006-10-24 15:16) [7]


> novill ©   (24.10.06 15:09) [5]
> А битами символов строки? 32 символа всего...

Это как? В смысле как запрос строить? Если строка 250 символов - то понятно: номер символа в строке - это число, сам символ, например 0/1 - входит/не входит в множество, дальше не трудно сформировать шаблон. Я не понял идею, туплю к вечеру потихоньку.


 
G2   (2006-10-24 15:19) [8]


> Сергей М. ©   (24.10.06 15:10) [6]
> В случае с Парадоксом придется тянуть весь блоб на сторону
> клиента и там уже анализировать на предмет вхождения.

Стороны клиента нет - локалка (BDE). Это что-то упрощает? Или все равно анализировать каждую запись в таблице?


 
Сергей М. ©   (2006-10-24 15:28) [9]


> G2   (24.10.06 15:19) [8]


> Стороны клиента нет


Клиент есть всегда.


> Это что-то упрощает?


Абсолютно никак.


> анализировать каждую запись в таблице?


При чем здесь каждая запись ?
Ты же вроде бы повел речь о поиске вхождения в конкретное множество, представленное конкретным блоб-полем конкретной записи конкретного НД ?


 
G2   (2006-10-24 15:35) [10]


> Сергей М. ©   (24.10.06 15:28) [9]
> Ты же вроде бы повел речь о поиске вхождения в конкретное
> множество, представленное конкретным блоб-полем конкретной
> записи конкретного НД ?

Не вполне владею терминологией, извините. НД в моем случае вся таблица. В каждой записи таблицы в требуемом поле множество может быть свое. Предельное множество: 1..250. Например, нужно найти записи с множествами, в которые входят 1, 3, 6 и не входит 11.


 
novill ©   (2006-10-24 15:38) [11]

> [5] novill ©   (24.10.06 15:09)
>
> А битами символов строки?
> 32 символа всего...

- это не ответ на вопрос Не существует ли стандартных решений для храниения множества?

Стандарное решение для хранения множеств - отдельная таблица типа
id записи в главной таблице, элемент множества.


 
Anatoly Podgoretsky ©   (2006-10-24 15:43) [12]

Если бы Парадокс или другая база поддерживали оператор IN для множеств, то искать бы можно было, а так на клиенте ручками, перебор по всей таблице, или как сказали делаешь текстовое поле и из "0" и "1", тогда можешь делать запрос с подстановочными символами, но это будет не совсем множество, а его иммитация через текстовое поле, но такое не доступно для полного множеста, но твой случай проходит через ограничения.


 
Anatoly Podgoretsky ©   (2006-10-24 15:46) [13]


> Предельное множество: 1..250. Например, нужно найти записи
> с множествами, в которые входят 1, 3, 6 и не входит 11.


Запрос в этом случае был бы такой where myset like "1?1??1????0%"


 
G2   (2006-10-24 15:47) [14]


> Стандарное решение для хранения множеств - отдельная таблица
> типа
> id записи в главной таблице, элемент множества.

Я извиняюсь еще раз и еще много раз, за непонятливость. У меня бит из множества это и есть идентификатор. Естественно в другой таблице расписано что он означает (т.е. Id=Value). Но ! в главной то таблице мне нужно иметь как раз множество, или, следуя Вашей логике, мне нужна еще одна таблица описывающая все воможные варианты наполнения множества, идентификатор каждого такого вырианта и уже его - в главную таблицу?


 
Anatoly Podgoretsky ©   (2006-10-24 15:47) [15]


> Стандарное решение для хранения множеств - отдельная таблица
> типа
> id записи в главной таблице, элемент множества.

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


 
G2   (2006-10-24 15:50) [16]


> 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:56) [17]

То есть ты согласен с хранением в виде A 250, тогда это лучший вариант, только для построения запроса, части LIKE сделай несложную функцию, можно не экономить, а сделать ее однотипной из 256 символов, где 1 входит, 0 не входит и вопрос безразличное состояние. Это не сложно, а задачу твою решит. Алгоритм простой построить строку из 250 вопросов и затем заменить позиции на входит и позиции не входит. Что бы не ломать голову с каждым запросом.


 
Сергей М. ©   (2006-10-24 15:58) [18]


> G2   (24.10.06 15:35) [10]



> НД в моем случае вся таблица


Не суть как важно в дан.случае.

Но ты с блобами-то определился ?


 
G2   (2006-10-24 16:01) [19]


> Anatoly Podgoretsky ©   (24.10.06 15:43) [12]
>
> Если бы Парадокс или другая база поддерживали оператор IN
> для множеств, то искать бы можно было

Я до этого аналогичную задачу делал через вхождение битов в число, т.е.
суммируются: (число) в степени 2, результирующая сумма - аналог множества. Но одно поле Int - предел в 32, сумма двух - 64, а дальше наращивать невозможно. Да и запросы те еще: в половине случаев приводить к строке и тот же шаблон, только формировать его не проще.

Спасибо за подтверждение, делаю через А250.


 
G2   (2006-10-24 16:04) [20]


> Anatoly Podgoretsky ©   (24.10.06 15:56) [17]

Вот только увидел [17], еще раз спасибо.


 
novill ©   (2006-10-24 16:04) [21]


> [17] Anatoly Podgoretsky ©   (24.10.06 15:56)

Похоже это самый для G2 подходящий вариант.

А вариант
>битами символов строки?  32 символа всего
для Парадокса скорее всего не подойдет. В базах помощнее можно было прикрутить побитовые операции.


 
Anatoly Podgoretsky ©   (2006-10-24 16:15) [22]

Я не знаю ни одной, где бы битовые операции были поддержаны на уровне клиентских запросов. Да и зачем по задаче отлично подходит вариант с A250


 
novill ©   (2006-10-24 16:26) [23]

> где бы битовые операции были поддержаны на уровне клиентских
> запросов

Postgres, подключаемо в IB



Страницы: 1 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.046 c
15-1161548226
brrrrr
2006-10-23 00:17
2006.11.12
Продажа бу ноутбука. Где бы продать?


15-1161959310
ArtemESC
2006-10-27 18:28
2006.11.12
ICQ - Не пойму как там регистрировать?


15-1161670447
zdm
2006-10-24 10:14
2006.11.12
mdi


2-1161786064
Галинка
2006-10-25 18:21
2006.11.12
Картинки в DLL


15-1161552124
RASkov
2006-10-23 01:22
2006.11.12
Посмотрите