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

       

Но Дейт снова неправильно читает


Но Дейт снова неправильно читает запрос. Поскольку в SQL используется трехзначная логика, этот оператор SQL выражает совсем другой запрос: «Выдать номера PNO для деталей, про которые известно, что они ассоциированы с городами». И SQL совершенно справедливо возвращает пустой результат, поскольку, как показывает таблица P, мы не знаем, с каким городом ассоциирована деталь P1.

В [, стр. 55] Дейт утверждает, что его примеры демонстрируют полную несостоятельность SQL:

Подводя итоги, следует заметить, что если в вашей базе имеются неопределенные значения, вы будет получать на некоторые запросы неправильные ответы. Хуже того, нет никакого способа узнать, какие запросы будут выдавать неправильные результаты; все результаты становятся подозрительными. Никогда нельзя доверять ответам, которые получаются из базы данных с неопределенными значениями. По моему мнению, это состояние дел свидетельствует о невозможности использования SQL. (Курсив К. Дж. Дейта.)

Как полагает автор данной заметки, Дейту не удалось продемонстрировать несостоятельность SQL. Для сформулированных Дейтом запросов SQL возвращает корректные ответы, но не те, на которые он рассчитывал. Эта путаница вполне объяснима. Трехзначная логика SQL не является интуитивной. При использовании двухзначной логики высказывания могут быть истинными или ложными. Но в трехзначной логике возможны еще и неизвестные высказывания. При работе с SQL-ориентированными базами обязательно требуется корректная формулировка запросов; в противном случае имеется риск совершения ошибок, подобных тем, которые делает Дейт.


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