Модели и проектирование баз данных

Предикаты отношений и целостность данных


. Целостность данных может быть нарушена только при обновлении базовых

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

Всякое отношение имеет некоторую интерпретацию, передающую смысл представленных в нем данных. Эта интерпретация может быть сформулирована в виде предиката. Например, предикат отношения S в неформальной записи выглядит так:

«ПОСТАВЩИК с определенным номером S# имеет имя Sn и значение статуса St  и располагается в городе Ci и нет двух ПОСТАВЩИКов с одинаковыми значениями S#».

Этот предикат принимает значение .Т. на тех кортежах, которые образуют тело отношения S в настоящий момент времени. Новый кортеж будет вставлен в тело только в том случае, если на нем предикат отношения принимает значение .Т. Таким образом, предикат есть критерий возможности (допустимости) обновления. В нашем примере кортеж будет вставлен, если

значение S# принадлежит домену  S#           И

значение Sn принадлежит домену  Sn           И

значение St принадлежит домену  St         И

значение Ci принадлежит домену  Ci          И

значение S# не встречается среди существующих в отношении S  в настоящий момент.

Эти условия называются правилами целостности для отношения S. Именно их должна проверять система, добавляя кортеж в это отношение.

Рассмотрим теперь отношение SPJ. Его предикат (в неформальной записи) таков:

«ПОСТАВЩИК с номером S# поставил для ИЗДЕЛИя с номером J# ДЕТАЛЬ с номером P# в количестве Qt

И в отношении S существует кортеж со значением S.S# = S#

И в отношении P существует кортеж со значением P.P# = P#

И в отношении J существует кортеж со значением J.J# = J#

И нет двух ПОСТАВок с одинаковыми значениями {S#, P#, J#}».

В этой формуле есть ссылки на отношения S, P и J. Следовательно, ее значение должно вычисляться не только при добавлении кортежей в тело SPJ, но и при обновлении хотя бы одного из ссылочных отношений, затрагивающем множество значений родительского ключа.

Таким образом, правила целостности для ссылающихся отношений должны проверяться при обновлении ссылочных отношений. Только при этом условии может быть обеспечена целостность состояния БД. Правила реализуются в виде так называемых хранимых процедур (процедур базы данных). Эти процедуры связываются с соответствующими отношениями и хранятся в базе данных вместе с ними. Посмотрим, какие типы хранимых процедур необходимы для поддержания внутренних ОЦ.



Содержание раздела