Л10_целостность.pptx
- Количество слайдов: 16
Структура реляционной модели данных: ЦЕЛОСТНОСТЬ Реляционная модель состоит из трех четко выраженных частей, описывающих разные аспекты реляционного подхода: структурной, манипуляционной и целостной. Целостность БД подразумевает соответствие структуры БД и содержащихся в ней значений данных комплексу ограничений, обусловленных как общими свойствами используемой модели данных, так и специфическими условиями использования базы и свойствами предметной области, представленной в базе. Любое изменение структуры или содержания БД должно сопровождаться проверкой сохранения целостности. В зависимости от уровня ограничений их проверка может быть немедленной или отложенной. . В целостной части реляционной модели данных фиксируются два базовых требования целостности, которые должны поддерживаться в любой реляционной СУБД: требование целостности сущностей и требованием целостности по ссылкам.
Отражение ограничений целостности в схеме БД Ограничения целостности задаются при формировании схемы базы данных В различных СУБД задание ограничений реализуется различным образом и с различной степенью детализации. Общие ограничения модели поддерживаются всеми СУБД , основанными на использовании модели данного типа БД пользователи привилегии таблицы поля «Содержание» схемы базы данных связи ограничения типы ограничения
Требование целостности сущностей состоит в том, что любой кортеж любого отношения отличим от любого другого кортежа этого отношения, Потенциальный ключ - атрибут или группу атрибутов, на основе значений которых можно уникальным образом идентифицировать экземпляр сущности. Ключ, состоящий из одного атрибута, называют простым, а из группы атрибутов – составным. В общем случае сущность может иметь несколько потенциальных ключей. Если R – некоторое отношение, то ключ K – это подмножество множества атрибутов отношения R (К {Ai}), обладающее следующими свойствами: Уникальность – в R нет двух различных кортежей с одинаковым значением К Неизбыточность или неприводимость (для составных ключей) - никакое из подмножеств К не обладает свойством уникальности. (в ключе не должно быть «лишних» атрибутов, т. е. таких атрибутов, которые можно исключить из состава ключа, сохранив свойство уникальности). Потенциальные ключи обеспечивают основной механизм адресации на уровне кортежей в реляционной схеме. Первичный ключ - используется в качестве идентификатора экземпляров сущности (один из потенциальных)
Требование целостности по ссылкам в реляционной модели Описание сложных сущностей реального мира может быть представлено в реляционной БД в виде нескольких кортежей нескольких отношений. Для того чтобы определить, что эти кортежи относятся к одной сущности (объекту) реального мира необходимо иметь специальный аппарат описания связей между этими кортежами. В качестве такого аппарата используются внешние (или ссылочные) ключи. Пусть R 2 – базовое отношение. Тогда внешний ключ FK в отношении R 2 - это подмножество атрибутов R 2, такое что: Существует другое базовое отношение R 1 с потенциальным ключем CK; Каждое значение FK в текущем значении R 2 всегда совпадает со значением CK некоторого кортежа в текущем значении R 1 R 3 R 2 CK 2 FK 1 CK 1 FK 2 между отношениями R 1 и R 3 существует ссылочный путь (R 3 R 2 R 1), позволяющий идентифицировать соответствующие другу кортежи в отношениях R 1 и R 3.
Ссылочная целостность базы данных требует, чтобы БД не содержала несогласованных значений внешних ключей (для каждого значения внешнего ключа FK, появляющегося в ссылающемся отношении R 2, в отношении R 1, на которое ведет ссылка, должен найтись кортеж с таким же значением потенциального ключа CK) Для обеспечения ссылочной целостности при выполнении операций удаления и модификации записей в базе данных существует несколько механизмов: Ограничения – запрещается производить удаление кортежа, на который существуют ссылки Каскадирование - при удалении кортежа из отношения, на которое ведет ссылка, из ссылающегося отношения автоматически удаляются все ссылающиеся кортежи. Использование неопределенного значения - при удалении кортежа, на который имеются ссылки, во всех ссылающихся кортежах значение внешнего ключа автоматически становится неопределенным (nullзначения ). По мнению ряда авторов null-значения нарушают формальную модель РБД. В качестве альтернативного решения предлагается использовать некоторое значение по умолчанию (возможно – фиктивное) вместо неизвестных значений.
ЦЕЛОСТНОСТЬ Правила целостности конкретной базы данных задаются набором логических условий, которым должна удовлетворять структура БД и хранимые в БД значения. Обычно ограничения целостности задаются при описании базовых отношений (при формировании схемы базы данных). Производные отношения наследуют некоторые ограничения целостности отношений, из которых они выведены. Однако для производного отношения, кроме автоматически наследуемых ограничений, могут быть заданы также некоторые дополнительные ограничения целостности. Ограничения целостности в общем случае содержат три компонента: Ø имя ограничения целостности (используется для регистрации в системном каталоге). Ø истинностное выражение ограничения (ограничение целостности удовлетворяется тогда, когда это выражение истинно, а нарушается тогда и только тогда, когда это выражение ложно). Ø реакция на нарушение (указывает системе те действия, которые необходимо выполнить при попытке пользователя нарушить ограничение целостности - может быть процедурой произвольной сложности).
Категории ограничений целостности Ограничением целостности домена является определение множества значений, которые образуют этот домен. Такое ограничение целесообразно задавать, когда количество значений, образующих домен, невелико, и все они известны. Стандарт ISO (International Organization механизма определения доменов: for Standardization) предусматривает два Использование предложения CHECK в операторах CREATE TABLE и ALTER TABLE: CREATE TABLE teacher ( … Ac_degree CHAR NOT NULL CHECK (Ac_degree IN (‘N’, ’K’, ’D’)) … ) Использование оператора CREATE DOMAIN : CREATE DOMAIN Degree AS CHAR DEFAULT ‘N’ CHECK (VALUE IN (‘N’, ’K’, ’D’)) Определение домена на основе «справочной» таблицы : CREATE DOMAIN Trn_Num AS INTEGER CHECK (VALUE IN (SELECT t_n FROM Ttain))
Категории ограничений целостности Ограничение целостности атрибута представляет собой определение домена, из которого выводятся значения для данного атрибута. Если определен домен: CREATE DOMAIN Degree AS CHAR DEFAULT ‘N’ CHECK (VALUE IN (‘N’, ’K’, ’D’)), То определение атрибута Ac_degree при описании таблицы будет иметь вид: Ac_degree Degree NOT NULL Значение по умолчанию: Year(Date()) Условие на значение : <=Year(Date()) And >1900 Некоторые СУБД (например, MS Access) не поддерживает явное определение домена, но позволяют определить ограничения целостности атрибута Ограничения целостности атрибута всегда проверяются немедленно. Реакцией на нарушение ограничений целостности атрибута является выполнение операции, отменяющей действия, вызвавшие это нарушение.
Категории ограничений целостности Ограничение целостности отношения является правилом, заданным только для некоторого отношения и больше ни для какого другого отношения или домена. «Стандартным» ограничением целостности отношения (сущности) является определение первичного и потенциальных ключей в операторе CREATE TABLE, обеспечивающих автоматизированную проверку уникальности записи (кортежа) в отношении: PRIMARY KEY имя_поля [, имя_поля…] – определяет первичный ключ отношения (только один); UNIQUE имя_поля [, имя_поля…] – определяет потенциальный ключ отношения (уникальный индекс). При необходимости для одного отношения может быть задано несколько потенциальных ключей. Пример: В СУБД MS ACCESS при построении таблицы Reader определены: первичный ключ St_num и уникальный индекс (потенциальный ключ) Passport_n
Категории ограничений целостности Некоторые СУБД предоставляют возможность определить дополнительные ограничения целостности отношения, общий синтаксис которых имеет следующий вид: ОПЕРАТОР СОЗДАНИЯ имя ограничение [действие]. Где: имя – имя ограничения; ограничение - не содержащая свободных переменных формула (WFF) исчисления кортежей (или истинностное выражение реляционной алгебры). действие - процедура произвольной сложности, которая вызывается в случаях, когда параметр ограничение оценивается как ложный Варианты реализации: (стандарт ISO) CREATE ASSERTION имя CHECK ограничение. CONSTRAINT имя ограничение CREATE INTEGRITY RULE имя ограничение [ON ATTEMPTED VIOLATION действие] Предикат отношения — формируется в результате логического умножения всех ограничений целостности отношения и всех ограничений целостности атрибутов, входящих в это отношение. Ограничения целостности отношения всегда проверяются немедленно, т. е. концептуально заключительным этапом каждой операции обновления данного отношения является проверка всех заданных для этого отношения ограничений целостности.
Категории ограничений целостности Ограничение целостности базы данных является правилом, которое задается для двух или более связанных между собой отношений. Использование требований целостности по ссылкам, задаваемых с помощью внешних (или ссылочных) ключей позволяет «разложить» описание сложных сущностей реального мира по кортежам нескольких отношений. FOREIGN KEY (имя поля) REFERENCES имя_таблицы(имя_поля) ON DELETE опция ON UPDATE опция Возможные опции : NO ACTION; CASCADE; SET DEFAULT; SET NULL Внешний ключ FK в отношении R 2 - это подмножество атрибутов R 2, такое что: существует другое базовое отношение R 1 с потенциальным ключем CK, причем каждое значение FK в текущем значении R 2 всегда совпадает со значением CK некоторого кортежа в текущем значении R 1. R 3 R 2 CK 2 R 1 FK 1 CK 1 FK 2
Категории ограничений целостности Общий синтаксис для ограничения целостности базы данных выглядит аналогично синтаксису для ограничений целостности отношения: Но! Ограничение целостности базы данных должно включать по крайней мере одно "условие соединения", содержащее две различных связанных переменных, которые определены в двух разных отношениях (в результате эти отношения становятся связанными между собой). Пример: CREATE ASSERTION rule_use CHEK If readers. r_type=“teacher” then (uchet. time_back-uchet. time_begin<60) else (uchet. time_back-uchet. time_begin< 30) Ограничения целостности базы данных не проверяются немедленно, так как для полного обновления связанных отношений может понадобиться выполнить несколько разных операций обновления. Некоторые ограничения базы данных могут быть "немедленно" проверены, однако такую раннюю проверку следует рассматривать как оптимизацию, а не как присущее этому ограничению свойство. Предикат базы данных определяется как логическое умножение всех ограничений целостности базы данных и всех предикатов отношений, которые используются в этой базе данных.
Пример создание таблицы средствами SQL Имя таблицы CREATE TABLE books ( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Определения A_ship INTEGER UNSIGNED NOT NULL, полей title VARCHAR(256) NOT NULL, year INTEGER UNSIGNED NOT NULL, pub_house VARCHAR(40) NOT NULL, Определение первичного PRIMARY KEY(id)) ключа таблицы CREATE TABLE uchet ( id_user INTEGER UNSIGNED NOT NULL, id_book INTEGER UNSIGNED NOT NULL, date_beg DATE NOT NULL, date_end DATE NOT NULL, PRIMARY KEY(id_user, id_book, date_beg), FOREIGN KEY(id_user) REFERENCES readers(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(id_book) REFERENCES books(id) ON DELETE CASCADE ON UPDATE CASCADE ) Определение внешних ключей таблицы
Описание ограничений: Первичный ключ задается выражением PRIMARY KEY (имя поля [имя поля 2, …]) Для таблицы может быть задан только один первичный ключ, который может быть простым (одно поле) или составным (состоять из нескольких полей). Потенциальный ключ задается выражением UNIQUE (имя поля [имя поля 2, …]) Таблица может иметь несколько потенциальных ключей. Внешний ключ задается выражением FOREIGN KEY (имя поля) REFERENCES имя_таблицы(имя_поля) ON DELETE опция ON UPDATE опция Возможные опции : NO ACTION; CASCADE; SET DEFAULT; SET NULL Используется для установления связи между таблицами Проверочные условия могут задаваться с помощью фразы CHECK (условное выражение). Используются, как правило, для проверки ограничений, накладываемых предметной областью (бизнес-правилами)
Ограничения перехода определяют допустимые изменения значений хранимых данных в зависимости от их текущих значений. Ограничения перехода, задаваемые для отношения, проверяются немедленно. Проверка ограничений, заданных для базы данных (они содержит два или более разных отношения), откладывается до завершения транзакции (составной операции обновления). Для доменов и атрибутов концепция ограничений состояния и перехода не имеет смысла. Исходное значение k 1 Транзакция S 1 S 2 K 1’ K 2’ Временное значение UPDATE k Проверка ограничения k 2 Новое значение Фиксация нового значения Копия
Реакция на нарушения При задании действия (реакции) на попытку нарушения ограничений целостности важно предусмотреть возможность выполнения различных «компенсирующих» операций в зависимости от причин, приводящих к нарушению условия, и состояния системы в момент возникновения нарушения. Реакции по умолчанию: REJECT - (отмена операции) реакция на нарушение ограничения целостности атрибута или отношения ROLLBACK – ( «откат транзакции» ) реакция на нарушение ограничения целостности базы данных Не все реальные СУБД обеспечивают возможность определения и обработки ограничений целостности уровня отношения и базы данных. Поэтому контроль и поддержание целостности часто реализуется «внешними» по отношению к СУБД программными средствами.