Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.62 Mб
Скачать

Целостность сущностей

Первичный ключ таблицы должен иметь уникальное непустое значение в каждой ее строке. Например, каждая строка таблицы Кафедра должна содержать уникальное значение номера кафедра, помещенное в столбец ККАФ; именно оно будет уникальным образом определять кафедру, представленную этой строкой таблицы. Стандарт ISO позволяет задавать подобные требования поддержки целостности данных с помощью конструкции PRIMARY KEY в операторах CREATE TABLE и ALTER TABLE. Например, для определения первичного ключа таблицы Кафедра можно использовать следующую конструкцию:

PRIMARY KEY(ККАФ)

В случае составного первичного ключа, например, первичного ключа таблицы Студент, состоящего из двух столбцов под именами НС и НГ, конструкция определения первичного ключа PRIMARY KEY будет иметь вид PRIMARY KEY(НС, НГ) Конструкция PRIMARY KEY может указываться в определении таблицы только один раз. Однако существует возможность гарантировать уникальность значений и для любых альтернативных ключей таблицы, для чего предназначено ключевое слово UNIQUE. Кроме того, при определении столбцов альтернативных ключей рекомендуется использовать и спецификаторы NOT NULL. В каждой таблице может быть определено произвольное количество конструкций UNIQUE. База данных отвергает любые попытки выполнения операций INSERT или UPDATE, которые влекут за собой создание повторяющегося значения в любом потенциальном ключе (под этим подразумевается первичный или альтернативный ключ). Например, определение таблицы Студент можно переписать следующим образом:

НС VARCHAR(5) NOT NULL,

НГ VARCHAR(5) NOT NULL,

UNIQUE (НС, НГ)

Ссылочная целостность

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

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

Например, значение в столбце номера кафедры ККАФ таблицы Кафедра всегда должно связывать данные о преподавателе с конкретной строкой таблицы Преподаватель. Если столбец с номером кафедры не пуст, он обязательно должен являться допустимым значением столбца ККАФ таблицы Преподаватель. В противном случае преподаватель будет закреплен за несуществующей кафедрой. Стандарт ISO предусматривает механизм определения внешних ключей с помощью конструкции FOREIGN KEY операторов CREATE TABLE и ALTER TABLE. Например, для определения внешнего ключа ККАФ в таблице Кафедра можно использовать следующую конструкцию:

FOREIGN KEY(ККАФ) REFERENCES Преподаватель

Теперь система отклонит выполнение любых операторов INSERT или UPDATE, с помощью которых будет предпринята попытка создать в дочерней таблице значение внешнего ключа, не соответствующее одному из уже существующих значений потенциального ключа родительской таблицы. Действия системы, выполняемые при поступлении операторов UPDATE или DELETE, содержащих попытку обновить или удалить значение потенциального ключа в родительской таблице, которому соответствует одна или несколько строк дочерней таблицы, зависят от правил поддержки ссылочной целостности, указанных в конструкциях ON UPDATE и ON DELETE конструкции FOREIGN KEY. На тот случай, если пользователь предпринимает попытку удалить из родительской таблицы строку, на которую ссылается одна или несколько строк дочерней таблицы, в языке SQL предусмотрены следующие четыре допустимых варианта действий.

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

  • SET NULL. Выполняется удаление строки из родительской таблицы, а во внешние ключи всех ссылающихся на нее строк дочерней таблицы заносятся значения NULL. Этот вариант применим только в том случае, если в определении столбца внешнего ключа отсутствует ключевое слово NOT NULL.

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

  • NO ACTION. Операция удаления строки из родительской таблицы отвергается. Именно это значение используется по умолчанию в тех случаях, когда в описании внешнего ключа конструкция ON DELETE опущена. Те же правила применяются в языке SQL и тогда, когда значение потенциального ключа родительской таблицы обновляется. В случае использования правила CASCADE в столбцы внешнего ключа дочерней таблицы помещается новое, измененное значение потенциального ключа родительской таблицы. Аналогичным образом, обновления каскадно распространяются на другие таблицы, если их внешние ключи ссылаются на обновленные столбцы дочерней таблицы. Например, в таблице Преподаватель столбец номера кафедры является внешним ключом, ссылающимся на таблицу Кафедра. Для этого внешнего ключа можно установить правило удаления, указывающее, что в случае удаления записи о кафедре из таблицы Кафедра, соответствующее значение в столбце ККАФ таблицы Преподаватель должно быть заменено значением NULL:

FOREIGN KEY (ККАФ)

REFERENCES Кафедра ON DELETE SET NULL

Аналогичным образом, столбец с номером преподавателя (ТАБН) таблицы Изучение является внешним ключом, связывающим ее с таблицей Преподаватель Можно установить правило обновления, указывающее, что в случае изменения номера преподавателя из таблицы Преподаватель соответствующие значения в столбце ТАБН таблицы Изучение также должны быть заменены новым значением:

FOREIGN KEY (ТАБН) REFERENCES Преподаватель ON UPDATE CASCADE

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]