- •Тема 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. Восстановление индекса
2.2 Изменение доменов
Изменение доменов осуществляется командой 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 ‘***’;
2.3 Удаление доменов
Удаление доменов осуществляется командой DROP DOMAIN. Если домен используется в каких-либо таблицах, то удалить его нельзя.
Синтаксис команды:
DROP DOMAIN name_domain;
3. Таблицы
Прежде чем перейти к созданию таблицы, необходимо провести проектирование базы данных. Далее следует создать комплект необходимых доменов и только затем можно переходить к созданию таблиц.
3.1 Создание таблицы
Создание таблицы осуществляется с использованием команды CREATE TABLE, которая создает структуру таблицы и в самом простом случае определяет название таблицы, перечень полей с указанием типов данных, а также контрольными ограничениями. Кроме того, при создании таблицы можно задать первичный ключ, внешние ключи, дополнительные виды контроля на уровне записей.
Упрощенный синтаксис команды:
CREATE TABLE <имя таблицы>
(описание полей таблицы);
Описание полей таблицы:
Name { <тип данных> |COMPUTED [BY] (<выражение>)| <имя домена>}
[DEFAULT {literal|NULL|USER}]
[NOT NULL]
[<ограничение столбца>];
Name – заголовок столбца;
COMPUTED [BY] (<выражение>)- выражение для вычисляемого столбца. Значения вычисляемых столбцов рассчитывается всякий раз при обращении к ним. Выражение может быть любым допустимым в InterBase выражением, возвращающим единственное значение простого типа. Например, допустимы выражения с предложением SELECT.
<имя домена> - имя ранее определенного домена.
[<ограничение столбца>] – описывает ограничение логической целостности столбца.
InterBase позволяет задавать ограничения на отдельные столбцы и на таблицу в целом., называемые ограничением логической целостности, которые задают порядок управления зависимостями между столбцом и таблицей, а также между таблицей и таблицей. Они воздействуют на все выполняемые с таблицей действия, автоматически поддерживаясь системой.
Конструкция <ограничение столбца> имеет следующий синтаксис:
[CONSTRAINT <имя ограничения>]
{UNIQUE
| PRIMARY KEY
| CHECK (<конкретное условие>)
| REFERENCES <имя другой таблицы> [(список атрибутов)]
[ON DELETE {NO ACTION| CASCADE | SET DEFAULT| SET NULL}]
[ON UPDATE {NO ACTION| CASCADE | SET DEFAULT| SET NULL}]
}
CONSTRAINT <имя ограничения> – ограничению можно присваивать имя, при выдаче системой сообщения об ошибке данного ограничения, будет выдано имя ограничения, которое нарушено.
UNIQUE – значение столбца должно быть уникальным. Не допускает пустых значений. Уникальных ключей может быть несколько.
PRIMARY KEY – поля является первичным ключом таблицы.
CHECK (<конкретное условие>) – задает условие, которому должно соответствовать значение определяемого столбца. В данной конструкции можно использовать любые данные текущей строки таблицы, а также результат запроса SELECT.
REFERENCES <имя другой таблицы> [(список атрибутов)]
[ON DELETE {NO ACTION| CASCADE | SET DEFAULT| SET NULL}]
[ON UPDATE {NO ACTION| CASCADE | SET DEFAULT| SET NULL}] } – задает ограничение внешнего ключа для описываемого столбца. ограничение означает, что данное поле соответствует первичному ключу (указанному в списке атрибутов) в таблице «имя другой таблицы» и в этой таблице имеется строка с указанным значением. Если список опущен, то предполагается список из одного поля, имеющего то же имя, что и описываемое.
Дополнительные режимы ON DELETE и ON UPDATE задают действия, производимые при удалении или обновлении ключевых полей в родительской (имя другой таблицы) таблице.
NO ACTION – нет действий (по умолчанию);
CASCADE - каскадное удаление (замена) влечет удаление (замену) во всех строках дочерней таблицы при удалении (замене) соответствующих им строк родительской таблицы;
SET DEFAULT – при удалении (замене) строк родительской таблицы, соответствующие им поля в дочерней переустанавливаются в значения по умолчанию.
SET NULL - при удалении (замене) строк родительской таблицы, соответствующие им поля в дочерней переустанавливаются в пустые значения.
Ограничение, накладываемое на всю таблицу имеет синтаксис:
[CONSTRAINT <имя ограничения>]
{{PRIMARY KEY | UNIQUE} (<список атрибутов>)
| FOREIGN KEY (<список атрибутов>) REFERENCES <имя другой таблицы>
[ON DELETE {NO ACTION| CASCADE | SET DEFAULT| SET NULL}]
[ON UPDATE {NO ACTION| CASCADE | SET DEFAULT| SET NULL}]
| CHECK (<условие>)
}
Ограничение FOREIGN KEY означает, что значение в указанном столбце или списке столбцов соответствует первичному ключу в таблице «имя другой таблицы» и в этой таблице имеется строка с указанным значением.
CHECK (<условие>) – задает условие, проверяемые по значениям группы столбцов.
Замечание! Конструкция задающая внешние ключи для всей таблицы и конструкция, задающая внешний ключ для отдельного столбца порождают внешний ключ, но при задании списка столбцов в первом случае перечисляются столбцы описываемой таблицы, а во втором – той таблицы, на которую осуществляется ссылка.