|
Программирование >> Хронологические базы данных
значение UNK, а результатом вычисления выражения WEIGHT/О будет также величина UNK вместо обычного в данном случае сообщения об ошибке деления на нуль (конечно, в обоих выражениях предполагается, что атрибут WEIGHT содержит величину UNK). Такие аномалии будут игнорироваться до особого упоминания. Аналогичные рассуждения применимы ко всем другим скалярным типам и операторам, за исключением операторов сравнения, рассмотренного выше оператора IS UNK и рассматриваемого ниже оператора IF UNK (см. два предыдущих подраздела). Таким образом, для символьных строк выражение А В возвращает UNK, если А равен UNK либо В равен UNK, либо оба равны UNK. (Снова следует отметить существование аномальных случаев, рассмотрение которых мы здесь опустим.) Оператор IF UNK получает на входе два операнда и возвращает значение первого операнда, если это не величина UNK. Если первый операнд является величиной UNK, то оператор IF UNK возвращает значение второго операнда. Другими словами, это оператор преобразования величины UNK в некоторое значение, не равное UNK. Например, предположим, что значение UNK разрешено использовать для помещения в атрибут CITY переменной-отношения S. Рассмотрим следующее выражение. EXTEND S ADD IF UNK ( CITY, City unknown) AS SCITY В результате его вычисления будет получена переменная-отношение, в которой значение атрибута SCITY равно City unknown для каждого поставщика, город которого в переменной-отношении S определен как UNK. Следует заметить, что оператор IF UNK можно определить с помощью оператора IS UNK. Точнее говоря, выражение IF UNK ( <выражение1>, <выражение2> ), где параметры <выражение1> и <выражение2> должны иметь одинаковые типы, эквивалентно следующе\у выражению. IF IS UNK (<выражение1>) THEN <выражение2> ELSE <выражение1> END IF UNK - это не unk Очень важно понимать, что величина UNK (неопределенное значение вида значение неизвестно ) и значение ипк (логическое значение unknown) - это не одно и то же. Действительно, данное положение дел является прямым следствием того, что ипк - это значение (точнее, логическое значение), в то время как величина UNK вообще не является значением. Но давайте более точно сформулируем сказанное выше. Предположим, что X является переменной логического типа (BOOLEAN). Тогда она может принимать одно из следующих значений: true, false или ипк. Таким образом, выражение X равно ипк означает в точности то, что значение переменной X известно и равно ипк. В отличие от этого выражение X равно UNK означает, что значение переменной X неизвестно. Могут ли домены содержать величину UNK Из того факта, что UNK не является значением, прямо следует заключение, что домены (т.е. множества значений) не могут содержать величину UNK. Действительно, если бы домены могли содержать неопределенные значения какого-либо вида, проверка офаниче- Тем не менее в стандарте SQL3 они рассматриваются как эквивалентные понятия (см. приложение Б). НИИ целостности для них всегда завершалась бы с положительным результатом! Однако, поскольку домены в действительности не могут содержать величину UNK, отношения , допускаюшие присутствие величины UNK, являются чем угодно, но только не реляционными отношениями. Причем это верно как для отношений, определение которых дано в главе 5, так и для отношений, отвечающих оригинальному определению Кодда [5.1]. К обсуждению этого важного вопроса мы еще вернемся в разделе 8.6. Реляционные выражения Рассмотрим влияние величины UNK на операторы реляционной алгебры. Для простоты офаничимся пятью примитивными операторами: выборки, проекции, произведения, объединения и вычитания (воздействие величины UNK на другие операторы можно определить на основе заключений о ее воздействии на пять перечисленных операторов). Прежде всего заметим, что на операцию произведения величина UNK никакого влияния не оказывает. Затем операцию выборки следует несколько переформулировать, потребовав, чтобы возвращались только кортежи, для которых условие выборки имеет значение true, т.е. эта операция не должна включать в результат кортежи, для которых условие выборки принимает значение false или ипк. Замечание. Использование именно этой формулировки неявно предполагалось в примере с оператором MAYBE, приведенном выше, в разделе о логических выражениях. Теперь рассмотрим оператор проекции. Проецирование отношения подразумевает, кроме всего прочего, исключение кортежей-дубликатов. В двухзначной логике два кортежа считаются дубликатами тогда и только тогда, когда все соответствующие компоненты обоих кортежей равны. Однако в трехзначной логике некоторые компоненты кортежей могут содержать величину UNK, а величина UNK не равна никакой другой величине, даже самой себе. Следует ли из этого заключить, что кортеж, который содержит величину UNK, не может быть дубликатом другого кортежа и даже самого себя? Согласно Кодду [13.6] ответ на этот вопрос отрицательный: две величины UNK, даже если они не равны между собой, считаются дубликатами одна другой в целях исключения кортежей-дубликатов*. Очевидное противоречие объясняется следующим образом. ...проверка в процессе исключения кортежей-дубликатов... выполняется на более низком уровне детализации по сравнению с тестированием на наличие равенства в операциях выборки. Поэтому здесь можно применять различные правила. Автор предоставляет читателю право решать, является ли такое обоснование приемлемым. В любом случае давайте согласимся сейчас с этим обоснованием, а заодно примем следующее определение. Кортежи tl и t2 являются дубликатами один другого тогда и только тогда, когда они имеют одинаковые атрибуты и каждые два значения соответствующих атрибутов в обоих кортежах либо имеют одинаковые значения, либо оба содержат величину UNK. Работа [13.6] была первой работой Кодда, в которой рассматривалась проблема отсутствия информации, хотя описание этой проблемы не являлось основной задачей статьи (см. главу 13). Помимо всего прочего, в статье предлагаются версии возможного Q-соединения, О-выборки, операторы деления (см. упр. 18.4), а также внешние версии соединения, пересечения, вычитания, ©-соединения и естественного соединения (см. раздел 18.5). Теперь, исходя из этого расширенного определения кортежей-дубликатов, можно сохранить прежнее определение операции проекции в неизменном виде. Объединение также подразумевает исключение избыточных кортежей-дубликатов, и для этой операции также может быть применено приведенное выше определение. Таким образом, объединение отношений г1 и г2 одного и того же типа можно определить как отношение г того же типа, включающее все возможные кортежи t, такие, что кортеж t является дубликатом некоторого кортежа в отношении г1 или в отношении г2 (или в них обоих одновременно). И наконец, операция вычитания определяется аналогично (хотя она и не требует исключения кортежей-дубликатов). Иначе говоря, кортеж t попадает в результат операции г1 MINUS г2 тогда и только тогда, когда этот кортеж является дубликатом какого-либо кортежа в отношении г 1, но не является дубликатом ни одного из кортежей в отношении г2. (Для полноты картины отметим, что операция пересечения определяется аналогично: кортеж t попадает в результат операции г1 INTERSECT г2 тогда и только тогда, когда этот кортеж является дубликатом какого-либо кортежа в отношении г1 и одновременно дубликатом какого-либо кортежа в отношении г2.) Операции обновления Здесь следует упомянуть два основных момента. 1. Если атрибут А отношения R может содержать величину UNK и если вставляемый в отношение R кортеж не содержит значения для атрибута А, то система автоматически поместит величину UNK на место опущенного значения. Если атрибут А в отношении R не допускает присутствия величины UNK, то попытка создать кортеж (с помощью операции INSERT или UPDATE), в котором в атрибут А помещено значение UNK, приведет к ошибке. 2. Попытка создать в отношении R кортеж-дубликат (с помощью операции INSERT или UPDATE) обычно является ошибкой. В данном случае определение кортежей-дубликатов взято из предыдущего подраздела. Ограничения целостности Как указывалось в главе 8, офаничение целостности задается в виде логического выражения, результат вычисления которого не должен быть равен значению false. Следовательно, Офаничение целостности не будет нарушено, если результат его вычисления будет равен значению ипк (на самом деле это неявно предполагалось в наших замечаниях, приведенных выше в настоящем разделе в отношении ограничений типов). Конечно, в этом случае точнее было бы сказать, что нам ничего неизвестно о том, будет ли нарушено данное офаничение целостности. Но с известной долей приближения вполне можно утверждать, что если в предложении WHERE значение ипк рассматривается как false, то в Офаничениях целостности оно рассматривается как true. 18.3. Некоторые следствия изложенной схемы Использование подхода с трехзначной логикой, описанной в предыдущем разделе, имеет ряд логических следствий, причем некоторые из них совсем не очевидны. В данном разделе обсуждаются эти следствия и их значения.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |