Правила ссылочной целостности
Внешний ключ подчиненной таблицы можно рассматривать как ссылку на строку главной таблицы с таким же значением первичного ключа. Отсюда вытекает основное правило ссылочной целостности – все значения внешнего ключа должны быть согласованы с соответствующими значениями первичного ключа. Применительно к нашему примеру это означает, что в таблице контактные телефоны не должно быть кодов клиентов, которых нет в основной таблице клиенты.
Ссылочная целостность должна жестко контролироваться при выполнении любых операций с данными таблиц (правило Кодда №12).
Правило Кодда №7 устанавливает 4 таких операции – извлечение, вставка новых строк, удаление строк и изменение (обновление) существующих строк (операции select, insert, delete, update). Операция извлечения не может нарушить целостности, т.к. не изменяет данные. Рассмотрим основные стратегии поддержки ссылочной целостности для остальных операций.
Операция вставки критична только для подчиненной таблицы (можно добавить нового клиента, у которого нет телефона, но нельзя добавить телефон несуществующего клиента), поэтому вставка новых строк в подчиненную таблицу должна проверяться на согласованность значений внешнего ключа.
Удаление строк подчиненной таблицы, наоборот, абсолютно безопасно (можно удалить любой телефон, не нарушив ссылочной целостности). Однако, удаление строк главной таблицы при наличии связанных строк в подчиненной таблице непременно приведет к нарушению ссылочной целостности, чего допустить нельзя ни в коем случае. Здесь имеется две основных стратегии удаления
· запрет удаления таких строк (ограничение удаления - restrict)
· каскадное удаление строки главной таблицы вместе со всеми связанными строками подчиненной таблицы (удаление каскадом - cascade).
В нашем конкретном примере с телефонами разумным решением будет каскадное удаление (при удалении клиента автоматически должны удаляться и все строки с его телефонами). В реальной практике чаще применятся запрет удаления строк при наличии на них хотя бы одной ссылки из других таблиц. Отметим, что ни одна СУБД не позволит удалить всю таблицу целиком, если имеется хотя бы одна другая таблица, которая на нее ссылается.
Изменение (обновление) значений внешнего, а особенно первичного ключа заполненной базы данных обычно не происходит, однако стратегия каскадного обновления некоторыми СУБД поддерживается.
В следующей главе пособия реляционная модель данных будет определена более формально. Наличие формального математического описания считается одним из достоинств реляционной модели.
Дата добавления: 2015-08-26; просмотров: 1291;