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

18.2. Обзор концепции трехзначной логики

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

Логические выражения

Выше уже отмечалось, что результатом скалярных операций сравнения, в которых хотя бы один из операндов является величиной UNK, будет логическое значение unknown вместо значения true или false. Поэтому в таких случаях приходится иметь дело с трех- значной логикой. Третьим логическим значением здесь является значение unknown, на которое мы достаточно часто, но не постоянно, будем ссылаться с помощью сокращения ипк. Ниже приведены таблицы истинности для операторов AND, OR и NOT в трехзначной логике (в таблицах используются следующие сокращения: t — true, f false, и — ипк).

AND

t

u

f

"OR

t

u

f

NOT

t

t

u

f

t

t

t

t

t

f

u

u

u

f

u

t

u

u

u

u

f

f

f

f

f

t

u

f

f

t

Предположим, что A = 3, В = 4 и переменная С имеет значение UNK. Тогда приведен- ные ниже выражения будут иметь следующие результаты (приведены справа).

А > В AND В > С : false А > В OR В > С : ипк А < В OR В < С : true NOT ( А = С ) : ипк

Тем не менее для реализации трехзначной логики одних только операторов AND, OR и NOT недостаточно [18.11]. Еще одним важным оператором является оператор MAYBE (возможно) [18.5]. Таблица истинности данного оператора показана ниже.

MAYBE

t

f

u

t

f

f

Чтобы продемонстрировать необходимость в операторе MAYBE, рассмотрим запрос "Получить сведения о сотрудниках с годовой зарплатой менее $50 ООО, которые могут быть (но это точно неизвестно) программистами и родились до 18 января 1971 года". С помощью оператора MAYBE данный запрос можно достаточно кратко записать в следующем виде.

EMP WHERE MAYBE ( JOB = 'Programmer' AND

DOB < DATE f'1971-1-18') AND SALARY < 50000.00 )

(Здесь предполагается, что атрибуты JOB, DOB и SALARY переменной-отношения EMP имеют типы CHAR, DATE и RATIONAL соответственно.) Без оператора MAYBE этот же запрос будет выглядеть следующим образом.

EMP WHERE ( IS_UNK ( JOB ) AND

DOB < DATE ('1971-1-18') AND

SALARY < 50000.00 ) OR ( JOB = 'Programmer' AND

ISJJNK ( DOB ) AND

SALARY < 50000.00 ) OR ( JOB = 'Programmer' AND

DOB < DATE ('1971-1-18') AND

IS UNK ( SALARY ) ) OR ( IS~UNK ( JOB ) AND

IS~UNK ( DOB ) AND

SALARY < 50000.00 ) OR ( IS UNK ( JOB ) AND

DOB < DATE ('1971-1-18') AND

ISJJNK ( SALARY ) ) OR ( JOB = 'Programmer' AND

IS UNK ( DOB ) AND

IS~UNK ( SALARY ) ) OR ( IS~UNK ( JOB ) AND

ISJJNK ( DOB ) AND

ISJJNK ( SALARY ) )

(Здесь предполагается существование другого истинностного оператора IS UNK, который принимает в качестве параметра единственное скалярное выражение и воз- вращает значение true, если этот операнд равен UNK, или значение false — в против- ном случае.)

Не следует воспринимать изложенное выше как подтверждение того, что оператор MAYBE является единственным дополнительным логическим оператором, который необ- ходим в трехзначной логике. На практике, например, весьма полезным может оказаться оператор TRUE_OR_MAYBE. (См. [18.5], а также [18.11].)

Кванторы EXISTS и FORALL

Вопреки тому несомненному факту, что для представления большинства примеров в этой книге используется реляционная алгебра, а не исчисление, нам все же следует рассмотреть влияние трехзначной логики на вычисление кванторов реляционного ис- числения EXISTS и FORALL. Как говорилось в главе 7, кванторы EXISTS и FORALL опре- деляются как циклические операции OR и AND соответственно. Иначе говоря, если г — отношение с кортежами tl, tl, tm, V— переменная диапазона, которая прини-

мает значения из данного отношения, a p(V) — логическое выражение, в котором ис- пользуется переменная V, то выражение EXISTS V ( р ( V } } по определению экви- валентно следующему выражению.

false OR р ( tl j OR ... OR p ( tm )

Аналогично выражение FORALL V ( p ( V ) ) по определению эквивалентно такому выражению.

true AND p ( tl ) AND ... AND p ( tm )

Что произойдет, если значение pfti) для некоторого i будет равно ипк? Например, пусть отношение г содержит следующие кортежи.

