Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Неделя 04 Лекция 1 (6).doc
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
160.77 Кб
Скачать

6.7.3. Обеспечение целостности сущности и ссылочной целостность на этапе создания таблицы.

Вернемся к оператору CREATE TABLE. Общий формат этого оператора выглядит так:

CREATE TABLE имя_таблицы

(Имя_солонки тип_данных [NULL | NOT NULL] [UNIQUE] [, . . . ])

[DEFAULT значение по умолчанию ] [CHEC(условие_поиска)] {,…]}

[PRIMARY KEY (список_колонок),]

{[UNIQUE (список_солонок),] [,…]}

{[FOREIGN KEY (список_солонок)

REFERENCER имя_родительской_таблицы [(список_колонок_потенциального_ключа],

[ON UPDATE действие]

[ON DELETE действие] ] [,…]}

{[CHECK (условие поиска)] [,…] })

Набор доступных типов данных был описан ранее. Ключевое слово NULL используется для указания того, что в данном столбце могут содержаться значения NULL. Значение NULL отличается от пробела или нуля – оно используется для указания того, что данные недоступны, опущены или недопустимы. Если указано ключевое слово NOT NULL, то будут отклонены любые попытки поместить значение NULL в данный столбец. Если указано значение NULL, помещение значений NULL в столбец будет разрешено. По умолчанию стандарт ISO предполагает наличие ключевого слова NULL.

Столбцы первичных ключей всегда должны определяться с указанием ключевого слова NOT NULL – это гарантирует, что первичный ключ таблицы не будет содержать пустых значений, способных вызвать нарушение ссылочной целостности данных. Если определитель NOT NULL не будет указан, в ключевой столбец таблицы могут быть внесены пустые значения, что вызовет нарушение ссылочной целостности данных. Для исключения подобных ошибок потребуется создать специальные программы, предназначенные для поддержки ссылочной целостности данных в системе. Столбцы внешних ключей также часто (но не всегда) являются кандидатами на использование ключевого слова NOT NULL.

Необязательная фраза DEFAULT предназначена для задания значения, применяемого по умолчанию. Оно будет использоваться каждый раз, когда в операторе INSERT будет отсутствовать значение для данного столбца. Помимо прочих вариантов значения параметра, значение_по_умолчанию может представлять собой также литерал (числовое, строковое или дата).

Предложение CHECK было рассмотрено при определении доменов.

В предложении PRIMARY KEY определяется столбец или столбцы, образующие пер­вичный ключ таблицы. В определении каждой таблицы может присутствовать только одно предложение PRIМARY KEY. Система заблокирует выполнение любых операторов INSERT или Update, в которых предпринимается попытка создать строку с дублирующимся значением в столбце (или столбцах), указанной в предложении PRIMARY KEY. Этот меха­низм языка SQL гарантирует уникальность значений первичного ключа.

С помощью предложения UNIQUE могут определяться остальные потенциальные ключи таблицы (т.е. наборы из одного или белее столбцов, значения которых уни­кальным образом идентифицируют каждую из строк таблицы). И опять-таки, для каждого столбца, указанного в предложении UNIQUE, должен использоваться режим NOT NULL. Определение таблицы может включать произвольное количество предложе­ний UNIQUE. Система заблокирует выполнение любых операторов INSERT или UPDATE, в которых предпринимается попытка создать строку с дублирующимся значением в столбце (или столбцах), входящем в любой из потенциальных ключей таблицы.

Предложение FOREIGH KEY позволяет определять внешние ключи таблиц (дочерних) и устанавливаемую с их помощью связь с другой (родительской) таблицей. В этом предложении также указываются необходимые требования к поддержанию ссылочной целостно­сти базы данных. В общем случае предложение может включать следующие элементы:

  • после фразы FOREIGN KEY список_колонок, содержащит имена одного или более столбцов таблицы, образующих данный внешний ключ;

  • фразу REFERENCES, определяющую имя родительской таблицы, т.е. таблицы, содержащей соответствующий потенциальный ключ; если параметр список_колонок_потенциального_ключа (содержащий список имен одного или более столбцов родительской таблицы, образующих требуемый потенциальный ключ) опу­щен, то предполагается, что данный внешний ключ соответствует первичному ключу родительской таблицы. В этом случае также необходимо, чтобы в операторе CREATE TABLE родительской таблицы присутствовала фраза PRIMARY KEY;

  • необязательную фразу определения правила обновления для данной связи (ОN UPDATE), задающую действие, которое система должна выполнить в случае обновления значения потенциального ключа родительской таблицы, на которое есть ссылки в строках, этой дочерней таблицы. Параметр действие может принимать одно из следующих значений: CASCADE, SET NULL, SET DEFAULT или NO ACTION. Если фраза ОN UPDATE опущена, по умолчанию предполагается использование правила NО ACTIOH;

  • необязательную фразу определения правила удаления для данной связи (ON DELETE) задающую действие, которая, система должка выполнить в случае удаления значения потенциального ключа родительской таблицы, на кото­рое есть ссылки в строках этой дочерней таблицы; параметр referential_action принимать одно из следующих значений: CASCADE, SET NULL, SET DEFAULT или NO ACTION. Если фраза ОN UPDATE опущена, по умолчанию предполагается использование правила NО ACTIOH;

При определении таблицы предложение FOREIGN KEY может указываться произ­вольное количество раз. Предложения CHECK и CONSTRAINT позволяют задавать допол­нительные ограничения. Если они используются при введении ограничений для столбцов, то в предложении CHECK можно указывать только имя определяемого столбца.