InterBase – реляционная СУБД, поэтому все данные в InterBase хранятся в виде двумерных таблиц со строками и столбцами. Строки называются кортежами или записями, а столбцы – доменами или полями.
В этой лабораторной работе рассматриваются не правилами проектирования правильного набора таблиц для хранения данных о некоторой предметной области, а только способы реального создания необходимых таблиц.
Основные ограничения, которым должны удовлетворять таблицы:
1. Каждый столбец в таблице имеет уникальное имя.
2. Все данные в столбце должны быть одного типа.
3. Порядок строк и столбцов в таблице не имеет значения.
4. В таблице не может быть двух одинаковых строк.
Часть языка SQL, которая управляет метаданными, называется Data Definition Language (DDL). К DDL относятся операторы для определения любых содержащихся в базе данных объектов, в том числе и таблиц. Операторы, определяющие структуру таблиц в InterBase, соответствуют стандарту SQL, и поэтому без изменений будут работать и во многих других СУБД.
Для создания таблиц используется оператор " CREATE TABLE ", который приводит к созданию пустой таблицы без строк. При создании таблиц задается имя таблицы, описание набора столбцов с их именами, типами и размерами, а также ограничения на хранящуюся в таблице информацию. Максимальная длина названий таблиц, полей и ограничений – 31 символ. Имена таблиц в пределах базы данных должны быть уникальны.
|
|
Каждый столбец в таблице должен иметь имя, уникальное в пределах таблицы, а также либо тип данных, либо выражение для вычисления значения столбца, либо ссылку на домен.
Упрощенный синтаксис оператора создания таблицы:
CREATE TABLE Имя_Таблицы(
<описание колонки> [,
<описание колонки> | <ограничение>...]);
В этом операторе элемент <ограничение> означает ограничение, которое задается на уровне таблицы без одновременного описания колонки.
<описание колонки> = Колонка {
<тип данных>
| COMPUTED [BY] (<вычисляемое выражение>)
| Имя_Домена
}
[DEFAULT {Literal | NULL | USER}]
[NOT NULL] [<ограничение поля>];
Здесь элемент <вычисляемое выражение> означает выражение, которое будет вычисляться каждый раз при необходимости вернуть значение этого вычисляемого поля. Элемент <ограничение поля> означает ограничение, которое задается при одновременном определении поля (функционально полностью аналогично варианту описания ограничения отдельной строкой при создании таблицы). Остальные элементы были описаны в предыдущей лабораторной работе.
Пример создания таблицы "Человек" (домены ID и Name описаны в предыдущей лабораторной работе):
CREATE TABLE Person(
Pr_ID ID, -- номер человека
|
|
Pr_LastName Name, -- фамилия
Pr_FirstName Name, -- имя
Pr_Patronymic CHAR(30), -- отчество
Pr_FIO COMPUTED BY (-- фамилия и инициалы
Pr_LastName || ' ' || SUBSTRING(Pr_FirstName FROM 1 FOR 1) || '.' ||
SUBSTRING(Pr_Patronymic FROM 1 FOR 1) || '.'));
Первые три поля заданы с использованием доменов, тип поля Pr_Patronymic задан непосредственно при создании таблицы, а поле Pr_FIO является вычисляемым.
В этом операторе || означает операцию конкатенации (соединения) строк, SUBSTRING() – функция, возвращающая подстроку (в приведенном примере – первую букву полей " Pr_FirstName " и " Pr_Patronymic ").
Если при описании поля не использовать домен, то Firebird все равно создает домен специально для этого поля. Имя таких доменов состоит из символов " RDB$ " и порядкового номера. С такими системными доменами можно выполнять такие же операции, как и с обычными доменами.
Для удаления таблицы используется оператор DROP TABLE.
DROP TABLE Person; -- Пример удаления таблицы
Оператор ALTER TABLE предназначен для изменения структуры таблицы вместо ее удаления и повторного создания. С его помощью можно изменять названия полей, добавлять новые и удалять имеющиеся поля, а также добавлять и удалять ограничения.
Примеры операторов ALTER TABLE:
-- добавление поля "День рождения":
ALTER TABLE Person ADD Birthday DATE;
-- удаление поля "Отчество":
ALTER TABLE Person DROP Pr_Patronymic;
-- переименование поля "День рождения":
ALTER TABLE Person ALTER COLUMN Birthday TO Pr_Birthday;
Если требуется изменить тип поля, например, увеличить число символов, хранимых в поле, то необходимо изменять домен этого поля оператором ALTER DOMAIN или выполнить изменения в системных таблицах.