2015-11-24 2 views
3

Какой тип данных я должен использовать для обработки 9-значный номер счета и почему?Какой тип данных следует использовать для обработки девятизначных номеров учетных записей и почему?

varchar(9) или int или decimal или что-то еще?

Я говорю с точки зрения базы данных - и СУБД представляет собой Informix.

+0

Если вас интересует только база данных, зачем включать тег C#?Похоже, тип 'INTEGER' должен быть в порядке - он обрабатывает -2,147,483,647 до +2,147,483,647, так что включает в себя все 9-значные номера ... –

+1

Являются ли номера счетов всегда ровно 9 цифрами или вам нужно хранить как' 0035', и '000000035'? –

+0

@JonSkeet: меня интересует логика, приложение asp.net должно использовать такие данные, не могли бы вы порекомендовать какой-то конкретный тип? –

ответ

3

TL; DRCHAR(9).

У вас есть несколько вариантов, большинство из которых упомянуты в комментариях. Варианты имеют разные компромиссы. К ним относятся:

  • CHAR(9). Это использует 9 байтов памяти, но может хранить ведущие нули и может сохранять форматирование в приложениях. Вы можете написать контрольное ограничение, которое гарантирует, что значение всегда содержит 9 цифр. Если вам нужно будет использовать более длинные номера, вы можете легко расширить тип до CHAR(13) или CHAR(16) или что угодно.
  • INTEGER. Это использует 4 байта памяти. Если вам нужны ведущие нули, вам придется отформатировать их самостоятельно. Если вам понадобится больше цифр, вам нужно будет изменить тип на BIGINT.
  • SERIAL. Это можно использовать в одной таблице и автоматически генерировать новые значения, когда вы вставляете нуль в столбец. Таблицы перекрестных ссылок будут использовать тип INTEGER.
  • DECIMAL(9,0). Это использует 5 байтов памяти и не хранит ведущие нули, поэтому вам придется отформатировать их самостоятельно. Если вам понадобится больше цифр, вы можете изменить тип на DECIMAL(13,0) или DECIMAL(16,0) или что угодно.
  • BIGINT и BIGSERIAL. Это 8-байтовые целые числа, которые могут привести к 16 цифрам без проблем. Вы должны предоставить ведущие нули самостоятельно.
  • INT8 и SERIAL8 - не используйте эти типы.
  • VARCHAR(9). Не подходит, поскольку длина не является переменной. Это потребует 10 байт на диске, где 9 достаточно.
  • LVARCHAR(9). Это еще менее уместно, чем VARCHAR(9).
  • NCHAR(9). Это может быть использовано как по существу эквивалентное CHAR(9), но если вы собираетесь хранить цифры, вы также можете использовать CHAR(9).
  • NVARCHAR(9). Не подходит по тем же причинам, что VARCHAR(9) и NCHAR(9) не подходят.
  • MONEY(9,0). В основном эквивалентно DECIMAL(9,0), но может привлечь символы валюты - было бы лучше использовать DECIMAL(9,0).

Любой другой тип довольно быстро подходит, если вы не разработать расширенный тип, который использует INTEGER для хранения, но обеспечивает функцию преобразования в CHAR(9), которая добавляет ведущие нули.

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