Типы данных и таблицы в Firebird/InterBase.



В InterBase/FireBird определены следующие основные типы данных:

Типы NUMERIC и DECIMAL очень похожи и отличаются небольшими деталями реализации и хранения. Они, в известной степени, виртуальны, поскольку реально для хранения их значений в базе данных используются столбцы типов SMALLINT, INTEGER, BIGINT и DOUBLE PRECISION, в зависимости от количества значащих цифр.

Отличие CHAR от VARCHAR состоит в том, что при записи CHAR удаляются хвостовые пробелы, а при чтении строка дополняется пробелами до своей длины. VARCHAR пишется и читается как есть, без удаления и добавления пробелов. Обычно рекомендуется использовать VARCHAR.

Тип TIMESTAMP полностью совместим с типом TDataTime в Delphi.

Если присвоение значения даты производится с помощью операторов SQL, можно использовать стандартный формат даты: DD-MMM-YYYY (например, ’25-OCT-2002’ ). В операторах SQL допустимо присвоение значения типа DATE символьной переменной. При этом дата будет преобразована в стандартный формат.

В SQL могут быть также использованы литералы ‘NOW’ (возвращает текущую дату и время сервера) и ‘TODAY’(возвращает текущую дату без времени).

Столбцы типа BLOB (Binary Large Object) рассматривается, как последовательность байтов, интерпретация которой возлагается на приложение. Например, в них можно хранить графическую или звуковую информацию.

Замечание1. В процессе присвоения значений переменных одного типа переменным другого типа в SQL-операторах допускается неявное преобразование типов (например, 2 + ‘1’ даст 3). Однако если преобразование окажется невозможным, то будет возвращена ошибка.

Замечание2. В InterBase/FireBird нет логического типа данных. Его можно реализовать, например, с помощью CHAR(1) со значениями "T" и "F" или INTEGER со значениями 1 и 0.

3.2.2. Создание таблиц

Если при определении столбцов предполагается использовать домены, то они должны быть заданы заранее.

Таблицы создаются оператором CREATE TABLE следующего формата:

CREATE TABLE имя_таблицы

(<определение столбца>[,<определение столбца>|,<ограничение таблицы>...]);

где:

<определение столбца> = имя_столбца {тип данных| COMPUTED BY | домен}

DEFAULT {литерал | NULL | USER}]

[NOT NULL]

[CHECK (<ограничение столбца>)]

[COLLATE порядок_сортировки]

<ограничение таблицы> - список ограничений уровня таблицы. Чаще всего здесь задаютсяограничения ссылочной целостности.

 

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

Предложения DEFAULT, NOT NULL, COLLATE имеют тот же смысл, что и при определении домена.

Ограничения уровня столбца, задаваемые в предложении CHEK, имеют гораздо более широкие возможности, чем при определении домена. В них можно ссылаться на другие столбцы, использовать операторы выбора из других таблиц, использовать функции SUM, MIN, MAX, … и многое другое.

Замечание. Допустимо объявление столбцов, как массивов, однако возможности работы с этими массивами весьма ограничены.

 

 

Способы реализации ограничений в Firebird/InterBase.

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

Для задания первичного ключа используется предложение:

PRIMARY KEY (столбец1[,столбец2...])

Все столбцы, входящие в первичный ключ, должны быть объявлены как NOT NULL. Естественно, что в таблице может быть только одно ограничение первичного ключа. Если же необходимо обеспечить уникальность какой-либо другой комбинации полей (альтернативных ключей), то используется предложение UNIQUE аналогичного формата.

Внешний ключ задается предложением следующего вида:

FOREIGN KEY (список столбцов ВК)

REFERENCES имя_родит.табл. [(список столбцов ПК)]

[ON UPDATE действие] [ON DELETE действие]

Столбцы, входящие во внешний ключ по своим характеристикам должны полностью совпадать со столбцами первичного ключа. Возможна ссылка не только на первичный ключ, но и на альтернативный (UNIQUE; в этом случае список столбцов рекомендуется указывать).

Предложения ON UPDATE и ON DELETE определяют действия СУБД в случае попытки изменения или удаления записи в родительской таблице. Возможные варианты действий:

NO ACTION – при наличии в дочерней таблице записей, ссылающихся на запись родительской таблицы, операция запрещается (по умолчанию);

CASCADE – выполняется каскадное изменение или удаление записей дочерней таблицы;

SET DEFAULT – полям внешнего ключа присваиваются значения по умолчанию. В родительской таблице должны присутствовать записи с соответствующими значениями;

SET NULL – поля внешнего ключа устанавливаются в NULL.

Если в таблице объявлен внешний ключ, то в нее нельзя будет добавить запись в полях внешнего ключа которой будут значения, отсутствующие в полях первичного ключа родительской таблицы.

Замечание. Рекомендуется присваивать ограничениям имена, которые будут использоваться СУБД в своих сообщениях о нарушении ограничений. Эти имена удобно использовать и при необходимости удаления ограничений. Имя ограничения задается с помощью предложения CONSTRAINT:

CONSTRAINT FK_Nalichie_Lica

FOREIGN KEY (Lico) REFERENCES Lica(NLic)

ON UPDATE CASCADE ON DELETE NO ACTION

здесь FK_Nalichie_Lica – имя ограничения.

Если ограничению не было присвоено имя в явной форме, то оно будет сгенерировано системой автоматически. Имена всех ограничений хранятся в системной таблице RDB$RELATION_CONSTRAINTS.


Дата добавления: 2018-05-31; просмотров: 602; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!