Классика баз данных - статьи

       

Вот более интересный пример. Рассмотрим


Вот более интересный пример. Рассмотрим следующую примерную базу данных:

DEPT DNO* NAME EMP ENO* DNO
  D1 NULL   E1 D1
        E2 D1
Предположим, что мы определяем представление

CREATE VIEW DEMP AS (SELECT * FROM DEPT, EMP WHERE DEPT.DNO = EMP.DNO)

Очевидно, что это представление материализуется следующим образом:

DEMP DNO* NAME ENO*
  D1 NULL E1
  D1 NULL E2
Тогда можно утверждать, что результатом запроса

SELECT DISTINCT * FROM DEMP DE1, DEMP DE2 WHERE DE1.NAME = DE2.NAME

должна быть таблица, содержащая обе строки исходной таблицы DEMP, поскольку в обеих строках используется неизвестное имя одного и того же отдела.

В результате мы видим, что критика критики Дейта, приведенная в заметке Рубинсона, является несостоятельной. Нельзя пытаться заменять механистической трактовкой трехзначной логики логику здравого смысла, даже не пытаясь ее понять. Кроме того, как видно, сама трехзначная логика здесь совсем не виновата. Виновато неправильное понимание обозначения NULL. И здесь, как мне кажется, не совсем прав уже Дейт. По-моему, можно понять, в каких случаях неправильно работают SQL-запросы к базам данных, содержащим NULL в качестве обозначения неизвестных значений. Так происходит тогда (не берусь утверждать, что только тогда), когда известно, что сравнивается неизвестное значение одного и того же атрибута одной и той же сущности, т.е. NULL происходит из одного столбца одной и той же таблицы. Похоже, что соответствующую коррекцию поведения запросов можно было бы возложить на компиляторы SQL.

Другой вопрос, что NULL в языке SQL служит не только для обозначения неизвестных значений, но также и для выражения неприменимости атрибута к конкретному экземпляру сущности и т.д. Очевидно, что правила трехзначной логики, поддерживаемые в SQL, недостаточны для корректной формулировки запросов при использовании одного вида неопределенных значений во всех возможных ситуациях. Как и Клод Рубинсон, я воздержусь здесь от обсуждения нетривиальных последствий этого состояния дел.

В заключение замечу, что буду рад любой критике в адрес своей критики критики Рубинсона критики Дейта. Кто знает, может быть, в результате нам удастся совместными усилиями разобраться в том, что же все-таки следует делать с управлением в базах данных отсутствующей информацией.


Содержание  Назад