Общий формат оператора создания таблиц

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;

Замечания:

· Нельзя перестроить индекс, если он используется в данный момент в запросах

· Нельзя перестроить индекс, созданный в результате создания первичного ключа, внешнего и уникального ключей.