( 1, 2, 3 } ( 1, 2, UNK ) { UNK, UNK, UNK )

Предположим для простоты, что тремя атрибутами в указанном выше порядке слева направо являются атрибуты А, В и С соответственно и каждый из них имеет тип INTEGER. Ниже приведены примеры различных выражений и результаты их вычисления.

EXISTS V ( V.C > 1 ) : true

EXISTS V ( V.B > 2 ) ; ипк

EXISTS V ( MAYBE ( V.A > 3 ) ) : true

EXISTS V ( IS_UNK ( V.C ) ) : true

FORALL V f V.A > 1 ) : false

FORALL V ( V.B > 1 j : unk

FORALL V ( MAYBE ( V.C > 1 ) ) : false

Вычисляемые скалярные выражения

Рассмотрим следующее числовое выражение. WEIGHT * 454

Здесь атрибут WEIGHT представляет вес некоторой детали, например детали с номером ' Р7'. Что будет, если вес детали с номером ' Р7' является величиной 0NK? Каким будет зна- чение всего этого выражения? Ответ состоит в том, что значением всего выражения также должна быть величина UNK. В общем случае, если хотя бы один из операндов скалярного выражения является величиной DNK, результатом вычисления всего выражения также будет величина UNK. Таким образом, например, если атрибут WEIGHT содержит величину UNK, ре- зультатом вычисления всех приведенных ниже выражений также будет величина UNK.

WEIGHT + 454 454 + WEIGHT + WEIGHT

WEIGHT - 454 454 - WEIGHT - WEIGHT

WEIGHT * 454 454 * WEIGHT

WEIGHT / 454 454 / WEIGHT

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

значение UNK, а результатом вычисления выражения WEIGHT/0 будет также величина UNK вместо обычного в данном случае сообщения об ошибке деления на нуль (конечно, в обоих выражениях предполагается, что атрибут WEIGHT содержит величину UNK). Такие аномалии будут игнорироваться до особого упоминания.

Аналогичные рассуждения применимы ко всем другим скалярным типам и операто- рам, за исключением операторов сравнения, рассмотренного выше оператора IS_UNK и рассматриваемого ниже оператора IF_UNK (см. два предыдущих подраздела). Таким об- разом, для символьных строк выражение А 11 В возвращает UNK, если А равен UNK либо В равен UNK, либо оба равны UNK. (Снова следует отметить существование аномальных слу- чаев, рассмотрение которых мы здесь опустим.)

Оператор IF UNK получает на входе два операнда и возвращает значение первого операнда, если это не величина UNK. Если первый операнд является величиной UNK, то оператор IFJJNK возвращает значение второго операнда. Другими словами, это оператор преобразования величины UNK в некоторое значение, не равное UNK. Например, предпо- ложим, что значение UNK разрешено использовать для помещения в атрибут CITY пере- менной-отношения S. Рассмотрим следующее выражение.

EXTEND S ADD IFJJNK ( CITY, 'City unknown') AS SCITY

В результате его вычисления будет получена переменная-отношение, в которой зна- чение атрибута SCITY равно 'City unknown' для каждого поставщика, город которого в переменной-отношении S определен как UNK.

Следует заметить, что оператор IF UNK можно определить с помощью оператора IS UNK. Точнее говоря, выражение IFJJNK ( <выражение1>, <выраженяе2> ), где пара- метры <выражение1> и <выражение2> должны иметь одинаковые типы, эквивалентно следующему выражению.

IF ISJJNK (<выражент1>) THEN <выражение2> ELSE <выражение1> END IF

UNK - это не ипк

Очень важно понимать, что величина UNK (неопределенное значение вида "значение неизвестно") и значение ипк (логическое значение unknown) — это не одно и то же3. Действительно, данное положение дел является прямым следствием того, что ипк — это значение (точнее, логическое значение), в то время как величина UNK вообще не является значением. Но давайте более точно сформулируем сказанное выше. Предположим, что X является переменной логического типа (BOOLEAN). Тогда она может принимать одно из следующих значений: true, false или ипк. Таким образом, выражение "X равно ипк" озна- чает в точности то, что значение переменной X известно и равно ипк. В отличие от этого выражение "X равно UNK" означает, что значение переменной X неизвестно.

Могут ли домены содержать величину UNK

3 Тем не менее в стандарте SQL3 они рассматриваются как эквивалентные понятия (см. приложение Б).

Из того факта, что UNK не является значением, прямо следует заключение, что домены (т.е. множества значений) не могут содержать величину UNK. Действительно, если бы до- мены могли содержать неопределенные значения какого-либо вида, проверка ограниче-

ний целостности для них всегда завершалась бы с положительным результатом! Однако, поскольку домены в действительности не могут содержать величину UNK, "отношения", допускающие присутствие величины UNK, являются чем угодно, но только не реляцион- ными отношениями. Причем это верно как для отношений, определение которых дано в главе 5, так и для отношений, отвечающих оригинальному определению Кодда [5.1]. К обсуждению этого важного вопроса мы еще вернемся в разделе 8.6.

Реляционные выражения

Рассмотрим влияние величины ГШ на операторы реляционной алгебры. Для просто- ты ограничимся пятью примитивными операторами: выборки, проекции, произведения, объединения и вычитания (воздействие величины UNK на другие операторы можно опре- делить на основе заключений о ее воздействии на пять перечисленных операторов).

Прежде всего заметим, что на операцию произведения величина UNK никакого влия- ния не оказывает.

Затем операцию выборки следует несколько переформулировать, потребовав, чтобы возвращались только кортежи, для которых условие выборки имеет значение true, т.е. эта операция не должна включать в результат кортежи, для которых условие выборки принимает значение false или ипк.

Замечание. Использование именно этой формулировки неявно предполагалось в при- мере с оператором MAYBE, приведенном выше, в разделе о логических выражениях.

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

Согласно Кодду [13.6] ответ на этот вопрос отрицательный: две величины UNK, даже если они не равны между собой, считаются дубликатами одна другой в целях исключе- ния кортежей-дубликатов4. Очевидное противоречие объясняется следующим образом.

"...проверка в процессе исключения кортежей-дубликатов... выполняется на более низком уровне детализации по сравнению с тестированием на наличие равенства в операциях выборки. Поэтому здесь можно применять различные правша. "

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

4 Работа [13.6] была первой работой Кодда, в которой рассматривалась проблема отсут- ствия информации, хотя описание этой проблемы не являлось основной задачей статьи (см. гла- ву 13). Помимо всего прочего, в статье предлагаются версии "возможного" &-соединения, &- выборки, операторы деления (см. упр. 18.4), а также "внешние" версии соединения, пересечения, вычитания, ©-соединения и естественного соединения (см. раздел 18.5).


■ Кортежи tl и t2 являются дубликатами один другого тогда и только тогда, когда они имеют одинаковые атрибуты и каждые два значения соответствующих атрибутов в обоих кортежах либо имеют одинаковые значения, либо оба содержат величину UNK.

Теперь, исходя из этого расширенного определения кортежей-дубликатов, можно со- хранить прежнее определение операции проекции в неизменном виде.

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

И наконец, операция вычитания определяется аналогично (хотя она и не требует ис- ключения кортежей-дубликатов). Иначе говоря, кортеж t попадает в результат операции rl MINUS г2 тогда и только тогда, когда этот кортеж является дубликатом какого-либо кортежа в отношении rl, но не является дубликатом ни одного из кортежей в отношении г2. (Для полноты картины отметим, что операция пересечения определяется аналогич- но: кортеж t попадает в результат операции rl INTERSECT г2 тогда и только тогда, когда этот кортеж является дубликатом какого-либо кортежа в отношении rl и одновременно дубликатом какого-либо кортежа в отношении г2.)

Операции обновления

Здесь следует упомянуть два основных момента.

  1. Если атрибут А отношения R может содержать величину UNK и если вставляемый в от- ношение R кортеж не содержит значения для атрибута А, то система автоматически по- местит величину UNK на место опушенного значения. Если атрибут А в отношении R не допускает присутствия величины UNK, то попытка создать кортеж (с помощью операции INSERT или UPDATE), в котором в атрибут А помещено значение UNK, приведет к ошибке.

  2. Попытка создать в отношении R кортеж-дубликат (с помощью операции INSERT или UPDATE) обычно является ошибкой. В данном случае определение кортежей- дубликатов взято из предыдущего подраздела.

Ограничения целостности

Как указывалось в главе 8, ограничение целостности задается в виде логического вы- ражения, результат вычисления которого не должен быть равен значению false. Следова- тельно, ограничение целостности не будет нарушено, если результат его вычисления бу- дет равен значению ипк (на самом деле это неявно предполагалось в наших замечаниях, приведенных выше в настоящем разделе в отношении ограничений типов). Конечно, в этом случае точнее было бы сказать, что нам ничего неизвестно о том, будет ли наруше- но данное ограничение целостности. Но с известной долей приближения вполне можно утверждать, что если в предложении WHERE значение ипк рассматривается как false, то в ограничениях целостности оно рассматривается как true.

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