Методы оптимизации выполнения запросов в реляционных СУБД


Семантическая оптимизация запросов - часть 6


Во-вторых, в языке SQL и тем самым в System R существуют специальные средства автоматического поддержания целостности, так называемые \2условные воздействия\1 (triggers). В этой статье мы не рассматриваем эти и подобные вопросы, поскольку они не связаны с оптимизацией.

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

Например, для той же базы данных, состоящей из отношений EMP и DEPT, может быть административно наложено ограничение, что прием и увольнение служащих может производиться только в одном отделе, например, в отделе номер 6. Это ограничение невозможно сформулировать как ограничение на состояние базы данных. Формулировка его в виде требования неизменности численности сотрудников во всех отделах, кроме шестого, недостаточна, поскольку в одной транзакции могут быть последовательно выполнены операторы удаления и вставки кортежа в отношении EMP. Тем самым, можно поменять сотрудников других отделов, не нарушая такого ограничения, но не выполняя требований администрации.

Для формулировки ограничений целостности такого типа в языке SQL существуют специальные средства. Например, рассмотренное выше ограничение можно сформулировать как

ASSERT B IMMIDIATE ON EMP: EMP.DEPT# = 6.

Семантически это ограничение означает запрещение занесения, удаления и модификации кортежей в отношении EMP, у которых значение поля DEPT# отлично от 6. Предположим теперь, что обрабатывается запрос на удаление кортежа из отношения EMP

DELETE EMP WHERE EMPNAME = 'Brown'.




Начало  Назад  Вперед



Книжный магазин