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

       

У этой таблицы два столбца


Рассмотрим таблицу P. У этой таблицы два столбца – PNO и CITY, и поэтому у представляющего ее предиката должно быть два параметра. Что это за предикат? Очевидным кандидатом является следующий: деталь PNO хранится в городе CITY. Но нам следует быть более точными. На самом деле, в соответствии с приведенными выше замечаниями, более осмысленным кандидатом является такой предикат: мы знаем, что деталь PNO хранится в городе CITY.

Но допустим теперь, что мы не знаем, где хранится деталь P1. Тогда истинное высказывание вида «мы знаем, что деталь P1 хранится в городе CITY» просто не существует. Просто неверно то, что для какого-то конкретного значения CITY, каким бы оно не было, мы знаем, что деталь P1 хранится в городе CITY. (Замечание: по-видимому, мы знаем, что эта деталь где-то хранится, поскольку все детали где-то хранятся, но высказывание «мы знаем, что деталь P1 где-то хранится» является совершенно другим высказыванием.

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

Теперь допустим на мгновение, что строка для детали P1 все-таки присутствует в таблице (с null’ом в столбце CITY). Тогда должен иметься и соответствующий предикат. Вероятно, он должен быть следующим:

Должно быть истинным либо то, что (a) мы знаем, что деталь PNO хранится в городе CITY, либо то, что (b) мы не знаем города для детали PNO.

(Замечу, что OR, связывающее части (a) и (b), здесь должно быть исключающим, а не включающим. Мы не можем допустить, чтобы для одной и той же детали город был и известен, и не известен.)

Однако теперь обратим внимание на то, что у части (a) этого предиката имеются два параметра (PNO и CITY), а у части (b) – только один параметр (PNO). Следовательно, строки, представляющие истинную инстанциацию части (a), имеют два столбца, а строки, представляющие истинную инстанциацию части (b), – только один столбец. И эти два вида строк с логической точки зрения не могут присутствовать в одной и той же таблице.Таким образом, говорить о том, что некоторая строка r в некоторой таблице t «содержит null», бессмысленно, или, по крайней мере, логически противоречиво (на самом деле, последняя формулировка лучше).

Возможно, мне следует добавить, что в схеме базы данных, которая точно соответствует ситуации и не вынуждает использовать null’ы, следовало бы иметь две отдельные таблицы: (a) таблицу P со столбцами PNO и CITY и предикатом «мы знаем, что деталь PNO хранится в городе CITY» и (b) таблицу P' с единственным столбцом PNO и предикатом «мы не знаем города для детали PNO».


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