Введение в стандарты языка баз данных SQL

       

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


Домен является определенным и именованным в схеме множеством допустимых значений данного типа. Назначение домена состоит в том, чтобы ограничить множество значений связанного с ним типа, которые могут храниться в базе данных.

При определении домена указываются базовый тип данных и так называемое ограничение домена, которое ограничивает множество значений домена. Кроме того, специфицируется раздел умолчания с указанием значения домена, которое должно в дальнейшем использоваться как значение по умолчанию для любого столбца, определенного на этом домене, если только при определении столбца значение по умолчанию не задано явно.

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

Для каждого столбца при его определении задается специальная характеристика, ограничивающая или допускающая появление в нем неопределенных значений. Попытка поместить неопределенное значение в столбец, для которого они запрещены, воспринимается как ошибка. Пусть C - имя столбца. В столбце С не могут быть разрешены неопределенные значения в любом из следующих трех случаев: (1) для содержащей его таблицы определено хотя бы одно неоткладываемое ограничение целостности с условием поиска, включающем С ISNOTNULL; (2) столбец определен на домене с неоткладываемым ограничением, содержащем фразу VALUESNOTNULL; (3) для столбца определено неоткладываемое ограничение уникальности, специфицирующее столбец как первичный ключ. Во всех остальных случаях в столбце могут быть разрешены неопределенные значения.

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

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

Таблица может быть базовой, представляемой или порождаемой. Базовая таблица может быть постоянно хранимой, глобальной временной, создаваемой локальной временной или объявляемой локальной временной. Постоянная базовая таблица - это именованная таблица, в определении которой не указано TEMPORARY.

Порождаемая таблица - таблица, прямо или косвенно порождаемая из одной или более других таблиц путем вычисления выражения запроса. Значения порождаемой таблицы порождаются из значений определяющих таблиц при вычислении выражения запроса.

Представляемая таблица - это именованная порождаемая таблица, определенная с помощью конструкции определения представления. Иногда представляемые таблицы называют просто представлениями.

Все базовые таблицы являются обновляемыми. Порожденные таблицы - либо обновляемые, либо только читаемые.

Глобальная временная таблица - именованная таблица, в определении которой указано GLOBALTEMPORARY. Создаваемая локальная временная таблица - именованная таблица, в определении которой указано LOCALTEMPORARY. Глобальные и создаваемые временные таблицы реально материализуются (т.е. начинают занимать память) только при обращении к ним в SQL-сессии, причем для локальных временных таблиц создаются отдельные экземпляры для каждого модуля, участвующего в сессии.

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

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

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

Каждое ограничение может быть либо откладываемым, либо неоткладываемым. Внутри транзакции для каждого ограничения существует режим. Если ограничение неоткладываемое, то его режим всегда немедленный, в противном случае режим либо немедленный, либо отложенный. Для каждого ограничения имеется начальный режим, который указывает, каким должен быть режим при начале транзакции и немедленно сразу после определения ограничения. Если ограничение является откладываемым, то его режим может быть изменен (с немедленного на отложенный или наоборот) путем выполнения оператора установки режима ограничения.

Проверка ограничения производится в зависимости от его режима в текущей транзакции. Если режим немедленный, то ограничение проверяется в конце каждого оператора. Если режим отложенный, то ограничение проверяется либо при изменении режима на немедленный, либо в конце текущей транзакции.

Когда ограничение проверяется не в конце транзакции и не удовлетворяется, то возбуждается исключительная ситуация, и SQL-оператор, вызвавший проверку ограничения, не производит никакого действия, кроме занесения соответствующей информации в область диагностики. При завершении транзакции (выполнении оператора COMMIT) фактически проверяются все ограничения; если какое-либо ограничение не удовлетворяется, транзакция завершается откатом (неявным выполнением оператора ROLLBACK).

Мы опустим описание табличных ограничений, поскольку они мало отличаются от того, что было в SQL/89, а на незначительных отличиях мы остановимся при рассмотрении средств определения схемы базы данных.

Ограничение домена применяется ко всем столбцам, определенным на данном домене, и ко всем значениям, преобразуемым к этому домену. Ограничение домена содержит условие поиска и удовлетворяется в том и только в том случае, когда для любой таблицы T, которая содержит столбец C, основанный на этом домене, условие поиска с заменой каждого вхождения VALUE на C не является ложным для каждой строки T. Ограничение домена удовлетворяется результатом операции преобразования в том и только в том случае, когда условие поиска с заменой каждого вхождения VALUE на этот результат не является ложным.

Ограничение целостности - это именованное ограничение, которое может относиться к содержимому отдельных строк таблицы, ко всему содержимому таблицы или к состоянию, которым должен обладать набор таблиц. Ограничение целостности содержит условие поиска и удовлетворяется в том и только в том случае, когда это условие поиска не является ложным.



Содержание раздела