Итак, из всего вышесказанного можно сделать вывод,
что в логике систем управления базами данных имеются не два логических
значения (True и False), а три, ведь Null-значение также рассматривается
как одно из возможных логических значений. Именно поэтому на него часто
ссылаются как на неизвестное значение, значение Unknown.
Однако, несмотря на это, в системах управления базами
данных реализуется только двузначная логика. Поэтому условие с
Null-значением (неопределенное условие) должно интерпретироваться
машиной либо как True, либо как False.
В языке СУБД по умолчанию установлено опознавание
условия с Null-значением как значения False. Проиллюстрируем это
следующими примерами реализации в системах управления базами данных
условных операторов If и While: Эта запись означает: если P принимает
значение True, то выполняется действие A, а если P принимает значение
False или Null, то выполняется действие B.
Теперь применим к этому оператору операцию отрицания, получим: В свою очередь, этот оператор означает
следующее: если ¬P принимает значение True, то выполняется действие B, а
в том случае, если ¬P принимает значение False или Null, то будет
выполняться действие A.
И снова, как мы видим, при появлении Null-значения мы
сталкиваемся с неожиданными результатами. Дело в том, что два оператора
If в этом примере не эквивалентны! Хотя один из них получен из другого
отрицанием условия и перестановкой ветвей, т. е. стандартной операцией.
Такие операторы в общем случае эквивалентны! Но в нашем примере мы
видим, что Null-значению условия P в первом случае соответствует команда
B, а во втором – A.
А теперь рассмотрим действие условного оператора While: Как работает этот оператор? Пока переменная
P имеет значение True, будет выполняться действие A, а как только P
примет значение False или Null, выполнится действие B.
Но не всегда Null-значения интерпретируются как False.
Например, в ограничениях целостности неопределенные условия опознаются
как True (ограничения целостности – это условия, накладываемые на
входные данные и обеспечивающие их корректность). Это происходит потому,
что в таких ограничениях отвергнуть нужно только заведомо ложные
данные.
И опять-таки в системах управления базами данных существует специальная функция подмены IfNull (ограничения целостности, True), с помощью которой Null-значения и неопределенные условия можно представить в явном виде.
Перепишем условные операторы If и While с использованием этой функции:
1) If IfNull ( P, False) then A else B;
2) While IfNull ( P, False) do A; B;
Итак, функция подмены IfNull (выражение 1,
выражение 2) возвращает значение первого выражения, если оно не содержит
Null-значения, и значение второго выражения – в противном случае.
Надо заметить, что на тип возвращаемого функцией IfNull
выражения никаких ограничений не накладывается. Поэтому с помощью этой
функции можно явно переопределить любые правила работы с
Null-значениями.
|