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

       

Обсуждение


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

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

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

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