2016-01-05 4 views
1

Необходимо обсудить подход: У нас есть кол-во столбец в таблице оракулов. Dataype колонки char(3 Byte). При каждой вставке строки значение индекса count count увеличивается на 1 (но это не столбец идентификатора).Хранение значения с размером больше размера столбца

Существует вероятность того, что стоимость будет превышать . Итак, как мы можем справиться с этим. До сих пор подход, который я могу обосновать:

Увеличение типа данных столбца во время выполнения. Шаги:

  1. Во-первых, мы проверим длину значения.
  2. Для, например, если длина 4, то Alter столбец таблицы и изменить размер столбца char(4 BYTE)

Любой лучший подход вы люди могут предоставить ...

+2

Просто из любопытства, если оно подсчитано, я полагаю, что это число. Почему вы используете тип данных char? – Hawk

+1

Используйте числовой тип столбца или используйте произвольный большой символ, размер которого вряд ли будет превышен. –

+0

** Никогда **, никогда не храните номера в столбцах 'char' или' varchar' (и 'varchar' всегда лучший выбор, чем' char') –

ответ

0

Увеличение столбца типа данных во время выполнения.

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

В вашем требовании, нет никаких причин, чтобы сохранить НОМЕР как STRING. Это, безусловно, будет основной причиной ухудшения производительности. Вы должны выбрать подходящие типы данных, которые в вашем случае должны быть NUMBER.

На каждой вставке строки, значение приращения счетчика столбца 1

Вы должны быть в идеале, используя последовательность для этого. В зависимости от версии вашей базы данных, есть два варианта:

На стороне записки, CHAR типов данных магазинов фиксированной длины символьные строки. В идеале вы должны использовать тип данных VARCHAR2, в котором хранятся строки символов переменной длины.

0

Вы действительно не должны хранить числа в столбце char или varchar. Если это вообще возможно, реорганизовать дизайн таблицы, который заставил вас решить эту проблему.

Если вы не можете это сделать, уверены ли вы, что столбец не может быть изменен с char (3) на что-то более полезное? Char (4) содержит только 1 байт хранилища, varchar (4), вероятно, не будет лишним хранилищем, если char (3) работает в другом месте.

Если вы действительно не можете сделать ни один из них, и вы все еще застряли в этом мариносе, и вы абсолютно должны получить номер свыше 999 в колонку с символом (3) даже после того, как пинали и кричали, что это не очень хорошая идея.

Хранение в гексагоне. Отметьте это очень, или это смутит людей, но преобразование с шестнадцатеричным преобразованием в десятичное значение не так уж и много черного искусства, и оно даст вам диапазон до 4095 в том же пространстве символов.

Смежные вопросы