Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dbbook(2010.04.15).pdf
Скачиваний:
51
Добавлен:
09.06.2015
Размер:
2.14 Mб
Скачать

3. Базовые и виртуальные отношения

3.1. Типы данных

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

3.1.1. Базовые типы данных

Базовыми типами данных являются следующие.

1.Числовые

integer – целый,

перечислимые типы,

float(n), real – вещественный,

decimal(n[, d]) – десятичный с фиксированной точкой,

money, или currency – денежный.

2.Логический

logical.

3.Строковые

bit(n), varbit(n) – строки бит фиксированной или переменной длины,

char(n), varchar(n) – строки символов фиксированной или переменной длины.

4.Даты и времени

date – дата,

time – время суток,

datetime – дата-время.

5.Идентификационные

counter(x0, 4x) – счетчик.

6.Крупные двоичные объекты

BLOB.

Целочисленный тип данных integer может иметь варианты, различающиеся по диапазону представления данных. Например, вариантами 4-байтового типа integer могут быть 8- и 2-байтовые типы bigint и smallint соответственно.

Примечание. Аналогичные варианты могут иметь и другие типы данных – денежный, даты и времени, идентификационный

Тип, в объявлении которого указывается набор символических имен, называется перечислимым. В качесве примера перечислимого типа можно назвать множество названий дней недели (пн, вт, ср, чт, пт, сб, вс). Значения перечислимых типов представляются посредством целочисленных кодов с использованием требуемого количества байтов.

Тип вещественных чисел float(n), real применяется для описания данных, которые нельзя точно представить в компьютере. Вещественные числа (числа с плавающей точкой) представляются в научной нотации, при которой число записывается с помощью мантиссы, умноженной на определенную степень десяти (порядок), например: 10Е3, +5.2Е6, -0.2Е-4. Параметр n (точность) задает количество хранимых бит мантиссы. Точность типа real зависит от конкретной реализации.

Тип decimal(n[, d]) – десятичный с фиксированной точкой с точностью в n десятичных цифр, из которых d (при d > 0) – после десятичной точки, а при d < 0 – до десятичной точки (по умолчанию d = 0). Например: 123.45 (d = 2 > 0, n = 5); 1234500. (d = - 2 < 0, n = 5).

Денежный тип money (в некоторых СУБД обозначаемый как currency) представляет числа в денежном формате в очень широком диапазоне с фиксированной точностью от денежной единицы (например, .0001).

Логический тип данных logical в некоторых СУБД подменяется типом bit(1).

Битовый тип данных используется для определения строк бит, то есть последовательностей двоичных цифр, каждая из которых может иметь значение либо 0, либо 1. Типы bit(n), varbit(n) соответствуют строкам бит фиксированной длины n и переменной длины, не превышающей n бит. Последовательности бит обычно делятся на группы по 8 бит в каждой, которые упаковываются в байты. Если n не делится на 8 нацело, неиспользуемые биты последнего байта игнорируются.

Строки символов состоят из последовательности символов, входящих в определенный создателями СУБД набор символов. Поскольку наборы символов являются специфическими для различных

диалектов языка SQL, перечень символов, которые могут входить в состав значений данных символьного типа, также зависит от конкретной реализации. Чаще всего используются наборы символов ASCII и EBCDIC. Типы char(n), varchar(n) соответствуют строкам символов фиксированной длины n и переменной длины, не превышающей n символов.

Поле, соответствующее типу char(n), представляет собой массив из n байтов в случае, если символы относятся к одному из традиционных 8-битовых наборов данных (скажем, ACSII или EBCDIC). Символ Unicode представляется 16 битами, или двумя байтами. Если значением атрибута оказывается более короткая строка, в каждую «лишнюю» позицию заносится специальный незначащий символ, 8-битовый код которого не совпадает с кодом любого другого символа из числа тех, которые разрешено включать в строки SQL.

SQL-тип varchar(n) на самом деле представляет поле фиксированной длины, хотя размер содержимого может варьироваться. Существуют два общих способа представления строк типа varchar.

Способ 1: длина плюс содержимое. Система организует массив из n+1 байт. В первом байте в виде 8-битового целого числа сохраняется количество байтов в строке. Длина строки не может превысить n, а величина n, в свою очередь, должна быть не больше значения 255 – в противном случае длину строки нельзя представить с помощью одного байта. Второй и последующие байты отображают символы содержимого строки. Если строка состоит их меньшего количества символов, оставшиеся байты массива не могут интерпретироваться как часть содержимого и игнорируются.

Способ 2: строки, завершаемые незначащим символом. В этом случае также формируется массив из n+1 байт. Массив заполняется символами строки, а в элемент, следующий за последним байтом содержимого строки, заносится незначащий символ. Как и в предыдущем случае, оставшиеся байты массива игнорируются.

Типы date, time, datetime представляют значения дат и времени. Тип данных date используется для хранения календарных дат, включающих поля год-месяц-день. Тип данных time – для хранения отметок времени, включающих поля часы-минуты-секунды. Тип данных datetime – для совместного хранения даты и времени.

Значения дат обычно представляются в виде символьных строк постоянной длины и принципиально ничем не отличаются от обычных строк символов подобного формата. Временные величины допускают аналогичное представление. В стандарте SQL, однако, предусмотрен и тип time, позволяющий сохранять значения времени с точностью до дробных долей секунды. Формат значений time относится к категории строк произвольной длины. Таким образом, имеются два альтернативных средства описания значений времени. Во-первых, система способна ограничить точность представления временных величин, как если бы они относились к типу varchar(n), где n – максимально допустимая длина строки с описанием значения времени. Во-вторых, временные значения могут сохраняться и использоваться в виде строк действительно переменной длины.

Значения данных типа счетчика counter(x0, 4x) являются целочисленными, но не задаются, как для других базовых типов, а генерируются системой. Тип счетчика может быть задан лишь при определении таблицы, причем лишь для одного столбца. В программном коде тип счетчика использовать нельзя. Значения данных типа счетчика генерируются автоматически при вставке строк в таблицы. Параметры x0 и 4x задают начальное значение и шаг приращения. Генерация проводится без повторений, так что счетчик всегда будет уникально идентифицировать каждую строку. Например, пусть в таблицу введены 4 строки. Удаление строк 2, 4 и добавление еще одной строки приведет к следующему преобразованию исходной таблицы – табл. 3.1.

Изменить значение счетчика или объявить несколько счетчиков в одной таблице СУБД не позволит. Уникальных значений 4-байтового счетчика при скорости генерации 1 знач/сек хватит на более чем 100 лет:

Таблица 3.1.: Модификация таблицы при удалении строк 2, 4 и добавлении еще одной строки

 

 

Счетчик

 

 

Счетчик

 

 

 

counter(1, 1)

...

 

counter(1, 1)

...

 

 

 

 

=)

 

 

 

 

1

 

1

 

 

 

2

 

 

3

 

 

 

3

 

 

5

 

 

 

4

 

 

 

 

1

год 6 366 * 24 * 60 * 60 сек < 225 сек

 

 

 

1

сек > 2 25 год

 

 

 

24 8 знач / (1 знач/сек) = 232 сек > 27 год = 128 лет > 100 лет

Счетчик обычно используется как суррогатный, то есть искусственный, первичный ключ таблицы.

BLOB – это обобщенное название типов данных, предназначенных для хранения крупных двоичных объектов (Binary Large OBjects). Такими объектами могут быть графические изображения в различных форматах, видеозаписи, звук, сигналы радаров и т.п. Для данных типа BLOB понятие сравнения не определено.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]