Скачиваний:
102
Добавлен:
02.05.2014
Размер:
2.3 Mб
Скачать

8.7. Ограничения состояния и ограничения перехода

s Если бы система поддерживала операцию множественного присвоения (на эту возмож­ность указывалось в предыдуи^ей сноске), то можно было бы сохранить формулировку золотого правила в его первоначальной и более простой форме.

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

  • никогда не состоял в браке — состоит в браке;

  • состоит в браке — овдовел;

  • состоит в браке — разведен;

  • разведен — состоит в браке.

Среди недопустимых типов переходов можно назвать такие:

  • никогда не состоял в браке — овдовел;

  • никогда не состоял в браке — разведен;

  • овдовел — разведен;

  • разведен — овдовел.

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

CONSTRAINT TRC1 IS_EMPTY

( ( ( S' { St, STATUS } RENAME STATUS AS STATUS' ) JOIN S { SI, STATUS } ) WHERE STATUS' > STATUS ) ;

Пояснение. Здесь мы ввели соглашение о том, что имя исходной переменной-отношения, подобное S' в данном примере, понимается как имя соответствующей пе­ременной-отношения, которая существовала до выполнения рассматриваемой опера­ции обновления. С учетом этого замечания представленное выше ограничение можно интерпретировать так. Если мы соединим (по номеру поставщика) отношение, которое являлось значением переменной-отношения S до выполнения обновления с отношени­ем, которое является значением этой переменной-отношения после выполнения об­новления, а затем выберем из результата этого соединения все кортежи, в которых старое значение статуса поставщика больше, чем новое, то конечный результат дол­жен быть пустым отношением. (Поскольку соединение выполняется по номерам по­ставщиков, любой полученный в результате выполнения соединения кортеж, для кото­рого значение старого статуса больше, чем новое, должен представлять поставщика, статус которого понизился.)

Замечание. Поскольку ограничение перехода TRC1 задано для переменной-отношения (применяется к единственной переменной-отношению, в данном слу­чае — к переменной-отношению поставщиков), оно должно проверяться немед­ленно. Ниже для сравнения приводится пример ограничения перехода для базы данных ("Общее количество любых заданных деталей для всех поставщиков мо­жет только возрастать").

CONSTRAINT TRC2 IS_EMPTY

( ( ( SUMMARIZE SP' PER S' { Si } ADD SUM ( QTY ) AS SQ' ) JOIN

{ SUMMARIZE SP PER S { Si } ADD SUM ( QTY ) AS SQ ) ) ' WHERE SQ' > SQ ) ;

Поскольку ограничение перехода TRC2 задано для базы данных (оно включ< . две различные переменные-отношения — поставщиков и поставок), его проверка бу. т от­ложена до момента выполнения оператора COMMIT. Здесь имена исходных перемь .ных-отношений S' и SP' используются для обозначения соответственно переменных-отношений S и SP в момент до начала выполнения транзакции

Для ограничений типов и атрибутов противопоставление ограничений состоя! 1я и перехода лишено смысла.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]