хранение 8 байтного ключа

Модераторы: kdv, CyberMax

Ответить
Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

хранение 8 байтного ключа

Сообщение Attid » 24 ноя 2006, 23:32

необходимо в базе(fb2,0) хранить идентифиикаторы ключей
восемь байт произвольного значения от 00 до FF
пример 01 2A C8 0F 00 0D 00 25

обращатся к ним буду только для определения ID записи в таблице
показывать не собираюсь

пока думаю хранить в поле типа varchar(8)
или господа знатоки посоветуют что-то другое ?

ps помнится на 1,5 были у меня проблемы с табличкой где закрался какой-то левый символ

pss прогнал следущий код на двойке все вроде схоронилось, только там где #0 в гриде не отрожается

Код: Выделить всё

   for vNum := 0 to 255 do
   begin
     str := char(vNum)+'bla'+char(vNum)+'бла'+char(vNum);
     ExecSQL(trDeb, 'insert into test1(testcode) values(:1)', [str]);
   end;

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 25 ноя 2006, 10:31

[VAR]CHAR(8) CHARACTER SET OCTETS

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 25 ноя 2006, 11:52

BIGINT

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 25 ноя 2006, 14:55

уважаемые гуру краткость конечно сестра таланта, но можно поподробнее ?
dimitr писал(а):[VAR]CHAR(8) CHARACTER SET OCTETS
чем OCTETS лучше всего остального и не будет ли проблем если основное подключение идет с кодировкой 1251 ?
BIGINT
не предстовляю как :( в начале может быть например 6 нулей тогда будет хранится маленькое число ? как поиск и прочее . ..

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 ноя 2006, 16:29

в начале может быть например 6 нулей тогда будет хранится маленькое число ? как поиск и прочее . ..
ну и что. а что поиск? поиск, собственно, чего?
храни тогда строку в 16 символов. С поиском будет то же самое.

а "идентификаторы ключей" - обычно хранятся как целые числа. smallint, int, bigint.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 25 ноя 2006, 16:55

Attid писал(а):уважаемые гуру краткость конечно сестра таланта, но можно поподробнее ?
Что подробнее ? В чём твоя проблема - никто не понял
Attid писал(а):
dimitr писал(а):[VAR]CHAR(8) CHARACTER SET OCTETS
чем OCTETS лучше всего остального и не будет ли проблем если основное подключение идет с кодировкой 1251 ?
Позволяет хранить любые байты\символы
Attid писал(а):
hvlad писал(а):BIGINT
не предстовляю как :( в начале может быть например 6 нулей тогда будет хранится маленькое число ? как поиск и прочее . ..
Какая тебе разница, как оно там унутре хранится ?
BIGINT - это 8-байтовое целое, чего ещё ?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 25 ноя 2006, 22:47

hvlad писал(а):Какая тебе разница, как оно там унутре хранится ?
BIGINT - это 8-байтовое целое, чего ещё ?
мне приходит масив байт #01#230#128#15#00#13#00#25
как мне его преоброзовать чтоб хранить в BIGINT
и потом еще и быстро находить ?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 ноя 2006, 12:30

Attid писал(а):мне приходит масив байт #01#230#128#15#00#13#00#25
как мне его преоброзовать чтоб хранить в BIGINT
и потом еще и быстро находить ?
Ты не знаешь, как 8 отдельных байт запихать в 8-байтовое число? Хм.
Значит, тебе нужен поиск. Хорошо. Какой именно поиск? Сортировка? Фильтры?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 27 ноя 2006, 21:42

WildSery писал(а): Ты не знаешь, как 8 отдельных байт запихать в 8-байтовое число? Хм.
Значит, тебе нужен поиск. Хорошо. Какой именно поиск? Сортировка? Фильтры?
все в жизни бывает первый раз мог бы и сказать что имеется ввиду, оказывается я этим даже занимался только в данном случае об этом не подумал? помог звонок другу :). поиск по интеджер то это не проблема.
я так понимаю поиск по integer будет быстрее чем varchar(8) или в данном случае это абсолютно паралельно ?
под поиском имеется ввиду нахождение ID в подобных таблицах:

Код: Выделить всё

--------------------------------------------       ---------------------------------------------
|ID-INTEGER|CODE-VARCHAR(8)|       |ID-integer |CODE-BIGINTEGER |
--------------------------------------------       ---------------------------------------------
Вопрос 2:
если я код храню как biginteger имеет ли смысл заводить для него
отдельный ID или лучше во всех таблицах использующих сразу писать код ? из плюсов на таблицу меньше, из минусов во всех таблицах прийдется делать поле biginteger что есть расточительство.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 ноя 2006, 11:59

Экономия 2 байт на запись в современной базе, за счёт усложнения структуры - это смешно.
Но у тебя что-то не совсем такая ситуация. Ты ведь хранишь некоторые "справочные" ключи, и нужны ссылки на них из других таблиц? Тогда выбор очевиден.
Поиск в скорости отличаться не должен. А вот если у тебя встанет задача поиска по части ключа - вот тут уже надо подумать.
Ты так и не ответил на мой вопрос, всегда ли будет поиск по целому, или по части тоже. Если по части будет производиться частый поиск - хранить нужно по-другому, в зависимости от требуемых условий поиска.

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 28 ноя 2006, 19:19

WildSery писал(а):Экономия 2 байт на запись в современной базе, за счёт усложнения структуры - это смешно.

Ты так и не ответил на мой вопрос, всегда ли будет поиск по целому, или по части тоже. Если по части будет производиться частый поиск - хранить нужно по-другому, в зависимости от требуемых условий поиска.
экономи там будет на каждую запись, а записей возможно по несколько тысяч в день. останусь изначальном варианте. ключ не делимый поиск только по полному коду.

спасибо за ответы с меня пиво на 2 коференции :)

Ответить