Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Как хранить множество в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.043 c
15-1161752978
nikolay_sch
2006-10-25 09:09
2006.11.12
Ошибка при инсталяции...


4-1151082659
GrBob
2006-06-23 21:10
2006.11.12
Удаленное подключение к SCM


2-1162125949
Проггер из библиотеки
2006-10-29 15:45
2006.11.12
TMemoryStream и расход памяти


2-1161730544
Raptoridze
2006-10-25 02:55
2006.11.12
webbrowser и кукисы


2-1161802535
Батя
2006-10-25 22:55
2006.11.12
как вставить в memo текст





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский