Введение в системы БД (542480), страница 181
Текст из файла (страница 181)
Помимо всего прочего, в стат~е предлигиются версии "возможного" сз-соединения, 9- выборки, операторы деления 1см. упр. !В.4), а также "внешние" версии соединения, пересечения, вычитания, В-соединения и естественного соединения Ром. раздел 1В.5). 699 Глава 18. Отсутствующая информация Теперь, исходя из этого расширенного определения кортежей-дубликатов, можно сохранить прежнее определение операции проекции в неизменном виде. Объединение также подразумевает исключение избыточных кортежей-дубликатов, и для этой операции также может быть применено приведенное выше определение. Таким образом, объединение отношений г1 и г2 одного и того же типа можно определить как отношение г того же типа, включающее все возможные кортежи С, такие, что кортеж С является дубликатом некоторого кортежа в отношении г1 или в отношении г2 (или в них обоих одновременно).
И наконец, операция вычитания определяется аналогично (хотя она и ие требует исключения кортежей-дубликатов). Иначе говоря, кортеж С попадает в результат операции г1 М1НУЯ г2 тогда и только тогда, когда этот кортеж является дубликатом какого-либо кортежа в отношении г1, но не является дубликатом ни одного из кортежей в отношении г2.
(Для полноты картины отметим, что операция пересечения определяется аналогично: кортеж С попадает в результат операции г1 1НТЕКЯЕСТ г2 тогда и только тогда, когда этот кортеж является дубликатом какого-либо кортежа в отношении г1 и одновременно дубликатом какого-либо кортежа в отношении г2.) Операции обновления Здесь следует упомянуть два основных момента. !. Если атрибут А отношения К может содержать величину ННК и если вставляемый в отношение К кортеж не содержит значения для атрибуза А, то система автоматически поместит величину ННК на место опущенного значения. Если атрибут А в отношении К не допускает присутствия величины ННК, то попытка создать кортеж (с помощью операции 1НЯЕКТ или БРНАТЕ), в котором в атрибут А помещено значение ННК, приведет к ошибке.
2. Попытка создать в отношении К кортеж-дубликат (с помощью операции 1НЯЕКТ или ЯРйАТЕ) обычно является ошибкой. В данном случае определение кортежей- дубликатов взято из предыдущего подраздела. Ограничения целостности Как указывалось в главе 8, ограничение целостности задается в виде логического выражения, результат вычисления которого не должен быть равен значениюуа6е. Следовательно, ограничение целостности не будет нарушено, если результат его вычисления будет равен значению ипА (на самом деле это неявно предполагалось в наших замечаниях, приведенных выше в настоящем разделе в отношении ограничений типов).
Конечно, в этом случае ~очнее было бы сказать, что нам ничего неизвестно о том, будет ли нарушено данное ограничение целостности. Но с известной долей приближения вполне можно утверждать, что если в предложении ННЕКЕ значение инА рассматривается как~а!зе, то в ограничениях целостности оно рассматривается как ггие. 18.3. Некоторые следствия изложенной схемы Использование подхода с трехзначной логикой, описанной в предыдущем разделе, имеет ряд логических следствий, причем некоторые из них совсем не очевидны.
В данном разделе обсуждаются эти следствия и их значения. 7ОО Часть р. дополнительные аспекты Преобразование выражений Прежде всего отметим, что выражения, которые в двухзначной логике всегда возврашают значение ггие, в трехзначной логике необязательно всегда будут давать тот же результат. Ниже приведено несколько примеров с комментариями, но следует иметь в виду, что этот список далеко не полон. ° Сравнение х = х не обязательно в результате даст Ггце. В двухзначной логике любая переменная х всегда равна самой себе. В трехзначной логике переменная х не равна самой себе, если она содержит величину ОИ)(. ° Логическое выражение р ОИ ИОТ(р) не обязательно в результате даст Птэе. Здесь р — это некоторое логическое выражение. В двухзначной логике выражение р Ой ИОТ(р) всегда имеет значение ггие (т.е.
истинно), независимо от значения р. Однако в трехзначной логике, если р равно ин(г, общее выражение сводится к ол(г 08 ВОТ( ол)г), т.е. к выражению эгн)г Ой ин(г, что, в свою очередь, упрошается до значения инй, а не ггие. Этот частный пример демонстрирует одно интересное свойство трехзначной логики, которое можно описать так. Если выполнить два запроса, "Получить сведения обо всех поставщиках из Лондона" и "Получить сведения обо всех поставшиках не из Лондона", а затем объединить результаты обоих запросов, то не обязательно будут получены сведения обо всех поставшиках. Чтобы получить список всех поставщиков, к двум запросам нужно добавить еше один: "Получить сведения обо всех поставшиках, которые, возможно (шау Ье), находятся в Лондоне"з.
Суть данного примера, безусловно, состоит в том, что в реальном мире состояния "находится в Лондоне" н "находится не в Лондоне" являются взаимоисключаюшими и покрывают весь спектр возможностей. Однако в базе данных содержится не сам реальный мир, а лишь знания о реальном мире, и эти знания характеризуются тремя, а не двумя возможными состояниями.
В рассматриваемом здесь примере это следуюшие состояния: "место нахождения известно, и это Лондон", "место нахождения известно, и это не Лондон", "место нахождения неизвестно". Более того, как показано в (18.6), очевидно, что систему базы данных нельзя опрашивать о состоянии реального мира, ей можно задавать вопросы только о тех знаниях о реальном мире, которые представлены в базе данных в виде значений.
Такое "противоестественное" свойство, приведенное в примере, порождено тем, что пользователь мыслит в терминах реального мира, а система функционирует, опираясь исключительно на свои знания об этом реальном мире. Замечание. Тем не менее автор данной книги подозревает, что описанное несоответствие между предметными областями — это всего лишь ловушка, в которую очень легко попасть. Заметьте, что каждый отдельный запрос, описанный в предыдуших главах (в примерах, упражнениях и т.п.), был сформулирован в терминах "реального мира", а не в терминах "знаний о реальном мире'*, И в этом смысле данная книга вовсе не является каким-то исключением. З Как следует из этих рассухгдений, выражением, которое в трехзначной логике всегда буденэ дават~ в результате Ггае (т.е, будет аналогом выражения р ОИ ИОТ(р) в двухзначной логике), является р ОИ ИОТ(р) ОВ ИАУВЕ(р).
701 Глава 18. Отсутствующая инфаргиаг(ия ° Вычисление логического выражения х ТОЙ г не обязательно в результате даст г. В двухзначной логике естественное соединение отношения г с самим собой всегда дает в результате исходное отношение х (т.е. операция естественного соединения является идемпотентной). Однако в трехзначной логике кортеж, содержащий величину 0МК в любой из позиций, не будет соединен сам с собой, поскольку операция соединения, в отличие от операции объединения, предусматривает проверку наличия равенства, а не исключение дублируюшихся кортежей. ° Операция 1ЕТЕЕЯЕСТ больше не является частным случае и операции ТОТВ.
Это заключение является следствием того факта, что, опять же, операция соединения предусматривает проверку наличия равенства, тогда как операция пересечения, подобно операции объединения, предусматривает отбор кортежей- дубликатов. ° Изравенства А = В АКР В = Свовсе не обязительно следует равенствоА = С. Развернутая иллюстрация этого следствия приведена в следующем разделе. Таким образом, эквивалентности, корректные в двухзначной логике, не являются эквивалентностями в трехзначной логике.
Одно из наиболее серьезных следствий подобных несоответствий таково. Как правило, в основе различных законов преобразования, которые используются для преобразования запросов в более эффективную форму, лежит простая эквивалентность вида х 1018 х ы г (см. главу 17). Более того, эти законы используются не только системой (в процессе оптимизации), но и пользователями (когда они пытаются отыскать "наилучший" способ записи конкретного запроса).
Если же исходная эквивалентность таковой не является, то построенные на ней законы преобразования, очевидно, являются некорректными. А если законы преобразования некорректны, то и выполняемые на их основе преобразования некорректны. В свою очередь, некорректные преобразования запросов приводят к неправильным ответам со стороны системы. Пример с базой данных отделов и сотрудников Для иллюстрации проблемы некорректных преобразований мы подробно обсудим специальный пример, взятый из 118.9) (по некоторым важным для данного случая причинам он построен на использовании реляционного исчисления, а не реляционной алгебры).
Предположим, что имеется простая база данных отделов и сотрудников, показанная на рис. 18.1. МР ТЗЕРТ Рис. 18.1. База данных отделов и сотрудников Рассмотрим следующее условие„которое может являться частью некоторого запроса. 0ЕРх.ВЕРР$ = ЕМР.ВЕРХ(( АМ0 ЕМР.ВЕРТ$ = 0ЕРх$ ( г01' ) 702 Часть 1'. Дополнительные аспекты Здесь ПЕРТ и ЕИР являются переменными диапазона. Для всех кортежей в базе данных приведенное условие сводится к выражению ипА АМП ипА, т.е.
просто к значению ипlс. Тем не менее "хороший" оптимизатор, исходя из того, что если А = В и В = С, то А = С, добавит к исходному условию дополнительную выборку А = С (как описано в главе ) 7А). В результате получаса следующее выражение. ПЕРТ.ПЕРТ$ = ЕИР,ПЕРТ$ АМП ЕМР.ПЕРТ$ = ПЕРТ$ ( 'П1' ) АМП ПЕРТ.ПЕРТ$ -" ПЕРТ$ ( 'П1' ) Это измененное выражение теперь сведется к выражению ипА АМП ипА АМП 7аЬе или просто к значению ~аЬе (для двух рассматриваемых кортежей в базе данных). В этом свете рассмотрим следующее выражение.
ЕИР.ЕМР$ МНЕНЕ ЕХ1ЯТЯ ПЕРТ ( МОТ ( ПЕРТ.ПЕРТ$ = ЕИР.ПЕРТ$ АМП ЕМР.ПЕРТ$ = ПЕРТ$ ( 'П1' ) ) ) В результате его вычисления будет возвращен код сотрудника 'Е1 ', если это выражение "оптиинзировать" в иззоженнои сиысзе, и не будет возвращено ничего, если его не "оптимизировать". Безусловно, это означает, что проведенная "оптимизация" некорректна. Таким образом, показано, что приемы оптимизации, которые были корректны (и удобны) в обычной двухзначной логике, являются некорректными в трехзначной логике. Попробуем оценить влияние сказанного выше на способы расширения систем с двухзначной логикой в отношении поддержки трехзначной логики. В лучшем случае подобное расширение потребует некоторой переработки существующей системы, так как отдельные фрагменты кода оптимизатора будут работать некорректно, причем в худшем случае оптимизатор будет вносить явные ошибки в результаты запросов.