История развития баз данных. Основные понятия и определения. Архитектура базы данных. Физическая и логическая независимость, страница 22

Для каждого поля создаваемой таблицы может быть определено значение по умолчанию, принимаемое, если в команде INSERTINTO не определено значение поля записи/ Для этого в определении поля указывается DEFAULT = значение.

Например:

ball float CHECK (ball >= 4) DEFAULT = 4;

Если параметр DEFAULTне указан, значение по умолчанию является NULL. Если при этом задано ограничение NOT NULL, то значение поля должно быть обязательно определено непосредственно или через DEFAULT.

3. Создание и уничтожение индексов. Поддержка ссылочной целостности.

Индекс – это упорядоченный список содержимого столбцов или группы столбцов в таблице. Он служит для ускорения поиска данных в таблице. Т.к. записи в таблице в общем случае не упорядочены, то поиск записи по значению поля проводится последовательным просмотром. При длине таблицы в N записей это, в среднем, требует N/2 проверок. При наличии индекса, в среднем, требуется log 2N проверок.

Индекс также служит для быстрого нахождения записей, для которых значение поля находится в определённых пределах. Быстро отсортировать записи по совпадающему значению поля, извлечь записи из таблицы в отсортированных последовательностях и т.д. Будучи однажды созданным, индекс остаётся невидимым для пользователя. SQL сам решит, когда воспользоваться индексом и сделает это автоматически. Также автоматически выполнится обновление индекса при обновлении индексируемой таблицы.

Индекс может быть непосредственно создан командами CREATETABLE и ENTER TABLE. Формат этой команды имеет следующий вид:

CREATE [UNIQUE] INDEX имя_таблицы ON имя_таблицы (имя_столбца, … , имя_столбца );

Где:

UNIQUE   – значение индекса должно быть уникальным в таблице. SQL отслеживает уникальность индекса и не позволяет изменить БД так, чтобы уникальность нарушилась. Такой индекс нельзя создать, если таблица содержит записи с повторяющимися значениями поля. Уникальные индексы следует создавать одновременно с созданием таблиц.

имя_индекса уникально в базе данных.

имя_таблицы – имя индексируемой таблицы

имя_столбца – это имя столбца таблицы по значению которого строится индекс. Если указано несколько столбцов, индексы упорядочиваются по значению первого столбца, при совпадении значения – второго и т.д.

Пример:

CREATE INDEX СтудфамON Студент (sname);

Т.к. возможны полные однофамильцы, индекс строится не уникальным. Необходимость поименования индекса в основном связана с возможностью и необходимостью его уничтожения. Уничтожение индекса осуществляется по команде

DROP INDEX имя_индекса;

Две таблицы находятся, как правило, в отношении один ко многим через значения связующих полей. Для приведённого примера такая связь между таблицами  Студент и Оценка по значениям полей snum и osnum. При этом, связующее поле со стороны отношения один называется родительским ключом, а со стороны многие – внешним ключом. SQL автоматически поддерживает отношения ссылочной целостности при внесении данных, если для таблицы определён внешний ключ. Это можно сделать в виде ограничения на столбец, являющийся внешним ключом в следующем формате:

REFERENCES родительская_таблица (столбец);

А можно сделать и в виде ограничения на таблицу:

FOREIGNKEY (список_стобцов_внеш_ключа) REFERENS родительская_таблица [(список_столбцов)];

В обоих случаях могут не указываться столбцы ключа родительской таблицы, если они определены параметром PRIMARYKEY. Типы столбцов в ключах обеих таблиц должны соответствовать друг другу.

Пример:

CREATE TABLE оценка (opnum char (3) NOT NULL REFERENS преподаватель(pnum), osnum char (3) NOT NULL REFERENS студент(snum), …

Пример (для таблицы Студент):

CREATE TABLE студент (snum char (3) PRIMARY KEY, sname char (30) NOT NULL, sgrp char (3), FOREIGN KEY (spdp) REFERENCE преподаватель(pnum));