
4.2. Описание данных на основе sql Организация данных в InterBase. Типы данных
В каждом столбце таблицы хранятся данные одного определенного типа.
Описанные типы данных относятся именно к InterBase, хотя многие другие SQL-серверы имеют схожие с ним типы данных. В отличие от других серверов сервер InterBase:
не имеет автоинкрементного типа данных и компенсирует его отсутствие особым механизмом генераторов;
не имеет логического типа данных и вместо него предлагает использовать символьный тип Char(1) или VarChar(1);
не имеет денежного типа данных;
использует столбцы-массивы.
Обзор типов данных InterBase.
Типы столбцов, которые могут использоваться в таблицах сервера InterBase, перечислены в табл. 1.
Тип столбца |
Размер, байт |
Описание |
SMALLINT
INTEGER
FLOAT
DOUBLE PRECISION |
2
4
4
8
|
Целочисленные значения от -32 768 до +32 767 Целочисленные значения от -2 147 483 648 до +2 147 483 647
Вещественные числа до 7 значащих цифр в диапазоне от 3,4х10-38 до 3,4х10+38
Вещественные числа до 15 значащих цифр в диапазоне от 1,7x10-308 до 1,7х10+308 |
NUMERIC или DECIMAL |
Переменный |
Вещественные числа с фиксированной запятой. При определении этого типа дополнительно указывается общее количество значащих цифр числа и количество цифр в дробной части |
CHAR(n) или CHARACTER
|
0-32 767 |
Текстовый столбец длиной до n символов |
VARCHAR(n) или |
0-32 767 |
Текстовый столбец переменной длины, |
CHARACTER] VARYING
|
|
содержащий до n символов |
DATE
|
8 |
Дата в пределах от 01.01.0100 до 11.12.5941. Также может хранить сведения о времени |
BLOB |
Переменный |
Любой тип двоичных данных |
Домены
Создание доменов
Перед тем, как создавать таблицы, которые ссылаются на домены, необходимо задать описания доменов при использовании команды CREATE DOMAIN. В результате ее выполнения создается шаблон, на который можно ссылаться в командах создания и модификации таблиц.
Синтаксис описания доменов:
CREATE DOMAIN <name_domain> [AS] <data_type> [DEFAULT {literal| NULL| USER}] [NOT NULL] [CHECK (<dom_condition>)];
где <name_domain> – имя создаваемого домена;
<data_type> – любой допустимый тип данных;
[DEFAULT {literal| NULL| USER}] – задание значения по умолчанию. Значение по умолчанию присваивается соответствующему атрибуту при создании новой строки в таблице, если его значение не указано явно. Literal – указывает значение явно; NULL – оставляет значение пустым; USER – имя пользователя, создавшего запись. Для полей типа дата можно указывать NOW – вводится текущая дата;
NOT NULL – запрещает ввод пустых значений;
CHECK (<dom_condition>) – задает ограничение (описание контроля данных при вводе и изменении).
Примеры:
CREATE DOMAIN USERNAME AS VARCHAR (20) DEFAULT USER;
CREATE DOMAIN MONTH AS SMALLINT CHECK (VALUE BETWEEN 1 AND 12);
CREATE DOMAIN D_ELEM AS CHAR (2) CHECK (VALUE IN (‘Au’, ‘Ag’, ‘Pt’, ‘Pd’, ‘Os’, ‘Rt’));
CREATE DOMAIN PVEIGHT AS NUMERIC (12,2) DEFAULT NULL CHECK ((VALUE IS NULL) OR (VALUE> 1.25));
Изменение доменов
Изменение доменов осуществляется командой ALTER DOMAIN. С помощью данной команды можно изменить любые характеристики домена, кроме типа данных и установок NOT NULL. Сделанные изменения воздействуют на атрибуты всех таблиц, где использовался измененный домен.
Команду ALTER DOMAIN может выдать либо создатель домена, либо пользователь с правами системного администратора.
Для изменения типа поля или установки NOT NULL необходимо удалить домен, если это возможно (если домен используется для описания столбцов каких-либо таблиц, то удалить его нельзя), а затем создать его снова с требуемыми характеристиками.
Формат команды изменения домена:
ALTER DOMAIN name_domain {[SET DEFAULT {literal|NULL|USER}] [DROP DEFAULT] [ADD [CONSTRAINT] CHECK (<dom_condition>)] [DROP CONSTRAINT]};
где [DROP DEFAULT] – удалить значение по умолчанию;
[ADD [CONSTRAINT] CHECK (<dom_condition>)] – добавить ограничение;
[DROP CONSTRAINT] – удалить ограничение.
Пример.
ALTER DOMAIN D_ELEM DROP CONSTRAINT;
ALTER DOMAIN D_ELEM ADD CHECK(VALUE IN (‘H’, ‘LI’, ‘NA’, ‘K’));
ALTER DOMAIN USERNAME SET DEFAULT ‘***’;
Удаление доменов
Удаление доменов осуществляется командой DROP DOMAIN. Если домен используется в каких-либо таблицах, то удалить его нельзя.
Формат описания команды:
DROP DOMAIN name_domain;