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

       

После подстановки данных из примерной


После подстановки данных из примерной базы данных условие S.CITY <> P.CITY OR P.CITY <> ‘Paris’ принимает вид (‘London’ <> NULL) OR (NULL <> ‘Paris’), при вычислении которого в соответствии с правилами трехзначной логики SQL получается NULL. Следовательно, в ответ на этот запрос не возвращается ни одного кортежа.

В [, стр. 55] Дейт утверждает, что этот результат демонстрирует ошибку в трехзначной логике SQL, аргументируя это следующим образом:

Но, конечно, в реальном мире детали P1 в действительности соответствует некоторый город; другими словами, «неопределенное значение атрибута CITY» детали P1 на самом деле обозначает некоторое реальное значение, скажем xyz. Очевидно, что xyz либо равняется значению ‘Paris’, либо не равняется этому значению.

Затем Дейт демонстрирует, что условное выражение раздела WHERE будет всегда вычисляться в TRUE независимо от того, где располагается деталь P1. По существу, имеются три возможности: город xyz является Парижем, Лондоном или еще каким-нибудь городом. Если город xyz является Парижем, то выражение раздела WHERE принимает вид (‘London’ <> ‘Paris’) OR (‘Paris’ <> ‘Paris’). Это выражение приводится к (TRUE OR FALSE), что, в свою очередь, вычисляется в TRUE. Если город xyz является Лондоном, то выражение раздела WHERE принимает вид (‘London’ <> ‘London’) OR (‘London’ <> ‘Paris’), это выражение приводится к (FALSE OR TRUE), что вычисляется в TRUE. Если город xyz является каким-либо другим городом, например, Нью-Йорком, то выражение раздела WHERE принимает вид (‘London’ <> ‘Нью-Йорк’) OR (‘Нью-Йорк’ <> ‘Paris’). Это выражение приводится к (TRUE OR TRUE), что опять-таки вычисляется в TRUE.

В соответствии с Дейтом, если бы в SQL правильно принимался во внимание реальный мир – в данном случае тот факт, что деталь ассоциирована с некоторым городом, несмотря на то, что этот факт отсутствует в базе данных, – то в ответ на приведенный выше запрос должна была бы выдаваться пара S1-P1.То, что SQL возвращает пустой результат, свидетельствует об ошибке в его логике: «Другими словами, результат, корректный в соответствии с логикой (т.е. 3VL), отличается от результата, корректного в соответствии с представлениями реального мира».


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