Целостность связей

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

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

Рассмотрим правила поддержки целостности связей между двумя наборами объектов, которые применяются при операциях добавления, изменения и удаления объектов из наборов. Считается, что связь между двумя наборами относится к типу «один ко многим». Один из наборов содержит родительские объекты, другой – дочерние. Эти правила называются стандартной целостностью. Основное требование стандартной целостности состоит в наличии для дочерних объектов ссылок на родительский объект. Всего правил десять: 2 правила при добавлении, 4 правила при изменении, 4 правила при удалении. Выбор правил зависит от предметной области.

  1. Добавление объекта

При добавлении дочернего объекта возможны 2 правила:

1) Запрет

Запрещено добавлять дочерний объект, если для него не указан родительский объект. Например, запрещено добавлять нового сотрудника, если для него не указано подразделение.

2) Игнорировать

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

  1. Изменение объекта

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

1) Запрет

Запрещено изменять в дочернем объекте ссылку на родительский объект так, что она указывает на несуществующий родительский объект.

Например, запрещено указывать для сотрудника несуществующее подразделение.

2) Каскад

При изменении родительского объекта каскадно изменяются ссылки на него во всех дочерних объектах, если изменения родительского объекта касаются таких ссылок.

Например, при изменении внутреннего номера подразделения этот номер автоматически изменяется в соответствующем атрибуте для всех сотрудников подразделения.

3) Очистить

При изменении родительского объекта, которые касаются ссылок на него, ссылки на него во всех дочерних объектах заполняются значением 0, NULL или пустой строкой.

4) Игнорировать

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

  1. Удаление объекта

При удалении родительского объекта возможен выбор одного из 4-х правил.

1) Запрет

Запрещено удалять родительский объект, если у него имеются дочерние объекты. Можно удалять только родительские объекты, у которых нет дочерних.

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

2) Каскад

При удалении родительского объекта каскадно удаляются все его дочерние объекты.

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

3) Очистить

При удалении родительского объекта ссылки на него во всех дочерних объектах заполняются значением 0, NULL или пустой строкой.

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

4) Игнорировать

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

Перечисленные правила стандартной целостности стали классическими и поддерживаются во всех СУБД общего назначения.

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

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

· Агрегирование. Родительский объект содержит обобщение информации из всех его дочерних объектов.

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

· Удаление последнего. Если удаляется единственный дочерний объект, то удаляется и родитель.

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

ример, при вводе первого заказа для нового клиента автоматически добавляется клиент и о нем запрашивается информация.

· Ограниченное добавление. Разрешается добавлять записи, удовлетворяющие определенному условию.

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

11.12. Метод «сущность-связи»