Решение проблемы NULL в запросах к реляционной базе данных, используя операторы реляционной алгебры А.
II.В. Блудов, ¡van. bladov(ci),zmail. сот
Аннотация. В операторах ограничения предлагается логические выражения интерпретировать как реляционные. Точнее, считается, что операция реляционного ограничения (R WHERE b) над отношением R по некоторому логическому выражению b может быть представлена как соединение (R<AND>B) заданного отношения R с реляционным выражением В, полученным из исходного логического выражения b заменой логических операторов AND, OR и NOT на соответствующие реляционные операторы <AND>, <OR> и <NOT>. Тогда для некоторого кортежа Т определим значение атрибута А как отношение с одним кортежем и одним значением интересующего нас атрибута -RELATION<A>{{a}}. Значение атрибута, указанное как NULL, в качестве значение «неизвестно», определим как отношение с заголовком из интересующего нас атрибута и телом, содержащим всевозможные значения типа атрибута А - RELATION<A>{... }. Сравнение значений атрибутов на равенство будет выглядеть как соединение таких значений атрибутов, представленных отношениями. Кортеж Г, который может быть определен как декартовое произведение всех своих атрибутов, будет теперь представлять отношение RT. Истинность такого кортежа Г, представленного отношением RT, по заданному логическому выражению 6, означает истинность квантора всеобщности над значениями RT по выражению 6, что в свою очередь означает равенство соединения (7?j-<AND> В) и RT - (RT <AND> В) = RT.
Ключевые слова: реляционная модель данных; NULL; отсутствующая
информация; реляционная алгебра А.
1. Введение
В основу данной статьи легла извечная проблема несостоятельности трехзначной логики, используемой в 8<ЗЬ для поддержки механизма работы с отсутствующей информацией. Кристофер Дейт в работе [1]
183
показывает невозможность использования п-значных логиках. В частности, он критикует предложенные Тэдом Коддом таблицы истинности элементарных логических операторов трехзначной логики, используемых в 8<ЗЬ, а также другие попытки Кодда введения таблиц истинности элементарных логических операторов для четырехзначной логики. Основная причина такой несостоятельности п-значных логиках состоит в том, что множества тождеств и противоречий (выражения, вычисляемых как истинна или ложь при любых значениях операнд), используемых в разных логиках, различны. В частности, оптимизаторы 8<ЗЬ-запросов трансформируют выражения, используя некорректное, с точки зрения двухзначной логики (реального мира), множество тождеств и противоречий. В результате чего такие трансформированные реляционные выражения возвращают некорректные, с точки зрения реального мира, результаты.
В качестве одного примера несостоятельности трехзначной логики в 8<ЗЬ Дейт приводит в [2],[3] следующий запрос. Для базы данных
Поставщики §
SNO* SCITY
S1 ‘London’
Детали Р
PNO* P CITY
Р1 NULL
«получить пары SNO-PNO, для которых города поставщика и детали различны или городом детали не является Париж (либо оба эти условия)». Предлогается следующая «очевидная формулировка этого запроса на языке SQL»: SELECT S.SNO, P.PNO FROM S, P WHERE S.CITY о P.CITY OR P.CITY о 'Paris'. В результате даже возник спор между Клодом Рубинсоном [4], с одной стороны, и Дейтом[5] и Джоном Грантом[6], с другой.
Чтобы подчеркнуть «вечность» описанной проблеме, можно повторить мысль Дейта о том, что время от времени люди из сообщества баз данных для решения описанной проблемы пытаются придумать какую-нибудь k-значную логику и определить для нее таблицы истинности основных операторов, попадая при этом в распространённую ловушку. Учитывая это, то есть оставаясь в рамках двухзначной логики, при
исследовании проблемы отсутствующей информации я начинаю с понятия истинности логического выражение и того, чем, по сути, является отношение - множеством истинных утверждений [2], [3]. Высказывается идея о том, логические выражения можно рассматривать как подмножество другого класса выражений - реляционных выражений. В то время, как логические выражения оперируют одиночными утверждениями, реляционные выражения оперируют множествами таких утверждений. Используются операторы реляционной алгебры А [7], которые, по сути, являются логическими операторами над множеством истинных утверждений, то есть отношениями. В большей части статьи разбирается пример, который показывает, как можно в операторе реляционного ограничения (R WHERE Ь) логическое выражение b представить реляционным выражением, заменяя логические операторы OR, AND, NOT на соответствующие реляционные операторы алгебры A <OR>, <AND>, <NOT>. Далее известное значение атрибута А определяется, как отношение с одним кортежем и интересующим значением (RELATION<A>{{a}}); NULL в качестве значение неизвестно определяется, как отношение, содержащие все возможные значения атрибута A (RELATION<A>{...}); кортеж - как декартовое произведение всех своих атрибутов. Это позволяет получить устойчивое решение проблемы отсутствующей информации.
3. Представление логического выражения в операции ограничения как реляционного выражения
3.1 Рассмотрим операцию ограничения над отношением REL WHERE P(rel), где P(rel) - некоторое логическое выражение над атрибутами отношения REL. Будем рассматривать только некоторое подмножество из всех возможных логических выражений: пусть P(rel) определяется следующим образом:
<логическое_выражение>::= NOT <логическое_выражение> <логическое_выражение> AND <логическое_выражение> | <логическое_выражение> OR <логическое_выражение> | <логическое_выражение> = <логическое_выражение> | <логическое_выражение> о <логическое_выражение> | <сравнение_атрибута_и_константы> | <сравнение_двух_атрибутов> | <логическая константа>
Отметим, что можно определить операторы сравнения логических выражений:
А = В как (A and В) or (not (A) and not (В));
А <> В как (not(A) and В) or (A and not (В)).
Тогда определение P(rel) можно сведено до следующего: <логическое_выражение>::= NOT <логическое_выражение> | <логическое_выражение> AND <логическое_выражение> |
(1) <логическое_выражение> OR <логическое_выражение> |
<сравнение_атрибута_и_константы>|<сравнение_двух_атрибутов>|
<логическая_константа>
3.2 Запишем некоторые общеизвестные правила преобразований в терминах новой реляционной алгебры А:
• X WHERE (a OR Ъ) =
(X WHERE a) UNION (X WHERE b) =
(X WHERE a) <OR> (X WHERE b)
• X WHERE (a AND b) =
(X WHERE a) INTERSECT (X WHERE b) =
(X WHERE a) <AND> (X WHERE b)
Известно, что любое выражение вида (X WHERE b) может быть представлено, как соединение отношения X с некоторым другим отношением В таким, что заголовки (типы) отношений X и В одинаковые, а кортежи отношения В представляет все возможные истинные значения логического выражения Ь.
X WHERE b<=>X <AND> В.
• Закон Де Моргана:
о для логических выражений:
NOT (a AND b) = NOT (а) OR NOT (6);
NOT {a OR b) = NOT (a) AND NOT (6); о для реляционных выражений:
<NOT> (A <AND> В) = (<NOT> A) <OR> (<NOT>B); <NOT> (A <OR> B) = (<NOT> A) <AND> (<NOT>B);
• Свойство дистрибутивности:
о для логических выражений:
{a AND b) OR с = {a OR с) AND ф OR с);
(a OR b) AND с = (а AND с) OR ф AND с); о для реляционных выражений:
(A <AND> В) <OR> С = (A <OR> С) <AND> (В <OR> С);
(A <OR> В) <AND> С = (A <AND> С) <OR> (В <AND> С);
• X WHERE (NOT b) = X MINUS (X WHERE b) = X <AND> <NOT>(X WHERE b) = X <AND> <NOT> (X <AND> В) = X <AND> ((<NOT>X) <OR> (<NOT>B)) = (X <AND> <NOT>X) <OR> (X <AND> <NOT>B) = X <AND> <NOT> В, поскольку (X <AND> <NOT> X) - пустое отношение.
3.3 Используя перечисленные выше правила (главным образом, правила для X WHERE (a OR Ъ); X WHERE (a AND Ъ); X WHERE (NOT b)) для преобразования исходного выражения REL WHERE P(rei), мы получим реляционное выражение с соединениями, пересечениями и отрицаниями простых ограничений вида REL WHERE P(Atr_i), REL WHERE P(Atr_i, Atr J), REL WHERE P(), то есть с простыми логическими выражениями вида:
<логическое_выражение>::= <сравнение_атрибута_и_константы> |
<сравнение_двух_атрибутов> | <логическая_константа>
Приведем пример:
X WHERE (NOT((A=B)=(B=b)) AND
(((C=c) AND FALSE) OR TRUE )) (2)
X <AND>
<NOT> (
(X WHERE (A=B) <AND> X WHERE (B=b)) <OR> (3)
( X <AND> <NOT> (X WHERE (A=B)) <AND> <NOT> (X WHERE (B=b)))
)
<AND> ((X WHERE (C=c) <AND> X WHERE FALSE) <OR> X WHERE TRUE)
3.4 Далее простые ограничения вида REL WHERE P(Atr_i) будем
рассматривать как соединение REL<AND>PAtr_i, где кортежи
отношения PAtr_i представляет все возможные истинные значения логического выражения P(Atr_i):
• Сравнение атрибута и константы: ( X WHERE A<cmp_op> const
) = (X <AND> CONST)
• Сравнение двух атрибутов: ( X WHERE A<cmp_op>B ) = ( X <AND> AB)
• Логическая константа:
(X WHERE TRUE ) = (X <AND> TABLE_DEE ) и (X WHERE FALSE) = (X <AND> TABLE_DUM)
Тогда реляционное выражение (3) преобразуется к следующему виду:
X <AND>
<NOT>(
(X <AND> AB <AND> X <AND> B) <OR> (4)
(X <AND> <NOT> (X <AND> AB) <AND> <NOT> (X <AND> B))
)
<AND> ((X <AND> С <AND> X <AND> TABLE DUM)
<OR> X <AND> TABLE DEE)
3.5 Теперь, когда у исходное отношение REL WHERE P(rei) представлено в виде (4), «вытащим» (вынесем за скобки) конъюнкт REL. То есть представим выражение (4) в виде соединения REL с выражением, не содержащим отношение REL. Отметим, что это возможно из-за дистрибутивности операторов <AND> и <OR>, а также из-за того, что реляционный оператор <NOT> (используемый в выражение X <AND> (<NOT> EXP)) хоть и возвращает дизъюнкцию конъюнктов, содержащих как X, так и <NOT> X, конъюнкты с <NOT> X сократятся, поскольку им всегда будет предшествовать соединение с X.
Тогда реляционное выражение (4) преобразуется к следующему виду:
X <AND>
<NOT>(AB <AND> В <OR> <NOT> AB <AND> <NOT> B) (5) <AND> (C <AND> TABLE_DUM <OR> TABLE_DEE))
Если в исходном ограничении (2) представить равенство (А=В) = (В=Ь) как (((А=В) AND (B=b)) OR (NOT (А=В) AND NOT (B=b))), то получим выражение
X WHERE (NOT (((А=В) AND (B=b)) OR (NOT (A=B) AND NOT (B=b))) AND (((C=c) AND FALSE) OR TRUE)) (6),
которое очень схоже с выражением (5):
X WHERE NOT (
((A=B) AND (B=b))
OR
(NOT (A=B) AND NOT (B=b)) )
AND (( C=c) AND FALSE OR TRUE)
X <AND>
<NOT>(
AB <AND> В <OR>
<NOT> AB <AND> <NOT> В )
<AND> (C <AND> TABLE_DUM <OR> TABLE_DEE))
На схожести выражений (5) и (6), полученных в результате приведенных выше преобразований, основана одна из главных идей данной статьи о возможности интерпретации логического выражения как реляционного выражения. То есть оператор реляционного ограничения (X WHERE b) с некоторым логическим выражением b вида (1) может быть представлен как соединение X и некоторого реляционного выражения Rb - X <AND> Rb, где реляционное выражение Rb получено из логического выражения b заменой логических операторов NOT, AND, OR на соответствующие реляционные операторы <NOT>, <AND>, <OR>; сравнения атрибутов и значений/атрибутов на отношения, представляющих данные сравнения на множестве всевозможных значений; логических констант TRUE и FALSE на отношения-константы TABLE_DEE и TABLE_DUM соответственно. Кроме того, поскольку в
реляционной алгебры А любое ограничение (X WHERE Ъ) может быть представлено как соединение X с некоторым отношением В, кортежи которого представляет все возможные истинные значения логического выражения Ь, по построению В является результатом вычисления Rb. Таким образом, Rb является функций ограничения над всеми возможными значениями X, а X <AND> Rb является вызовом этой функции для заданного значения отношениях.
3.6 Вернемся к выражению (3) и пункту, для которого выполним подстановку следующего вида:
• Сравнение атрибута и константы:
(X WHERE A<cmp_op>const) = (X <AND> Х{А} <AND> CONST)
• Сравнение двух атрибутов:
(X WHERE A<cmp_op>B ) = (X <AND> X{A,B} <AND> AB)
• Логическая константа:
(X WHERE TRUE ) = (X <AND> TABLE_DEE) и (X WHERE FALSE) = (X <AND> TABLE_DUM)
Получим:
X <AND>
<NOT>(
(X WHERE (A=B) <AND> X WHERE (B=b)) <OR>
(X <AND> <NOT> (X WHERE (A=B)) <AND> <NOT> (X WHERE (B=b)))
)
<AND> ((X WHERE (C=c) <AND> X WHERE F AL SE) <OR> X WHERE TRUE)
X <AND>
<NOT>(
(X <AND> X{A,B} <AND> AB <AM> X <AND> X{B}<AND> B) <OR> (X <AND> <NOT> (X <AND> X{A,B} <AND> AB) <AND> <NOT> (X <AND> X{B} <AND> B))
)
<АМ> ( (X <АМ> С <АМ> X <АЖ» ТАВЬЕ_БЦМ) <(Ж> X <АМ> ТАВЬЕ_БЕЕ)
Над полученным выражением вновь «вытащим» конъюнкт X:
Х<АМ>
<ШТ>(
(X <АМ> Х{АЗ} <АМ> АВ <АМ> X <АМ> Х{В}<АМ> В) <(Ж> (X <АМ> <ШТ> (X <АМ> Х{А,В} <АМ> АВ) <АМ> <ШТ> (X <АМ> Х{В} <АМ> В))
)
<АМ> ((X <АМ> С <АМ> X <АМ> ТАВЬЕ_ШМ) <(М> X <АМ> ТАВЬЕ_БЕЕ)
Х<АМ>
<ШТ>(
((Х{А,В} <АМ> АВ )<АМ>(Х{В}<АМ> В)) <(Ж>
(<ШТ> (Х{А,В} <АМ> АВ) <АМ> <ШТ> (Х{В} <АМ> В)) (7)
)
<АМ> (С <АМ> ТАВЬЕ_ШМ <(Ж> ТАВЬЕ_БЕЕ)
Таким образом, выражение (7) в сравнении с выражение (5), отчасти уже содержит вызов функции ограничения. То есть если
<ШТ> (АВ <АМ> В <(Ж> <ШТ> АВ <АЖ» <ШТ> В)
<АЖ» (С <АМ> ТАВЬЕ_БиМ <(Ж> ТАВЬЕ_БЕЕ)) -
функция ограничения в общем виде, тогда <ЮТ>(
((Х{А,В} <АМ> АВ )<АЖ»(Х{В}<АМ> В)) <(Ж>
(<ШТ> (Х{А,В} <АЖ» АВ) <АЖ» <ШТ> (Х{В} <АЖ» В))
)
<АЖ» (С <АМ> ТАВЬЕ_БЦМ <(Ж> ТАВЬЕ_БЕЕ)
уже отчасти содержит вызов общей функции ограничения с интересующими нас значениями, и может быть рассмотрен как частный случай функции ограничения.
3.7 Вернемся к рассмотрению операцию ограничения REL WHERE Р(-ш]). Отношение REL может быть представлено как объединение множества всех своих кортежей, точнее как объединение отношений, содержащих только один кортеж из REL, для каждого кортежа из REL.
(UMON(RTupiel,RTupie2,... ,RTupie_N)) WHERE P(rel)
(<OR>(RTuplebRTuple2,- ■ ■ Дтир1е_м))
<AND> P rel
Используя свойство дистрибутивности операций ограничения и объединения, получим
UMON(
RTupiei WHERE P(rel), RTupie2 WHERE P(rel),
R'lnple \ WHERE PGjel))
<OR>(
Riupiei <AND> P R Rrupka <AND> P R
R'l nple \ <AND> Prel)
Очевидно, что ограничение RTupie K WHERE P(mL) (RTupie_K <AND> PmL ) возвращаете либо пустое отношение, если условие ложно; либо входное отношение, если условие истинно. (Примечание: в дальнейшем будем называть отношения вида RTupie к — отношениями-кортежами)
3.8 Теперь применим ограничения из пункта 3.6, где сравнения атрибут представлены как
• Сравнение атрибута и константы:
(X WHERE A<cmp_op>const) = (X <AND> Х{А} <AND> CONST)
• Сравнение двух атрибут:
(X WHERE A<cmp_op>B ) = (X <AND> X{A,B} <AND> AB) индивидуально к отношениям-кортежам XTupie K (Riupie к из пункта 3.7).
Таким образом, проекции вида XTupie к{А} дадут отношение с одним кортежем, содержащим одно значение для атрибута А -
RELATION<A>{{А a}} (примечание: в дальнейшем будем называть такие отношения — отношениями-значениями). Проекции XTupie К{А, В}, поскольку XTupie к содержит только один кортеж, можно рассматривать как соединение таких отношений-значений XTupie к{А} <AND> ХТир1е_к{В}.
Теперь сравнения атрибутов будут выглядеть следующим образом.
• Сравнение атрибута и константы:
Xpupie к WHERE A<cmp_op>const = XTupie к <AND> XTupie к{А} <AND> CONST
• Сравнение двух атрибут:
Xjupie к WHERE A<cmp_op>B = Xxupie к <AND> Xxupie к{А} <AND> AB <AND> XTupieK{B}
Если вернуться от абстрактных отношений А и АВ, содержащих всевозможные значения, используемых в определения сравнений атрибутов, тогда сравнение несут смысл эквисоединения над входными отношениями-значениями (опишем с привлечением терминов SQL):
• Сравнение атрибута и константы:
XTupie к WHERE A<cmp_op>const =
XTupie к <AND> (XTupie к{А} JOIN RELATION<CONST>{{const}} ON (A<cmp_op>CONST)) { A}
• Сравнение двух атрибут:
Xxupie к WHERE A<cmp_op>B =
Xxupie к <AND> (Xxupie k{A} JOIN XTupie k{B} ON (A<cmp_op>B))
Конечно, иногда может быть удобно для ограничения ХТирк к WHERE A<cmp_op>B использовать отрицание от обратного оператора сравнения Хтирк к WHERE NOT(A<inverse_cmp_op>B). Который можно упростить:
Xxupie к WHERE A<cmp_op>B =
Xxupie к WHERE NOT (A<inverse_cmp_op>B) =
Xxupie к <AND> <NOT> ( Xxupie к {A} <AND> <INVERSE_AB> <AND> Xxuple K {B})
3.9 Все описанные выше утверждения верны для реляционной модели без NULL. Теперь же введем NULL и покажем операции сравнения над ними.
Основная идея состоит в том, чтобы рассматривать NULL для некоторого атрибута Aunknown, в случае значение не известно (значение не определено, значение не достоверно, значение не предоставлено), как отношение с заголовком, содержащим только интересующий нас атрибут AUNknown, и телом, содержащим всевозможными значениями для заданного типа атрибута Aunknown- Более точно, нас в большей мере интересует проекция Xxupiejc { AUNKNOwn } из пункта 3.8, то есть результатом такой проекции будет отношение с заголовком из атрибута Aunknown, и телом со всевозможными значениями для типа атрибута Aunknown-
Что касается NULL для атрибута ANa, в качестве значение недопустимо (значение не существует, значением является пустое множество), изначально планировалось определить его как пустое отношение с заголовком из атрибута ANa, однако, как оказалось такое поведение не всегда верно, и даже может быть упрощено. Рассмотрим его чуть позже.
3.10 С введением NULL, в случае значение не известно, отношение Xxupie к, изначально содержавший только один кортеж, теперь же содержит множество кортежей, которое получилось как декартовое произведение своих атрибутов. Ограничение ХТирк к WHERE P(rei), как говорилось в пункте 3.7 «возвращаете входное отношение, если условие истинно», принимает смысл истинности квантора всеобщности для отношения XTup¡e кяад выражением P(rei)- То есть если результат XTuph к WHERE P(rei) равен исходному отношению ХТирк к, это означает истинность квантора всеобщности, и потому кортеж Tuple К из отношения REL (см. пункт VII), добавляется в результат ограничение
REL WHERE Р(Ш1).
4. Примеры
Рассмотрим приведенный во введении пример Дейта, показывающий несостоятельность трехзначной логики в 8С)Е.
Поставщики и детали
Поставщики S
SNO* SCITY
SI ‘London’
PNO* P CITY
PI NULL
Запрос
SELECT S.SNO, P.PNO FROM S, P
WHERE S.CITY о P.CITY OR P.CITY о ’Pans’
Представим соединение кортежей S и P как отношение TUPLE_S_JOIN_P, и далее будем использовать операторы реляционной алгебры, а не SQL.
TUPLE_S_JOIN_P WHERE (S_CITY^P_CITY) OR (P_CITY^’Pans’) TUPLE_S_JOIN_P <AND>
(<NOT> ((TUPLE_S_JOIN_P {S_CITY} RENAME S_CITY AS P_CITY) <AND> TUPLE_S_JOIN_P {P_CITY})
<0R>
<NOT> (TUPLE_S_JOIN_P {P_CITY} <AND> RELATION< P_CITY> {{‘Paris’}}))
(см. Преобразование 3)
Выполним подстановку значений P_CITY
4.1 Значение P CITY определено
Отношение TUPLE S JOIN P:
SNO SCITY PNO P CITY
SI ‘London’ PI ‘Paris’
TUPLESJOINP =
RELATION<SNO> {{SI}} <AND>RELATION<S_CITY> {{‘London’}} <AND> REALTION {{PI}} <AND> RELATIONS_CITY>{{Paris }}
TUPLE_S_JOIN_P WHERE (S_CITYoP_CITY) OR (P_CITY^’Pans’)
TUPLE_S_JOIN_P <AND>
(<NOT>(RELATION<P_CITY>{ {‘London’} } <AND>
RELATION< P_CITY>{{ ‘Pans’} })
<OR>
<NOT>( RELATION<P_CITY>{ {‘Pans’} } <AND>
RELATION<P_CITY>{ {‘Pans’} }))
TUPLE_S_JOIN_P <AND>
(<NOT> RELATION<P_CITY>{ } <OR>
<NOT>RELATION<P_CITY>{ {‘Pans’} })
TUPLE_S_JOIN_P <AND>
(RELATION<P_CITY>{... } <OR> RELATION<P_CITY>{... /{‘Pans’} })
где RELATION< P_CITY>{...} означает отношение, содержащее всевозможные кортежи; a RELATION<P_CITY>{.../{‘Paris’}} означает отношение, содержащее всевозможные кортежи за исключением кортежа {‘Paris’}
TUPLE_S_JOIN_P <AND> RELATION<P_CITY>{... }
Очевидно, что рассмотренное ограничение вернет отношение TUPLE_S_JOIN_P, что будет означать истинность квантора
всеобщности - то есть для всех кортежей отношения TUPLE_S_JOIN_P верно выражение (S CITY <> PCITY OR PCITY <> Paris )
4.2 Значение P CITY неопределенно
Отношение TUPLE S JOIN Р:
SNO SCITY PNO P CITY
SI ‘London’ PI UNKNOWN
TUPLESJOINP =
RELATION<SNO> {{SI}} <AND>RELATION<S_ClTY> {{‘London’}} <AND> REALTION{{PI}} <AND>RELATION<P_CITY>{...}
TUPLE_S_JOIN_P <AND>
(<NOT>(RELATION< P_CITY>{ {‘London’ }} <AND>
RELATION<P_CITY>{...})
<OR>
<NOT>( REL ATION<P_CIT Y> {...} <AM> RELATION<P_CIT Y>{ {‘Pans’} }))
TUPLE_S_JOIN_P <AND>
(<NOT> RELATION<P_CITY>{ {‘London’} } <OR>
<NOT>REL ATION<P_CIT Y>{ {‘Pans’} })
TUPLE_S_JOIN_P <AND>
(RELATION<P_CIT Y>{... /’London’} <OR>
REL ATION<P_CIT Y> {... /{‘Pans’} })
RELATION<SNO, S_CITY, PNO, P_CITY>»S1, ’London’, PI,...<AND> RELATION<P_CITY>{...}
Данное ограничение также вернет отношение TUPLE_S_JOIN_P, то есть истинность квантора всеобщности для значений RELATION<SNO, S_CITY, PNO, P_CITY>{{S1, ’London’, PI, над выражением
(S_CITY о P_CITY OR P_CITY о ’Pans’)
4.3 Значение P CITY недопустимо
Отношение TUPLE S JOIN P:
SNO SCITY PNO P CITY
SI ‘London’ PI N/A
Как было упомянуто ранее в пункте 3.10, изначально планировалось определить NULL, в качестве значение недопустимо, как пустое отношение, с заголовком соответствующего атрибута. Поскольку сравнение на равенство атрибутов представляется как соединение отношений-значений сравниваемых атрибутов, а соединение с пустым отношением всегда даст пустое отношение, что означало бы ложь. Однако сравнение значения двух атрибутов с недопустимым значением, тоже даст пустое отношение, хотя ожидалась истина. Кроме того, не очевидно как представлять TUPLE_S_JOIN_P. Поскольку TUPLE_S_JOIN_P = RELATION<SNO> {{SI}} <AND> RELATION<S_CITY> {{‘London’}} <AND> REALTION {{PI}} <AND> RELATION<P_CITY>{}, естественно даст пустое отношение, а для пустого отношения квантор всеобщности всегда истинен, даже если условие ложно. Однако в действительности случай NULL, как значение недопустимо, более вырожденный, чем случай NULL, как значение неизвестно, поскольку возвращает истину, только если оба значения недопустимы. Потому результат его сравнение может быть просто представлен логическими константами, или же TABLE_DEE и TABLE_DUM, если мы работаем с отношениями. Остается открытым вопрос из пункта 3.10, как определить добавлять ли кортеж Tuple К из отношения REL в результат ограничение REL WHERE P(rei), где равенство отношения XTupie к и ограничения XTupk к WHERE P(rei) означает истинность квантора всеобщности для отношения-кортежа Xjupie к■ Истинность же квантора всеобщности в случае NULL, значение недопустимо, предлагается ввести как истинность равенство проекции (ХТшр1е К ALL BUT (Ana, ■■■)) и ограничения (ХТшр1е К ALL BUT (Аш,...) WHERE P(ml)).
Так результат (TUPLE_S_JOIN_P {S_CITY} RENAME S_CITY AS P_CITY) <AND> TUPLE_S_JOIN_P {P_CITY} определим как TABLE_DUM, результат (TUPLE_S_JOIN_P {P_CITY} <AND> RELATION< P_CITY> {{‘Paris’}}) также определим как TABLE_DUM. Тогда
(TUPLE_S_JOIN_P ALL BUT P_CITY) <AND>
(<NOT>TABLE_DEE <OR> <NOT>TABLE_DUM)
(TUPLE_S_JOIN_P ALL BUT P_CITY) <AND> TABLE_DEE
(TUPLE_S_JOIN_P ALL BUT P_CITY)
Очевидно что, квантор всеобщности истинен.
(см. Примеры)
5. Смежные вопросы
5.1 Сравнения атрибута на равенство больше/меньше
Рассмотрим вопросы сравнения атрибута и константы на равенство больше/меньше. Из пункта 3.8 операторы сравнения атрибута и константы определены следующим образом:
XTupie к WHERE A<cmp_op>const = XTupie к <AND> XTupie К{А} <AND> CONST, или же
XTupie к WHERE A<cmp_op>const =
XTupleK <AND> (XTuple k{A} JOIN RELATION<CONST>{{const}} ON (A<cmp_op>CONST)) {A}
Пусть атрибут А имеет тип T, для которого определены операции сравнения на больше/меньше. По определению каждый тип определяет
множеством значений, принадлежащих данному типу. Операция ограничения в реляционной алгебре А предполагает существование отношения CONST, кортежами которого являются все значения Т, удовлетворяющие условию t<cmp>const. Результатом соединение Хтирк к{А} <AND> CONST, поскольку XTup¡e К{А} представляет отношение с всевозможными значениями над типом Т, очевидно будет отношение CONST.
Запрос 5.1.1
Reí: AREAL UNKNOWN
Rel WHERE A>3 OR A<4
Rel <AND> ((Rel{A} <AM>RE4La>3) <OR> (Rel{A} <AND> REALa<4)) где REALa>3 означает отношение RELATION<A REAL>{A|A>3 }=
Rel <AND> (REL ATION<A>{...} <AM> REALa>3 )<OR>(RELATION<A>{... }<A№>REALa<4)
Rel <AND> (REALa>3 <OR> REALa<4)=
Rel <AM> REALITON<A >{...}
Квантор всеобщности истинен.
Запрос 5.1.2
TYPE REAL_1_TO_10 IS REAL CONSTRAINT R>=1 AND R<=10; Rel:
A REAL I TO IO UNKNOWN
Rel WHERE A>0
Rel <AND> Rel {A} <AND> REALa>0
Rel <AND> RELATION<A REAL_1_TO_10>{... } <AND> REALa>0 =
Rel <AND> RELATION<A REAL_1_TO_10>{... }
Квантор всеобщности истинен
5.2 Сравнение двух неопределённых значений
Рассмотрим сравнение двух неопределённых значений. Очевидно, что сравнения двух атрибутов, описанных в пункте 3.8 как:
Xxupie к WHERE A<cmp_op>B = Xxupie к <AND> Xxupie к{А} <AND> AB <AND> XTupieK{B}, или же
XTupie к WHERE A<cmp_op>B = XTupie K <AND> (XTupie K{A} JOIN ХТир1е_к{В} ON (A<cmp_op>B)),
В случае, когда атрибуты представлены неопределённым значением, проекции ХТир1е к{А} и XTupie К{В} представляют множество всевозможных значений, тогда возникает сложность в представлении отношения АВ, не говоря о вычислительных сложностях. Поскольку нам к тому же следует проверять истинность квантора всеобщности: «каждый человек выше любого другого» - то предполагается, что такое сравнение неопределённых значений атрибутов будет ложью. То есть соединения: (ХТшр1еК{А} <AND> АВ <AND> ХТшр1еК{В}) или же (XTupie K{A} JOIN ХТир,е_к{В} ON (A <cmp_op>B)) - будут возвращать пустые отношения. Конечно, это не позволит показать истинность выражения: «Все либо выше других, либо ниже других, либо одинокого роста». Также следует помнить о типах атрибутов, поскольку неопределённые значения определяются как множество всевозможных значений над заданным типом: так очевидно, что какой-либо человек выше, скажем, к примеру, кого-либо муравья.
Также высказывается идея, что при добавлении неопределённого значения в базу данных, в системе автоматически вводится некий уникальный идентификатор для нового неопределённого значения. Тогда становится возможным сравнение неопределенного значения с самим собой, что дает истину. Более того, если такое соотношение
201
уникального идентификатора и неопределённого значения существует, тогда система базы данных сможет всегда отслеживать миграцию такого неопределенного значения, и выполнять корректное сравнивание их, даже если они находятся в разных отношениях.
6. Заключение
В данной статье я попытался доказать, что ограничении (R WHERE В) некоторого отношения R по логическому выражению b может быть записано как соединение R<AND>B, где В реляционное выражение, полеченное из логического выражения b заменой, логических операторов AND, OR, NOT на соответствующие операторы новой реляционной алгебры <AND>, <OR>, <NOT>, а сравнение атрибутов, представленных отношением, представляется эквисоединением. Тогда я определяю NULL, в качестве значение неизвестно, как отношение со всевозможными значениями над соответствующим типом атрибута. Кортежа Т из R, содержащего неопределённое значение для некоторого атрибута, представляется как декартовое произведение своих атрибутов - RT. Истинность такого кортежа Т, представленного отношением RT, по заданному логическому выражению Ь, означает истинность квантора всеобщности над значениями RT по выражению Ь, что означает равенство соединения (RT <AND> В) и RT. Также я рассмотрел некоторые практические вопросы сравнения неопределённого значения атрибута, представленного отношением со всевозможными значениями.
7. Список литературы
[1] С. J. Date. “Why Three- and Four-Valued Logic Don’t Work” in “Date on
Database. Writings 2000-2006”. Apress, 2006. Впервые опубликована на сайте http://www.dbdebunk.com (February 2006).
[2] С. J. Date. Database in Depth: Relational Theory for Practitioners. Sebastopol,
Calif.: O’Reilly Media, Inc. (2005).
[3] C. J. Date. SQL and Relational Theory: Flow to Write Accurate SQL Code.
O’Reilly Media, Inc. (2009).
[4] Claude Rubinson. Nulls, Three-Valued Logic, and Ambiguity in SQL :
Critiquing Date’s Critique. SIGMOD Record, December 2007 (Vol. 36, No. 4). См. также перевод: http://citforum.ru/database/articles/nulls/
[5] С. J. Date. A Critique of Claude Rubinson’s Paper Nulls, Three - Valued
Logic, and Ambiguity in SQL: Critiquing Date’s Critique. SIGMOD Record, Vol. 37, No. 3, September 2008. См. также перевод: http://citforum.ru/database/articles/date_vs_rubinson/
[6] John Grant. Null Values in SQL. SIGMOD Record, Vol. 37, No. 3, September
2008. См. также перевод:
http://citforum.ru/database/articles/grant_vs_rubinson/
[7] C. J. Date, Hugh Darwen. “Foundation for Future Database Systems: The
Third Manifesto”, Addison-Wesley Pub Co; 2nd edition (2000).
Имеется перевод: Дейт К., Дарвен Х. Основы будущих систем баз данных. Третий манифест. 2-е изд. (под ред. С. Д. Кузнецова). М.: Янус-К, 2004.