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

       

в этом запросе подразумевается, что


И в этом запросе подразумевается, что город, в котором располагается деталь, либо является, либо не является Парижем. Однако в контексте SQL этот город может быть Парижем, может не быть Парижем, а может быть просто неизвестен. И в действительности неопределенное значение в базе данных показывает, что мы не знаем, с каким городом ассоциирована деталь P1.

Дейт утверждает, что «в реальном мире» город, в котором располагается деталь P1, либо является, либо не является Парижем. Конечно, это верно. Но также верно и то, что «в реальном мире» мы можем не знать, какой город ассоциирован с деталью P1. Это два разных высказывания. Города, которым соответствуют детали, представляют собой множество фактов, которое существует независимо от того, знаем ли мы, какие города соответствует каким фактам. В SQL запросы всегда подразумевают знание подобной взаимосвязи, а не просто ее существование. Поэтому исходный запрос Дейта можно переформулировать следующим образом: «Выдать пары SNO-PNO, для которых известно, что либо поставщик и деталь располагаются в разных городах, либо город, в котором располагается деталь, не является Парижем (или выполняются оба эти условия)». Теперь результаты SQL-запроса имеют смысл. Возвращается пустой результат, поскольку, хотя детали P1 «в реальном мире в действительности соответствует некоторый город», неизвестно, какому городу соответствует данная деталь.

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

SELECT P.PNO FROM P WHERE P.CITY = P.CITY

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

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