Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Внешний ключ связывает каждую строку дочернего отношения с той строкой ро­дительского отношения, которая содержит это же значение соответствующего потен­циального ключа. Понятие ссылочной целостности означает, что если внешний ключ содержит некоторое значение, то оно обязательно должно присутствовать в потенци­альном ключе одной из строк родительского отношения. Например, атрибут Branch_No отношения Staff связывает данные о каждом из работников со строкой в отношении Branch, соответствующей тому отделению предприятия, в котором он ра­ботает. Если поле Branch_No не пусто, оно должно содержать допустимое значение, присутствующее в атрибуте Branch_No одной из строк отношения Branch. В противном случае окажется, что работник трудится в несуществующем отделении. Существует несколько важных моментов, связанных с использованием внешних ключей. Во-первых, следует проанализировать, допустимо ли использование во внешних ключах пустых значений. Например, имеет ли смысл сохранять сведения о работнике, если не задан номер отделения предприятия, в котором он работает? Во­прос не в проверке существования заданного номера отделения, а в том, обязательно ли этот номер должен указываться. В общем случае, если участие дочернего отноше­ния в связи является тотальным, то рекомендуется запрещать использование пустых значений в соответствующем внешнем ключе. В то же время, если участие дочернего отношения в связи является частичным, то помещение пустых значений в атрибут внешнего ключа должно быть разрешено.

Следующая проблема связана с организацией поддержки ссылочной целостности. Реа­лизация этой поддержки осуществляется посредством задания ограничений существова­ния, определяющих условия, при которых может вставляться, обновляться или удалять­ся каждое значение потенциального или внешнего ключа. Рассмотрим связь Staff Manages Property типа 1:М. Первичный ключ отношения Staff — атрибут Staff_No — является внешним ключом отношения Property. Рассмотрим следующие ситуации.

Случай 1. Вставка новой строки в дочернее отношение (Property), Для обеспече­ния ссылочной целостности необходимо убедиться, что значение атрибута внеш­него ключа Staff_No новой строки отношения Property равно пустому значению либо некоторому конкретному значению, присутствующему в одной из строк от­ношения Staff.

Случай 2. Удаление строки из дочернего отношения (Property). При удалении строки из дочернего отношения никаких нарушений ссылочной целостности не происходит.

Случай 3. Обновление внешнего ключа в строке дочернего отношения (Property). Этот случай подобен случаю 1. Для сохранения ссылочной целостности необходи­мо убедиться, что атрибут Staff_No в обновленной строке отношения Property со­держит либо пустое значение, либо некоторое конкретное значение, присутст­вующее в одной из строк отношения Staff.

Случай 4. Вставка строки в родительское отношение (Staff), Вставка строки в родительское отношение (Staff) не может вызвать нарушения ссылочной целост­ности. Добавленная строка просто становится родительским объектом, не имею­щим дочерних объектов. В данном случае это означает, что новый работник еще не отвечает ни за какие объекты недвижимости

Случай 5. Удаление строки из родительского отношения (Staff). При удалении строки из родительского отношения ссылочная целостность будет нарушена в том случае, если в дочернем отношении будут существовать строки, ссылающиеся на удаленную строку родительского отношения. Другими словами, ссылочная цело­стность будет нарушена, если удаленный работник отвечал за один или больше объектов недвижимости. В этом Случае может быть использована одна из сле­дующих стратегий.

· NO ACTION. Удаление строки из родительского отношения запрещается, если в дочернем отношении существует хотя бы одна ссылающаяся на нее стро­ка. В нашем случае это звучит так: "Нельзя удалить сведения о работнике, отвечающем в настоящий момент хотя бы за один объект недвижимости".

· CASCADE. При удалении строки из родительского отношения автоматически удаляются все ссылающиеся на нее строки дочернего отношения. Если лю­бая из удаляемых строк дочернего отношения выступает в качестве роди­тельской стороны, в некоторой другой связи, то операция удаления приме­няется ко всем строкам дочернего отношения этой связи, и т.д.. Другими словами, удаление строки родительского отношения автоматически рас­пространяется на любые дочерние отношения. В нашем случае это звучит так; "Удаление работника автоматически влечет за собой удаление сведе­ний обо всех объектах недвижимости, которыми он занимался". Очевидно, что в данном примере подобная стратегия неприемлема.

· SET NULL. При удалении строки из родительского отношения во всех ссы­лающихся на нее строках дочернего отношения в атрибут внешнего ключа записывается пустое значение. Следовательно, удаление строк из родитель­ского отношения вызовет занесение пустого значения в соответствующий атрибут строк дочернего отношения. В нашем случае это звучит так: "При удалении работника все объекты недвижимости, которыми он Занимался, остаются без отвечающего за них работника". Эта стратегия может исполь­зоваться только в тех случаях, когда в атрибут внешнего ключа дочернего отношения разрешается помещать пустые значения.

· SET DEFAULT. При удалении строки из родительского отношения в атрибут внешнего ключа всех ссылающихся на нее строк дочернего отношения авто­матически помещается значение, указанное для этого атрибута как значение по умолчанию. Таким образом, удаление строки из родительского отношения вызывает помещение принимаемого по умолчанию значения в атрибут внешнего ключа всех строк дочернего отношения, ссылающихся на удален­ную строку. В нашем случае это будет звучать так; "При удалении работника все объекты недвижимости, которыми он занимался, передаются некоторому другому работнику (например, руководителю отделения)". Эта стратегия применима только в тех случаях, когда атрибуту внешнего ключа дочернего отношения назначено некоторое значение, принимаемое по умолчанию.

· NO CHECK. При удалении строки из родительского отношения никаких дей­ствий по сохранению ссылочной целостности данных не предпринимается.

Случай 6. Обновление первичного ключа в строке родительского отношения (Staff). Если значение первичного ключа некоторой строки родительского отношения будет обновлено, нарушение ссылочной целостности будет иметь место в том случае, если в дочернем отношении существуют строки, ссылающиеся на исходное значение первич­ного ключа. В нашем случае это значит, что работник, для которого было выполнено обновление, в данный Момент отвечал за один или более объектов недвижимости. Для сохранения ссылочной целостности может использоваться любая из описанных выше стратегий. При использовании стратегии CASCADE обновление значения Первичного ключа в строке родительского отношения будет отображено в любой строке дочернего отношения, ссылающейся на данную строку (каскадным образом).

<== предыдущая лекция | следующая лекция ==>
Целостность сущностей | Этап 2,7. Обсуждение разработанных локальных логических моделей данных с конечными пользователями -
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 319; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.