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

18.3. Некоторые следствия изложенной схемы

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

Преобразование выражений

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

Сравнение х = X не обязательно в результате даст true.

В двухзначной логике любая переменная х всегда равна самой себе. В трехзнач- ной логике переменная х не равна самой себе, если она содержит величину UNK.

Логическое выражение р OR NOT(p) не обязательно в результате даст true. Здесь р — это некоторое логическое выражение. В двухзначной логике выражение р OR NOT(p) всегда имеет значение true (т.е. истинно), независимо от значения р. Однако в трехзначной логике, если р равно ипк, общее выражение сводится к ипк OR N0T( ипк), т.е. к выражению ипк OR ипк, что, в свою очередь, упрощается до значения ипк, а не true.

Этот частный пример демонстрирует одно интересное свойство трехзначной ло- гики, которое можно описать так. Если выполнить два запроса, "Получить сведе- ния обо всех поставщиках из Лондона" и "Получить сведения обо всех поставщи- ках не из Лондона", а затем объединить результаты обоих запросов, то не обяза- тельно будут получены сведения обо всех поставщиках. Чтобы получить список всех поставщиков, к двум запросам нужно добавить еще один: "Получить сведе- ния обо всех поставщиках, которые, возможно (may be), находятся в Лондоне"5.

Суть данного примера, безусловно, состоит в том, что в реальном мире состояния "находится в Лондоне" и "находится не в Лондоне" являются взаимоисключаю- щими и покрывают весь спектр возможностей. Однако в базе данных содержится не сам реальный мир, а лишь знания о реальном мире, и эти знания характеризу- ются тремя, а не двумя возможными состояниями. В рассматриваемом здесь при- мере это следующие состояния: "место нахождения известно, и это Лондон", "место нахождения известно, и это не Лондон", "место нахождения неизвестно". Более того, как показано в [18.6], очевидно, что систему базы данных нельзя оп- рашивать о состоянии реального мира, ей можно задавать вопросы только о тех знаниях о реальном мире, которые представлены в базе данных в виде значений. Такое "противоестественное" свойство, приведенное в примере, порождено тем, что пользователь мыслит в терминах реального мира, а система функционирует, опираясь исключительно на свои знания об этом реальном мире.

