|
|
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть необходимость хранить некоторое кол-во (ну допусти 100) bool-вых значений в базе. У меня была идея сделать в таблице поле типа SQL_TEXT и значение true|false хранить путем установки/сброса определенного бита в определенном байте. Но чего-то как-то не очень получается :( т.к. сервер всеж-таки по моему подразумевает, что в поле типа SQL_TEXT будет хранится именно текст заканчивающийся '\0' Кто, что посоветует? Использовать блоб? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:05 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
а чем varchar|char не устраивает? размерность мала? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:13 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
А в чем сложность? Я, например, флаги ставлю в полях типа smallint 0 - false; 1 - true ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:17 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
я так понял что Kostya не хочет заводить кучу полей, а хочет завести строку '01010101010101010101000111' и проверять по позициям. я бы для этого использовал простую строку. правда саму ситуацию, лучше не допускать, обрабатывать ее ой как не удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:24 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
А не проще сделать табличку типа (TYPE Integer, ID Integer, B Bool). Зато не придётся менять алгоритм при изменении количества значений (а как показывает практика: все ограничения приходится иногда пересматривать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:27 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
2 Dik76: Varchar/Char не подходит, так как если случится так, что подряд 8 или более значений будут false , то может выйти \0 , который оборвет в этом месте строку :( 2 IGORRR: По условию должна быть строка bool `ей, а не несколько полей... Я для таких полей вообще всегда домен делаю. 2 Kostya.: Юзай blob. Или измени идеологию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:28 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
2 Dik76: Varchar/Char не подходит, так как если случится так, что подряд 8 или более значений будут false , то может выйти \0 , который оборвет в этом месте строку :( 2 IGORRR: По условию должна быть строка bool `ей, а не несколько полей... Я для таких полей вообще всегда домен делаю. 2 Kostya.: Юзай blob. Или измени идеологию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:30 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Попробую еще раз объяснить :) Допустим есть 100 переменных bool и что бы не заводить 100 переменных типа int, smallint и т.п. Я завел одно поле типа SQL_TEXT 64 byte. По идее теперь я мог бы хранить в нем все свои переменные используя состояние бита каждого байта. Но при попытке обновит напр TBL_MASK = 'þ' сервер выдает ошибку Arithmetic overflow or division by zero has occurred. arithmetic exception, numeric overflow, or string truncation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:32 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Да, наверно придется использовать блоб Других вариантов похоже нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:34 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Scream, по моему из условия следует только >Есть необходимость хранить некоторое кол-во (ну допусти 100) bool-вых значений в базе. Поэтому, почему не создать таблицу Код: plaintext 1. 2. 3. Дальше с ней будет удобно работать и с клиента и с сервера. На мой взгляд трудновато делать разбор строки из ХП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:42 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
А поле типа массив не пробовал использовать? И обращайся к элементу с № таким-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 14:48 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
2 IORRR: Против таблички ничего особо против не имею - сам так часто делаю Только для bool`ей делать отдельную табличку... При связи "1 к 1"... Расточительство, на мой взгляд А строку разбирать - проблем особых не вижу. Для этого придумали маски 2 Zmeishe: Половина средств доступа к InterBase (например, Builder`овский IBX) не умеют работать с массивами :(( -- LET`S ROCK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 15:02 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Отдельная таблица не покатит. Т.к. для каждой записи в таблице мне нужно будет хранить свой список настроек (100 bool-ов ). Тут вот может сделать так, принять что если byte имеет значение 32(пробел) то он = 0 . Т.е. заменить '\0' на 32 и наоборот. Только получается что один бит пропадает, но зато получается почти то что хотел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 15:03 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
ScreamVarchar/Char не подходит, так как если случится так, что подряд 8 или более значений будут false, то может выйти \0, который оборвет в этом месте строку Не очень понял, если есть строка '000000000000101010101' , то как это произойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 15:45 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
А если паковать не побитно, а по байтно. Например символами '0' и '1'. Ускоряем упаковку распаковку. Нет проблемы нуль символа. Правда увеличиваем объем в 8 раз:-(. Если это критично, то .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 16:14 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. А обрабатывать записи всё же удобнее, т.к. можно посчитать всякие значения, суммы, и т.д. а если у значения ещё указать какой-либо реквизит, то можно стандарным запросом менять значения. Хотя всё зависит от постановки. Может объяснишь смысл этих bool-вых значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 16:27 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
To Dik76 Есть в памяти char[0] = '\0' //Все false char[1] = 7 // 00000111 Заносим в базу как char[0] = 32 //00100000 char[1] = 7 // 00000111 Т.е. заменяем конец строки на пробел. При считывании из базы в память заменяем char[0] = 32 -> 0 То Nikola18 Ну хорошо есть у нас таблица объектов, и каждый объект характеризуется 100 переменными true|false. В моем случае я просто добавляю в таблицу, где хранятся объекты, еще одно поле SQL_TEXT и там храню значения моих переменных. (При этом названия и номера битов я заранее знаю, они всегда постоянные) Вы мне предлагаете завести еще одну таблицу (TYPE Integer, ID Integer, B Bool) где будут храниться название поля, ид, значение. Ну и поскольку значения у разных объектов могут отличаться то надо бы добавить еще ссылку на объект.В этом случае имея 100 объектов в вашей таблице должно быть порядка 100х100 записей. P.S. Подсчитывать мне ничего не надо :), ну разве что количество true и false у каждого объекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 16:53 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. (TYPE Integer, ID Integer, B Bool), где TYPE - номер "бита", ID - код объекта к которому принадлежит набор битов, B - собственно значение. При этом значения типа False можно вообще не хранить, т.е. если нет записи с TYPE=5, то значение "пятого бита" = 0 Код: plaintext 1. или select МАКСИМАЛЬНОЕ_КОЛИЧЕСТВО_ЗНАЧЕНИЙ - count(*) from T where T.ID=(КодОбъекта) and B все запросы с такой таблицей будт выполняться влёт если иметь индексы или FK по полю ID и TYPE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 17:03 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Ааа. Я почему то подумал что в TYPE хранится название, ну и другие не правильно понял :) Можно конечно и так. Особенно если нужна какая-либо их обработка (подсчет и т.п. ) Но только не нужна она (обработка) мне ;) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 17:14 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
А вы про массивы не забыли? От простого массива со smallint для каждого T & F до... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2004, 22:20 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Непонятно, в чём проблемы. Лично я храню в varchar, всё, что хочу. Подвергая это необходимой обработке.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2004, 01:44 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Что-то я недопонял... А почему нельзя использовать текст вида "00134579876" или даже "98ab7fcd0897" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 10:19 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
>Vagon Конечно можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 10:27 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
To Vagon А ты попробуй использовать "98ab7"+'\0'+"fcd0897" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 13:42 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32510768&tid=1578646]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 451ms |

| 0 / 0 |
