Допустимые типы данных
Тип данных — это спецификация, определяющая, какого рода данные могут храниться в объекте БД: целые числа, символы, данные денежного типа, метки времени и даты, двоичные строки и так далее.
Все допустимые типы данных описаны в стандарте SQL-92, но в большинстве диалектов поддерживается расширенный список типов данных. Однако любой диалект SQL поддерживают три общих типа данных: строковые, числовые и тип для представления даты и времени. Задание типа данных определяет значения и длину данных, а также формат их представления при визуализации.
Для всех типов данных определено так называемое нуль-значение, которое указывает на отсутствие данных в колонке указанного типа, т.е. то обстоятельство, что значение данных в текущий момент времени неизвестно.
Описание типов, данное в таблице ниже, относится к диалекту SQL для СУБД семейства MS SQL Server, которое имеет существенные отличия от предписаний стандарта SQL. Жирным шрифтом выделена часть зарезервированного слова для определения типа, которую можно использовать как аббревиатуру при определении типа в спецификации колонки.
MS SQL Server предоставляет набор системных типов данных, определяющих все типы данных, которые могут использоваться в нем. Можно также определять собственные типы данных в Transact-SQL или Microsoft .NET Framework. Псевдонимы типов данных основываются на системных типах. Пользовательские типы данных обладают свойствами, зависящими от методов и операторов класса, который создается для них на одном из языков программирования, поддерживающих .NET Framework.
При объединении одним оператором двух выражений с разными типами данных, параметрами сортировки, точностями, масштабами или длинами результат определяется следующим образом.
- Тип данных результата определяется применением правил очередности типов данных к входным выражениям.
- Параметры сортировки результата определяются правилами очередности параметров сортировки, если тип данных результата относится к char, varchar, text, nchar, nvarchar или ntext.
- Точность, масштаб и длина результата зависят от точности, масштаба и длины входных выражений.
Типы данных в СУБД семейства MS SQL Server объединены в следующие категории:
- точные числа;
- приблизительные числа;
- дата и время;
- символьные строки;
- символьные строки в Юникоде;
- двоичные данные;
- прочие типы данных.
Таблица
11.1.
Допустимые типы данных в языке SQL
Тип данных |
Синтаксис |
Точные числа |
bigint |
Целые значения в диапазоне от до
|
int |
Целые значения в диапазоне от до
|
smallint |
Целые значения в диапазоне от до
|
tinyint |
Целые значения в диапазоне от 0 до 255 |
bit |
Целое число, равное 1, 0 или NULL
|
decimal[ (p[ , s] )] и numeric[ (p[ , s] )]
|
Числа с фиксированной точностью и масштабом. При использовании максимальной точности числа могут принимать значения в диапазоне от до . p (точность) - максимальное количество десятичных разрядов числа (как слева, так и справа от десятичной запятой). Точность должна принимать значение от 1 до 38. По умолчанию для точности принимается значение 18.
s (масштаб) - максимальное количество десятичных разрядов числа справа от десятичной запятой. Масштаб может принимать значение от 0 до p. Масштаб может быть указан только совместно с точностью. По умолчанию масштаб принимает значение 0, поэтому 0 <= s <= p. Максимальный размер хранилища зависит от точности.
|
money |
Денежные (валютные) значения в диапазоне от -922 337 203 685 477,5808 до 922 337 203 685 477,5807 |
smallmoney |
Денежные (валютные) значения в диапазоне от -214 748,3648 до 214 748,3647 |
Приблизительные числа |
float float [ ( n ) ]
|
Числовые значения с плавающей запятой в диапазонах: - и - . n - это количество битов, используемых для хранения мантиссы числа в формате float при экспоненциальном представлении, которое определяет точность данных и размер для хранения. Значение параметра n должно лежать в пределах от 1 до 53. Значением по умолчанию для параметра n является 53
|
real |
Числовые значения с плавающей запятой в диапазонах: - и -
|
Дата и время |
date |
Дата в формате ГГГГ-ММ-ДД. Диапазон значений от 0001-01-01 до 9999-12-31, от 1 января 1 года до 31 декабря 9999 года |
datetime |
Определяет дату, включающую время дня с долями секунды в 24-часовом формате, 1 января 1753 года - 31 декабря 9999 года, от 00:00:00 до 23:59:590,997 |
smalldatetime |
Определяет дату, сочетающуюся со временем дня. Время представлено в 24-часовом формате с секундами, всегда равными нулю (:00), без долей секунд, от 01.01.1900 до 06.06.2079, 1 января 1900 года - 6 июня 2079 года, от 00:00:00 до 23:59:59 |
time |
Определяет время дня. Время без учета часового пояса в 24-часовом формате, от 00:00:00.0000000 до 23:59:59.9999999 |
datetime2 |
Определяет дату, объединенную со временем дня в 24-часовом формате. От 0001-01-01 до 9999-12-31, с 1 января 1 года нашей эры до 31 декабря 9999 года нашей эры, от 00:00:00 до 23:59:59.9999999 |
datetimeoffset |
Определяет дату, объединенную со временем дня, с учетом часового пояса в 24-часовом формате, от 0001-01-01 до 9999-12-31, с 1 января 1 года нашей эры до 31 декабря 9999 года нашей эры, от 00:00:00 до 23:59:59.9999999 |
Символьные строки |
varchar [( n| max )] |
Символьные данные переменной длины, не в Юникоде. n может иметь значение от 1 до 8 000, max означает, что максимальный размер хранения равен байт. Размер хранения равен фактической длине данных плюс два байта. Введенные данные могут иметь длину 0 символов. Синонимами по стандарту ISO для типа varchar являются типы char varying или character varying
|
char [ ( n ) ] |
Символьные данные фиксированной длины, не в Юникоде, с длиной n байт. Значение n должно находиться в интервале от 1 до 8000. Размер хранения данных этого типа равен n байт. Синонимом по стандарту ISO для типа char является character |
text |
Этот тип данных представляет данные, отличные от данных Юникод, с использованием кодовой страницы сервера. Максимальная длина данных - - 1 (2 147 483 647) символов. Если в кодовой странице сервера используются двухбайтовые символы, объем занимаемого типом пространства все равно не превышает 2 147 483 647 байт. Он может быть менее 2 147 483 647 байт - в зависимости от строки символов |
Символьные строки в Юникоде |
nchar [ ( n ) ] |
Символьные данные в Юникоде длиной в n символов. Аргумент n должен иметь значение от 1 до 4000. Размер хранилища вдвое больше n байт. Синонимами по стандарту ISO для типа nchar являются типы national char и national character
|
nvarchar [(n|max )] |
Символьные данные в Юникоде переменной длины. Аргумент n может принимать значение от 1 до 4 000. Аргумент max указывает, что максимальный размер хранилища равен байт. Размер хранилища в байтах вдвое больше числа введенных символов + 2 байта. Введенные данные могут иметь длину в 0 символов. Синонимами по стандарту ISO для типа nvarchar являются типы national char varying и national character varying
|
ntext |
Этот тип данных представляет символьные данные в Юникоде переменной длины, включающие до - 1 (1 073 741 823) символов. Объем занимаемого этим типом пространства (в байтах) в два раза превышает число символов. В спецификации SQL-2003 синонимом типа данных ntext является тип national text
|
Двоичные данные |
binary [ ( n ) ] |
Двоичные данные фиксированной длины размером в n байт, где n - значение от 1 до 8000. Размер хранения составляет n байт |
varbinary [(n|max)] |
Двоичные данные переменной длины. n могут иметь значение от 1 до 8000; max означает максимальную длину хранения, которая составляет байт. Размер хранения - это фактическая длина введенных данных плюс 2 байта. Введенные данные могут иметь размер 0 символов. В SQL-2003 синонимом для varbinary является binary varying
|
image |
Этот тип представляет двоичные данные переменной длины, включающие от 0 до - 1 (2 147 483 647) байт |
Прочие типы данных |
timestamp |
Это тип данных, который представляет собой автоматически сформированные уникальные двоичные числа в базе данных. Тип данных timestamp используется в основном в качестве механизма для отметки версий строк таблицы. Размер при хранении - 8 байт. Тип данных timestamp - всего лишь увеличивающееся значение, которое не сохраняет дату или время. Тип данных datetime используется для записи даты или времени |
xml ([CONTENT| DOCUMENT] xml_schema_collection ) |
Тип данных, в котором хранятся XML-данные. Можно хранить экземпляры xml в столбце либо в переменной типа xml. CONTENT. Экземпляр xml должен быть корректным XML-фрагментом. XML-данные могут содержать несколько (0 или больше) элементов верхнего уровня. Текстовые узлы разрешены на верхнем уровне. Это поведение установлено по умолчанию.
DOCUMENT. Экземпляр xml должен быть корректным XML-документом. XML-данные должны содержать только один корневой элемент. Текстовые узлы на верхнем уровне запрещены.
xml_schema_collection. Имя коллекции XML- схем. Чтобы создать типизированный столбец или переменную xml, можно дополнительно указать имя коллекции XML- схем. Дополнительные сведения о типизированном и нетипизированном XML
|
sql_variant |
Столбец типа sql_variant может содержать строки различных типов данных. Например, столбец, определенный как sql_variant, может хранить значения int, binary и char
|
table |
Особый тип данных, который можно использовать для хранения результирующего набора с целью последующей его обработки. Тип table применяется, главным образом, для временного хранения набора строк, возвращаемого в качестве результирующего набора возвращающей табличное значение функции |
cursor |
Тип данных для переменных или выходных параметров хранимых процедур, которые содержат ссылку на курсор. Любая переменная, созданная с типом данных cursor, может принимать значение NULL
|
Итак, мы рассмотрели основные объекты БД и допустимые типы данных, которыми располагает проектировщик ХД при использовании СУБД семейства MS SQL Server.
Далее поговорим об алгоритме создания физической модели ХД.