5 Как следует из этих рассуждений, выражением, которое в трехзначной логике всегда бу- дет давать в результате true (т.е. будет аналогом выражения р OR NOT(p) в двухзначной логи- ке), является р OR NOT(p) OR MAYBE(pj.


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

Вычисление логического выражения г JOIN г не обязательно в результате даст г.

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

Операция INTERSECT больше не является частным случаем операции JOIN.

Это заключение является следствием того факта, что, опять же, операция соеди- нения предусматривает проверку наличия равенства, тогда как операция пересе- чения, подобно операции объединения, предусматривает отбор кортежей- дубликатов.

Из равенства А = В AND В = С вовсе не обязательно следует равенство А = С. Развернутая иллюстрация этого следствия приведена в следующем разделе.

Таким образом, эквивалентности, корректные в двухзначной логике, не являются эквивалентностями в трехзначной логике. Одно из наиболее серьезных следствий по- добных несоответствий таково. Как правило, в основе различных законов преобразо- вания, которые используются для преобразования запросов в более эффективную форму, лежит простая эквивалентность вида г JOIN г = г (см. главу 17). Более того, эти законы используются не только системой (в процессе оптимизации), но и пользо- вателями (когда они пытаются отыскать "наилучший" способ записи конкретного за- проса). Если же исходная эквивалентность таковой не является, то построенные на ней законы преобразования, очевидно, являются некорректными. А если законы преобра- зования некорректны, то и выполняемые на их основе преобразования некорректны. В свою очередь, некорректные преобразования запросов приводят к неправильным от- ветам со стороны системы.

Пример с базой данных отделов и сотрудников

Для иллюстрации проблемы некорректных преобразований мы подробно обсудим специальный пример, взятый из [18.9] (по некоторым важным для данного случая причинам он построен на использовании реляционного исчисления, а не реляционной алгебры). Предположим, что имеется простая база данных отделов и сотрудников, по- казанная на рис. 18.1.

DEPT

DEPT#

D2

EMP

ЕМР#

DEPT#

El

UNK

Рис. 18.1. База данных отделов и сотрудников

Рассмотрим следующее условие, которое может являться частью некоторого запроса. DEPT.DEPTf = EMP.DEPTi AND EMP.DEPT* = DEPTf ( 'Dl' )

Здесь DEPT и EMP являются переменными диапазона. Для всех кортежей в базе данных приведенное условие сводится к выражению ипк AND ипк, т.е. просто к значению ипк. Тем не менее "хороший" оптимизатор, исходя из того, что если А = В и В = С, то А = С, добавит к исходному условию дополнительную выборку А = С (как описано в главе 17.4). В результате получится следующее выражение.

DEPT.DEPTI = EMP.DEPTI AND EMP.DEPTi = DEPTi ( 'Dl' )

AND DEPT.DEPTI = DEPTi ( 'Dl' )

Это измененное выражение теперь сведется к выражению ипк AND ипк AND false или просто к значению false (для двух рассматриваемых кортежей в базе данных). В этом свете рассмотрим следующее выражение.

EMP.EMPi WHERE EXISTS DEPT ( NOT

( DEPT.DEPTI = EMP.DEPTi AND EMP.DEPTi = DEPTi ( 'Dl' ) ) )

В результате его вычисления будет возвращен код сотрудника 'El', если это выраже- ние "оптимизировать " в изложенном смысле, и не будет возвращено ничего, если его не "оптимизировать ". Безусловно, это означает, что проведенная "оптимизация" некоррект- на. Таким образом, показано, что приемы оптимизации, которые были корректны (и удоб- ны) в обычной двухзначной логике, являются некорректными в трехзначной логике.

Попробуем оценить влияние сказанного выше на способы расширения систем с двух- значной логикой в отношении поддержки трехзначной логики. В лучшем случае подоб- ное расширение потребует некоторой переработки существующей системы, так как от- дельные фрагменты кода оптимизатора будут работать некорректно, причем в худшем случае оптимизатор будет вносить явные ошибки в результаты запросов. Более общий подход предполагает анализ последствий расширения систем, поддерживающих п- значную логику, до систем поддержки (п+1)-значной логики для любых n > 1.

Проблема интерпретации

Теперь исследуем приведенный выше пример базы данных отделов и сотрудников бо- лее тщательно. Так как сотрудник с номером 'El' в действительности приписан к конкрет- ному отделу, величина DNK представляет некоторое реальное значение d. В данном случае значение d либо равно 'D1', либо нет. Проанализируем значение следующего выражения.

DEPT.DEPTI = EMP.DEPTi AND EMP.DEPTI = DEPTi ( 'Dl' )

Если d равно 'Dl', то для приведенного выше примера данных все выражение имеет значение false, поскольку именно это значение дает вычисление первого терма выраже- ния. Если d не равно 'D1', то все выражение также будет иметь значение false, так как именно это значение будет получено при вычислении второго терма выражения — EMP.DEPTi = DEPTi ( 'Dl' ). Иначе говоря, в реальном мире исходное выражение все- гда имеет значение false, независимо от того, какое реальное значение представлено ве- личиной UNK. Отсюда следует вывод, что результат, корректный в контексте реального мира, и результат, корректный в трехзначной логике, — это не одно и то же! Иначе гово- ря, трехзначная логика отражает поведение реального мира некорректно, т.е. можно счи- тать, что трехзначная логика не является адекватным инструментом для интерпретации поведения реального мира!

Замечание. Эта проблема интерпретации является далеко не единственной проблемой, возникающей в связи с использованием неопределенных значений и трехзначной логики (подробное обсуждение аналогичных вопросов можно найти в [18,1]-[18.11]). Она даже не яв- ляется наиболее фундаментальной (см. следующий подраздел). Но, по мнению автора, именно эта проблема имеет наибольшее практическое значение и вызывает наибольший интерес.

Еще раз о предикатах

Предположим, что отношение, являющееся текущим значением переменной-отношения ЕМР, содержит только два кортежа: j 'Е2', 'D2') и ('El' ,UNK). Первое соответствует утвер- ждению "В отделе с номером 'D2' есть сотрудник с номером 'Е2'", а второе — "Существует сотрудник с номером 'Е1"\ (Напомним, утверждение "Кортеж включает величину UNK" озна- чает, что на самом деле этот кортеж вообще не содержит никакого значения в данной позиции кортежа. Таким образом, кортеж ('Е1' ,UNK), если такое сомнительное обозначение вообще можно назвать кортежем, на самом деле следует рассматривать как кортеж ('Е1').) Иначе го- воря, эти два кортежа являются реализациями двух разных предикатов, а все "отношение" во- все не является отношением; это всего лишь некоторое объединение двух разных отношений с двумя разными заголовками (в данном частном случае).

Теперь можно предположить, что сложившуюся ситуацию можно было бы исправить, утверждая, что на самом деле существует всего один предикат, содержащий оператор OR.

Существует сотрудник с номером Е4, работающий в отделе с номером Dt OR существует сотрудник с номером Е#.

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

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

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