Согласованность
В каком бы смысле не являлось избыточным множество именованных отношений, мы будем связывать с этим множеством набор утверждений, определяющих все избыточности, имеющие место в любой момент времени для отношений этого множества. Если в информационной системе отсутствует подробная семантическая информация о каждом именованном отношении (наиболее вероятный случай), то система не может выявить избыточность, существующую во множестве именованных отношений. Она может, по истечении некоторого периода времени, предпринимать попытки установить наличие избыточностей, но такие попытки могут быть подвержены ошибкам.
Для данного набора C изменяемых во времени отношений, ассоциированного с ним множества Z ограничительных утверждений и значения V набора C в какой-либо момент времени мы будем называть состояние (C, Z, V) согласованным
или несогласованным в зависимости от того, удовлетворяет ли V набору условий Z или нет. Например, для набора хранимых отношений R,S,T вместе с ограничительным утверждением "π12(T) является композицией π12 (R) и π12
(S)" мы можем периодически проверять, что значения, хранящиеся в R,S,T, удовлетворяют этому условию. Алгоритм осуществления такой проверки должен просматривать первые два столбца каждого из отношений R,S,T (вне зависимости от способа их представления в системе) и определять, выполняются ли следующие условия
- π1(T) = π1
(R)
- π2(T) = π2
(S)
- для каждой пары элементов (a,c) отношения π12
(T) существует элемент b, такой, что (a,b) содержится в π12
(R) и (b,c) содержится в π12 (S).
Существуют практические проблемы (которые мы не будем здесь обсуждать) получения моментального снимка набора отношений, некоторые из которых могут быть очень большими и сильно изменчивыми.
Важно отметить, что согласованность в том виде, как она определена выше, является свойством состояния банка данных в какой-либо момент времени и не зависит от того, как это состояние было достигнуто.
Это означает, в частности, что невозможно отличить несогласованное состояние, возникшее в результате оплошности пользователя, от состояния, порожденного преднамеренными действиями. Рассмотрение простого примера показывает обоснованность такого (возможно, нешаблонного) подхода к согласованности.
Предположим, что множество именованных отношений C содержит отношения S, J, D, P, Q, R из примера раздела 2.2, и что P, Q, R обладают сильной или слабой избыточностью в определенном выше смысле (в рассматриваемом нами случае не важно, какая именно избыточность имеет место). Далее, предположим, что в некоторый момент времени t банк данных находится в согласованном состоянии и не содержит никакого проекта j такого, что поставщик 2 обслуживает проект j, и проект j ведется отделом 5. Соответственно, в π12(P) не существует элемента (2,5). Пусть теперь пользователь вводит элемент (2,5) в π12(P), вставляя соответствующий элемент в P. В этот момент состояние банка данных является несогласованным. Эта несогласованность могла возникнуть вследствие оплошности, если появление (2,5) является правильным, и действительно существует проект j такой, что поставщик 2 обслуживает проект j и проект j ведется отделом 5. В этом случае очень вероятно, что пользователь собирается в ближайшем будущем добавить элементы в Q и R, результатом чего явится появление (2,j) в π12(Q) и (5,j) в π12(R). С другой стороны, ввод (2,5) мог быть ошибочным. Так могло бы получиться, если бы пользователь намеревался вставить в P некоторый другой элемент, появление которого перевело бы согласованное состояние в согласованное состояние. Суть в том, что как правило, в системе будут отсутствовать средства разрешения этого вопроса без опроса окружения системы (например, пользователя, породившего несогласованность).
Конечно, существует несколько возможных способов, при помощи которых система сможет обнаружить несогласованность и отреагировать на нее. При одном из подходов, система определяет наличие несогласованности при выполнении любой операции вставки и удаления записей или обновления ключа.Естественно, такая проверка замедлит эти операции. В случае возникновения несогласованности подробности ситуации сохраняются в системе, и, если в течение некоторого периода времени ситуация не будет исправлена, пользователь или человек, ответственный за безопасность и целостность данных, будет об этом извещен. Другой подход – производить проверку согласованности как фоновую операцию раз в день или реже. Вновь поступившие данные, появление которых вызвало несогласованность, оставшуюся в банке данных на момент проверки, могут быть установлены, если система поддерживает журнал транзакций, приводящих к изменению состояния. Второй подход будет, конечно же, предпочтительнее, если возникает только немного постоянных несогласованностей.