Общий формат оператора создания таблиц
CREATE TABLE ИмяТаблицы
( <опр_столбца>
[, <опр_столбца> | <ограничение> …]);
<опр_столбца> - определение столбца таблицы.
<опр_столбца> =столбец { тип_данных | COMPUTED [ BY ]
(<выражение>) | домен }
[ DEFAULT {литерал | NULL | USER } ]
[NOT NULL] [<огранич_столбца>]
Пример оператора создания таблиц:
CREATE TABLE SAL_HIST
QUORTER INTEGER NOT NULL,
LAST_YEAR INTEGER,
THIS_YEAR INTEGER,
DELTA COMPUTED_BY (THIS_YEAR - LAST_YEAR),
PRIMARY KEY (QUORTER) );
QUORTER | LAST_YEAR | THIS_YEAR | DELTA |
-20 | |||
Ограничения целостности
Ограничения целостности бывают двух видов:
· Накладываемые на отдельный столбец;
· Накладываемые на всю таблицу.
При наложении на отдельный столбец :
TOVAR VARCHAR(20) NOT NULL PRIMARY KEY, …
При наложении ограничений на таблицу :
CREATE TABLE … (
TOVAR VARCHAR(20) NOT NULL
…
PRIMARY KEY (TOVAR)
);
3.3.6. Первичные и уникальные (альтернативные) ключи
На уровне столбцов:
CREATE TABLE VLADLIM (
KODVLAD INTEGER NOT NULL PRIMARY KEY,
NAZVVLAD VARCHAR(50) NOT NULL UNIQUE
);
На уровне таблицы:
CREATE TABLE VLADLIM (
KODVLAD INTEGER NOT NULL,
NAZVVLAD VARCHAR(50) NOT NULL,
PRIMARY KEY ( KODVLAD),
UNIQUE ()NAZVVLAD)
);
Внешний ключ и определение ссылочной целостности
Внешний ключ строится в дочерней таблице.
Описание формата:
[CONSTRAINT <имя ссылочной целостности>]
FOREIGN KEY ( <список столбцов внешнего ключа>)
REFERENCES <имя родительской таблицы>
[ <список столбцов родительской таблицы > ]
[ON DELETE { NO ACTION | CACADE | SET DEFAULT | SET NULL}]
[ON UPDATE { NO ACTION | CACADE | SET DEFAULT | SET NULL}]
Пример:
CREATE TABLE P (
PK_FIELD INTEGER NOT NULL,
OTHER FIELD INTEGER,
PRIMARY KEY (PK_FIELD)
);
CREATE TABLE F (
PK_FIELD1 INTEGER NOT NULL,
PK_FIELD2 INTEGER NOT NULL,
SOME_FIELD INTEGER,
PRIMARY KEY (PK_FIELD1,PK_FIELD2),
FOREIGN KEY (PK_FIELD1) REFERENCES P
ON UPDATE CASCADE
);
Требования к значениям столбцов
Примеры фрагментов ограничений:
CREATE TABLE PERSON _PARAMS (
ID_INTEGER NOT NULL PRIMARY KEY,
HEIGHT INTEGER NOT NULL,
WIEGHT INTEGER NOT NULL CHECK (HEIGHT > WIEGHT)
);
---------------------------------------------------------------------------------
CREATE TABLE RASHOD (
…
CONSTRAINT PO_DATE_RASH
CHECK (EXISTS (SELECT TOVAR FROM PRIHOD
WHERE PROHOD.TOVAR=RASHOD.TOVAR))
);
Столбец должен содержать сочетание символов USD
… CHECK (STOLBEZ CONTAINING “USD”)
Столбец должен начинаться с сочетания символов USD
… CHECK (STOLBEZ STARTING WITH “USD”)
Изменение объявлений таблицы
Оператор ALTER TABLE позволяет:
Добавить определение нового столбца
ALTER TABLE <имя таблицы> ADD <определение столбца>;
Удалить столбец из таблицы
ALTER TABLE <имя таблицы> DROP <имя столбца1> [,<имя столбца2>…
Удалить атрибуты целостности таблицы или отдельного столбца
ALTER TABLE <имя таблицы> DROP <имя ограничения целостности>
Добавить новые ограничения целостности
ALTER TABLE <имя таблицы> ADD [CONSTRAINT <имя ограничения>] <определение целостности>;
Удаление таблицы
Удаление таблицы целиком:
DROP TABLE <имя таблицы>
Работа с индексами
Логическое разделение на ключи индексы:
Логический уровень
· Первичный ключ выполняет функцию однозначной идентификации записи в таблицы. Первичный и внешний ключи строятся для обеспечения ссылочной целостности реляцинно-связанных таблиц.
· Индексы служат для сортировок и оптимизации доступа к данным
Физический уровень
· Все ключи и индексы преобразуются в физические индексы - специальный механизм, обеспечивающий быстрый доступ к данным.
Необходимость создания индексов:
Индексы необходимо создавать в случае, когда по столбцу или группе столбцов:
· Часто производится поиск в БД;
· Часто строятся объединения таблиц;
· Часто производится сортировка;
· Часто производится сортировка;
Не рекомендуется строить индексы по столбцам или группам столбцов, которые:
· Редко используются для поиска, объединения , сортировки результатов запроса
· Часто меняют значение, что приводит к необходимости часто обновлять индекс и способно существенно замедлить скорость работы с БД;
· Содержит небольшое число вариантов значения
Пример:
CREATE TABLE SOTR (
ID_SOTR INTEGER NOT NULL,
OTDEL VARCHAR (10),
DOLGNOST CHAR (10),
FIO VARCHAR(25),
PRIMARY KEY (ID_SOTR));
CREATE INDEX DLJ ON SOTR (DOLGNOST);
Именоваться индексы будут так :
DLJ INDEX ON SOTR (DOLGNOST)
RDB$PRIMARY18 UNIQUE INDEX ON SOTR (ID_SOTR)
После многократного внесения изменений в таблицу БД индексы этой таблицы могут быть разбалансированы. Разбалансировка приводит к тому, что глубина индекса возрастает сверх критического значения.
Для улучшения показателя индекса необходимо выполнить его перестроение:
ALTER INDEX <имя индекса> DEACTIVATE;
ALTER INDEX <имя индекса> ACTIVATE;
Замечания:
· Нельзя перестроить индекс, если он используется в данный момент в запросах
· Нельзя перестроить индекс, созданный в результате создания первичного ключа, внешнего и уникального ключей.