|
| ||||||||||||
| ||||||||||||
|
2009 г.
Критика статьи Клода Рубинсона «NULL, трехзначная логика и неопределенность в SQL: критика критики Дейта»К. Дж. Дейт
Оригинал: C. 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. См. вступительную заметку Сергея Кузнецова «И снова о вечной проблеме отсутствующей информации» Я хотел бы поблагодарить Клода Рубинсона за его содержательную критику [3] моих замечаний по поводу неопределенных значений и трехзначной логики (three-valued logic, 3VL), приведенных в [1]. Понятно, что мы единодушны по поводу основных вопросов; как говорит Рубинсон, «я согласен с Дейтом относительно того, что трехзначная логика несовместима с системами управления базами данных». Мы также единодушны в том, что null не является значением; как говорит Рубинсон, «в SQL null определяется не как какое-либо значение, а как некоторый флаг». Однако мне хотелось бы прокомментировать три конкретных вопроса, проистекающих из статьи Рубинсона. Замечание: все дальнейшие цитаты, для которых не указан источник, взяты из этой статьи. Также замечу, что я следую Рубинсону в использовании терминологии SQL (таблицы, столбцы и строки). Исходный примерБаза данных, которую я использовал в качестве основы своих примеров в [1], выглядела следующим образом ( ![]() В этой базе для детали Заметим для точности, что пустое место на рисунке там, где должно было бы находиться значение Затем я задаю запрос «получить пары SELECT S.SNO, P.PNO FROM S, P WHERE S.CITY <> P.CITY OR P.CITY <> ’Paris’ Затем я показываю, что для показанной на рисунке базы данных результат этого SQL-выражения отличается от результата, которого мог бы ожидать пользователь от исходной формулировки запроса (на естественном языке). Рубинсон говорит: Проблема (примера Дейта) состоит не в том, что результат SQL не согласуется с реальностью, а в том, что Дейт плохо сформулировал свой исходный запрос… Формулировка на SQL в действительности не соответствует запросу [на естественном языке]; на самом деле, исходный запрос Дейта не может быть должным образом оттранслирован на SQL. Но об этом я и говорил! Я согласен, что «сформулированный оператор SQL» не соответствует должным образом запросу на естественном языке; конечно, не соответствует, поскольку производит другой результат. В частности, с позволения Рубинсона, я совершенно точно не утверждал, что это положение дел «свидетельствует об ошибке в логике SQL». Логика SQL как таковая безошибочна (по крайней мере, допустим это в нашем обсуждении). Скорее, я утверждал, что «логика SQL отличается от логики, обычно используемой нами» в реальном мире. И это все. В любом случае (и независимо от того, согласен ли Рубинсон со мной по этому поводу, или мы просто соглашаемся о различии наших точек зрения) я не думаю, что стоит тратить много времени на этот конкретный пример и на другие, ему подобные. Реальный вопрос состоит в том, как мы собираемся интерпретировать таблицы базы данных? И это приводит меня к следующему пункту. Аспект интерпретацииВ [1] я умышленно не разъяснял в деталях, какая интерпретация таблиц Прежде всего, на тот случай, если найдутся читатели, незнакомые с терминологией, позвольте мне объяснить, что:
Как кажется, в [3] Рубинсон утверждает, что имеется логическое различие между тем, что (a) что-то является истинным, и (b) мы полагаем что-то истинным, и именно этот различие является основой трудностей в 3VL. Однако, на самом деле, мы должны обращать внимание на это различие даже при отсутствии null’ов и 3VL, хотя на практике, конечно, это часто не делается. Поэтому я полагаю, что здесь этот довод Рубинсона только уводит в сторону от сути вопроса. Более того, как я показываю в [2], даже в базе данных без null’ов и 3VL мы может получать ответы типа «не знаю». Но, возможно, здесь и это не существенно. Позвольте мне вернуться к сути проблемы. Рассмотрим таблицу Но допустим теперь, что мы не знаем, где хранится деталь Поскольку никакого истинного высказывания в требуемой форме не существует, не существует и соответствующая строка. И поэтому строка для детали Теперь допустим на мгновение, что строка для детали Должно быть истинным либо то, что (a) мы знаем, что деталь(Замечу, что OR, связывающее части (a) и (b), здесь должно быть исключающим, а не включающим. Мы не можем допустить, чтобы для одной и той же детали город был и известен, и не известен.) Однако теперь обратим внимание на то, что у части (a) этого предиката имеются два параметра ( Возможно, мне следует добавить, что в схеме базы данных, которая точно соответствует ситуации и не вынуждает использовать null’ы, следовало бы иметь две отдельные таблицы: (a) таблицу Нарушают ли null’ы реляционную модель?Соглашаясь со мной в нежелательности null’ов и 3VL, Рубинсон говорит, что «не убежден в том, что трехзначная логика нарушает реляционную модель». Но она действительно ее нарушает! Доводы предыдущего раздела, равно как и другие, которые здесь не используются, явным образом показывают, что таблица, «содержащая null’ы», не соответствует отношению в смысле реляционной модели, поскольку не удовлетворяет тому базовому реляционному требованию, что в каждой строке таблицы имеется значение для каждого столбца. Следовательно, фундаментальный объект в системе, поддерживающей null’ы, не является реляционной таблицей (я не знаю, чем она на самом деле является, но точно не реляционной таблицей). Повторю то, что говорится в [1] (и здесь я возвращаюсь к реляционной терминологии):
Подводя итог, надеюсь, что эта краткая заметка послужит поддержкой моего утверждения в [1] о том, что при наличии null’ов нельзя говорить о реляционной модели. Другими словами, я остаюсь при той своей позиции, что null’ы (и 3VL) и реляционная модель взаимно несовместимы. Литература1. C. J. Date: Database in Depth: Relational Theory for Practitioners. Sebastopol, Calif.: O’Reilly Media, Inc. (2005). 2. C. J. Date: “The Closed World Assumption,” in Logic and Databases: The Roots of Relational Theory. Victoria, BC: Trafford Publishing (2007). See www.trafford.com/07-0690. 3. Claude Rubinson: “Nulls, Three-Valued Logic, and Ambiguity in SQL: Critiquing Date’s Critique,” ACM SIGMOD Record 36, No. 4, December 2007. См. также перевод: Клод Рубинсон. NULL, трехзначная логика и неопределенность в SQL: критика критики Дейта. 1 Кстати, обратите внимание на последствия этого утверждения для внешнего соединения. |
|
CITForum © 1997–2025