Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие ТБД.doc
Скачиваний:
26
Добавлен:
04.09.2019
Размер:
1.92 Mб
Скачать

3.3.5.Ограничения целостности

Ограничения целостности бывают двух видов:

  • Накладываемые на отдельный столбец;

  • Накладываемые на всю таблицу.

При наложении на отдельный столбец :

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)

);

3.3.7.Внешний ключ и определение ссылочной целостности

Внешний ключ строится в дочерней таблице.

Описание формата:

[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

);

3.3.8.Требования к значениям столбцов

Примеры фрагментов ограничений:

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”)

3.3.9.Изменение объявлений таблицы

Оператор ALTER TABLE позволяет:

Добавить определение нового столбца

ALTER TABLE <имя таблицы> ADD <определение столбца>;

Удалить столбец из таблицы

ALTER TABLE <имя таблицы> DROP <имя столбца1> [,<имя столбца2>…

Удалить атрибуты целостности таблицы или отдельного столбца

ALTER TABLE <имя таблицы> DROP <имя ограничения целостности>

Добавить новые ограничения целостности

ALTER TABLE <имя таблицы> ADD [CONSTRAINT <имя ограничения>] <определение целостности>;

3.3.10.Удаление таблицы

Удаление таблицы целиком:

DROP TABLE <имя таблицы>

3.3.11.Работа с индексами Логическое разделение на ключи индексы:

Логический уровень

  • Первичный ключ выполняет функцию однозначной идентификации записи в таблицы. Первичный и внешний ключи строятся для обеспечения ссылочной целостности реляцинно-связанных таблиц.

  • Индексы служат для сортировок и оптимизации доступа к данным

Физический уровень

  • Все ключи и индексы преобразуются в физические индексы - специальный механизм, обеспечивающий быстрый доступ к данным.

Необходимость создания индексов:

Индексы необходимо создавать в случае, когда по столбцу или группе столбцов:

  • Часто производится поиск в БД;

  • Часто строятся объединения таблиц;

  • Часто производится сортировка;

  • Часто производится сортировка;

Не рекомендуется строить индексы по столбцам или группам столбцов, которые:

  • Редко используются для поиска, объединения , сортировки результатов запроса

  • Часто меняют значение, что приводит к необходимости часто обновлять индекс и способно существенно замедлить скорость работы с БД;

  • Содержит небольшое число вариантов значения

Пример:

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;

Замечания:

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

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