- •Тема 4.2. Описание данных на основе sql
- •1. Организация данных в InterBase. Типы данных
- •2. Домены
- •2.1 Создание доменов
- •2.2 Изменение доменов
- •2.3 Удаление доменов
- •3. Таблицы
- •3.1 Создание таблицы
- •3.2 Модификация таблицы
- •3.3 Удаление таблиц
- •4. Индексы
- •4.1 Создание индексов
- •4.2 Изменение индекса
- •4.3. Восстановление индекса
Тема 4.2. Описание данных на основе sql
1. Организация данных в InterBase. Типы данных
В каждом столбце таблицы хранятся данные одного определенного типа. Данные, по которым ведется поиск, должны быть простого (неструктурированного) типа, для которого определены операции сравнения. Данные других типов допускаются, но для работы с ними используются средства, выходящие за пределы стандарта SQL.
Перечень обрабатываемых типов данных совпадает со списком, приведенным при описании типов данных SQL, однако дополнен следующими типами данных:
DATE в версии до 6 или TIMESTAMP в версиях от 6 (8 байт) включает также данные о времени; DATE в версии от 6 (4байта) – только дата и TIME в версии от 6 (4 байта) только время.
NCHAR (n)/ NATIONAL CHARACTER (n) / NATIONAL CHAR (n) – строка фиксированной длины, использующая кодовой набор ISO8859_1;
NCHAR VARYING (n) / NATIONAL CHARACTER VARYING(n) / NATIONAL CHAR VARYING(n) – строка переменной длины, использующая кодовой набор ISO8859_1;
BLOB [SUB_TYPE {int | subtype name}] [SEGMENT SYZE int] [CHARACTER SET charname]/ BLOB [(seglen [, subtype] ) ].
SUB_TYPE:
0 – неструктурированный (используется для двоичных данных или данных неопределенного типа);
1 – текст;
2 – двоичное языковое представление BLR;
3 – Access control list;
4 – зарезервировано;
5 – закодированное описание метаданных текущей таблицы;
6 – описание ненормально завершенной транзакции к нескольким базам;
<0 – пользовательский тип.
SEGMENT SYZE – размер блока, через который осуществляется чтение-запись данных BLOB.
Все данные, кроме BLOB, могут быть организованы в массивы. Массивы могут содержать от 1 до 16 измерений.
2. Домены
2.1 Создание доменов
Перед тем, как создавать таблицы, которые ссылаются на домены, необходимо задать описания доменов при использовании команды 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>) – задает ограничение (описание контроля данных при вводе и изменении). Для задания условия используются следующие ключевые слова:
VALUE – подразумевает значение, вводимое в поле;
IS NULL, IS NOT NULL;
BETWEEN…AND; LIKE, IN;
А также все арифметические и логические операторы.
Замечания:
Домены создаются независимо друг от друга и, тем более, от каких-либо таблиц, следовательно, CHECK в домене не может ссылаться ни на какой другой домен или столбец таблицы.
Домен может иметь только одну конструкцию CHECK.
Конструкция CHECK не может быть переопределена при описании атрибута таблицы. Если при описании поля в таблице, ссылающегося на домен, имеющий CHECK, указано свое органичение, то действовать будут оба ограничения.
Примеры:
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));