|
|
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
А для чего нужен '\0' ? Вопрос в организации системы флагов, как в середину должен попасть конец строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 13:50 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Dik76А для чего нужен '\0' ? Вопрос в организации системы флагов, как в середину должен попасть конец строки? Очень просто: допустим, состояния первых 40-ка флагов будет соответствовать " 98ab7 ". А следующие 8 флагов будут false (то есть битовые 0, что и отвечает ASCII '\0'). А следующие 56 флагов - " fcd0897 ". Итого имеем как раз то, что привел Kostya. - " 98ab7\0 fcd0897", то есть строку с '\0' в середине. -- LET`S ROCK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 14:18 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Насколько я понял, дело в способе организации строки: '+-++++-----------+++++' - это не выход? (где "+" - true, а "-" - false) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 14:23 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Он жлобится лишние биты содержать 2Вопрошавший: за что боремся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 14:27 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Dik76Насколько я понял, дело в способе организации строки: '+-++++-----------+++++' - это не выход? (где "+" - true, а "-" - false) :) Ну, плюсики-минусики использовать в качестве true - false - это забавно... Сразу вспоминается давно забытое детство... Хотя, реально, способ ничем не хуже, чем использовать, скажем, ' T '-' F ' или ' 1 '-' 0 ' Если есть жгучая потребность экономить биты - можно ставить лидирующие биты в 1 и группировать не по 8 bool `ей в байт, а по 7. А еще лучше - юзать BLOB Если такой жгучей потребности нет - стОит прислушаться к авторитетам форума :) и размещать 1 bool в 1 байт -- LET`S ROCK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 14:53 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext А зачем +'\0'+ если можно +"0"+ ? строка "0" (8 бит, 1 Char) <=> (0 = '\0') = 0000 bin = 00000000 bin; строка "1" (8 бит, 1 Char) <=> (1 = '\1') = 0001 bin = 00000001 bin; строка "2" (8 бит, 1 Char) <=> (2 = '\2') = 0010 bin = 00000010 bin; - - - - - - - строка "f" (8 бит, 1 Char) <=> (15='\15') = 1111 bin = 00001111 bin; Строки вида "98ab7" преобразуем числа и наоборот.... То же самое "01010010" (Dik76)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 16:37 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Боремся за красивой решение. :)) Попробую поработать так, не понравится, то сделаю в байте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:39 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Видать времени лишнего у тебя дофигища! Понятие "красоты" - весьма субъективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:51 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
)) Работаю хорошо, вот истается время еще и подумать/поэкспериментировать немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:57 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Не я твой шеф. Радуйся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:03 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
:) Чему же радоваться. Был бы шефом, похвалил бы ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:12 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Ага, щаззз! ;) За ловлю блох и экономию на спичках?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:14 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
За повышение своей квалификации А то я из программиста превращюсь в оператора ЭВМ ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:19 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Тренируйся на кошках! А не на работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:28 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Хех, так работа и заключается в поиске решиния проблем. В принципе по трудозатратам, что в бите хранить, что в байте одинаково. А если на этом можно еще и сэкономить, то почему бы не воспользоваться. А то если мы все будем решать свои проблемы за счет увеличения памяти, да покупки новых винтов, то что же это за специалисты такие, за не компетентность которых расплачивается заказчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 09:54 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
От тока не надо пыли! Ты посчитай, какова твоя экономия на реальных данных. Потом почитай, как хранятся CHAR'ы. Про компрессию почитай. Посчитай, как ужмётся строка состоящая только из 2 допустимых литералов. А уж потом, скажи, а стоило ли?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 11:30 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Так рассказал бы :) Как ужимаются CHAR-ы и как они хранятся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 12:27 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Ну, как я и говорил "В принципе по трудозатратам, что в бите хранить, что в байте одинаково." Остается только мое субъективное чувство красоты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 13:09 |
|
||
|
Подскажите хорошее решение (+)
|
|||
|---|---|---|---|
|
#18+
Почему никто не вспомнил про CHARACTER SET OCTETS ? A? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2004, 13:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1578646]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 515ms |

| 0 / 0 |
