UNK, неравенство и реальный мир
До этого места я просто предполагал, что операции сравнения с
"больше" и "меньше" имеют смысл при наличии значения UNK. Но я
думаю, что Дейт попытался бы доказать, что основным вопросом
являются потребности реального мира при столкновении с
неизвестными значениями. Если отвергать любой вопрос вида
"Является ли значение X большим (или меньшим), чем значение Y",
когда значения X, Y или оба неизвестны (что, кстати, является
потребностью реального мира), то мы ничем не пожертвуем при
использовании подхода Дейта. С другой стороны, нам пришлось бы
внимательно отслеживать семантику неизвестных значений при
использовании двузначной логики (по крайней мере, для "больше" и
"меньше").
Сейчас я покажу, что правильный ответ на запрос с "больше" или
"меньше" при наличии неизвестных значений действительно имеет
смысл, но этот ответ есть "unknown", поскольку значения одного
или обоих операндов неизвестны. (Если это покажется тривиальным,
позвольте напомнить, что именно это запрещает схема Дейта.)
Попробуем оценить, какое количество информации запрещается
использовать схемой Дейта при том, что эта информация содержится
в базе данных.
Предположим, что наша таблица представляет 100 вариантов расклада
игральных карт двух игроков. Числа от 2 до 14 соответствуют
картам от двойки до туза. Первый игрок - Джонс, второй - Смит.
Пусть a) в 10 вариантах неизвестны оба значения, b) в 23
вариантах неизвестно только одно значение и c) в оставшихся 67
вариантах известны оба значения. Для этих 67 вариантов
предположим, что 42 случаях карта Джонса бьет карту Смита, а 21
случае карта Смита бьет карту Джонса. (Чтобы избежать ненужной
сложности допустим, что в случае b) известное значение отличается
от 2 и 14.)
Теперь рассмотрим следующие вопросы:
Понятно, что ответы на вопросы следующие:
При использовании схемы Дейта были бы получены следующие ответы:
"вопрос некорректен)
некорректен")
Теперь сравним результаты. Для первого вопроса оба подхода дают
один и тот же правильный результат.
Для второго вопроса схема Дейта должна была бы определить, что
правильный результат - 75, но не смогла этого сделать по причине
наличия UDK в качестве операнда в 23 операциях сравнения. Однако
в этих 23 случаях Джонс действительно мог выиграть у Смита. Это
показывает, что при наличии в базе данных информации схема Дейта
не обеспечивает ей пользователей. Кстати, заметим, что правильный
ответ (75) находится за пределами диапазона, выданного схемой
Дейта, так что полученный на ее основе ответ является не только
неточным, но и абсолютно некорректным. Схема Дейта считает те 10
вариантов, в которых оба числа есть UDK, как ничьи, т.е. как
случаи с равными значениями. Поэтому они не учитываются в
качестве возможных ситуаций выигрыша Джонса у Смита. К сожалению
(для Дейта), в реальном мире в этих случаях Джонс мог бы выиграть
у Смита.
Для третьего вопроса схема Дейта снова выдает неверный результат.
Джонс и Смит точно сыграли вничью в четырех, а не четырнадцати
случаях. И это по причине использования правила Дейта: "Сравнение
UDK=UDK вырабатывает true... Здесь нет трехзначной логики!"
Конечно, при понимании ограничений схемы Дейта мы могли бы
сформулировать запрос по поводу точных ничьих с использованием
условия "where column 1 = column 2 and column 1 != UDK
and column 2 != UDK". Для такого запроса был бы выдан правильный
результат. Но это не решает проблем схемы Дейта, а только
перекладывает на плечи пользователя компенсацию фундаментальных
ошибок в семантике схемы.
Для четвертого вопроса схема Дейта выдает правильный результат,
но менее информативный, чем это возможно, поскольку каждый из 23
вариантов представляет возможную ничью.
Заметим, что СУБД, поддерживающая неопределенные значения и MVL
выдала бы именно приведенные выше корректные ответы. При
использовании трехзначной логики X = Y, X > Y, X < Y вырабатывают
логическое значение uknown, если значение одного или обоих
операндов неизвестно. Например, при выработке ответа на четвертый
вопрос СУБД с неопределенными значениями и MVL руководствовалась
бы следующими соображениями: "Я знаю, что Джонс и Смит сыграли
вничью в четырех раскладах. Для 10 вариантов я не знаю ни одной
карты, так что они могли бы сыграть вничью в каждом из этих
раскладов. В 23 случаях я не знаю одной карты, так что они могли
бы сыграть вничью и в этих раскладах. Общее число случаев - 37".
Попытка Дейта убедить нас в том, что в реальном мире не
используется трехзначная логика, опровергается наличием
повседневных соображений такого рода. И снова Дейт
проиллюстрировал истинность моего приведенного выше высказывания.