Введение в системы БД (542480), страница 184
Текст из файла (страница 184)
Однако в такой ситуации внешнее вычитание вырождается до обычного вычитания. ° Основными проблемами, характерными для операции внешнего объединения, являются проблемы интерпретации; причем они даже сложнее проблем интерпретации, имеющих место в случае операции внешнего соединения. (См. [18.2] для более детального изучения.) В Данное объяснение относится к исходным опредеяениям этих операций (?З.бг. В работе /5.2З' они в некоторой степени изменены, и читателю предлагается самостоятееьно рассмотреть эти подробности. 710 Часть ['. Дополнительные аспекты 18.6.
Специальные значения Как показано выше, введение неопределенных значений (ИОЬЬ) приводит к разрушению реляционной модели, которая великолепно обходилась без них в течение десяти лет с момента ее создания 1969 году !5.1] и вплоть до введения этих значений в ! 979 году (! 3.1]. Теперь предположим, как в разделе 18.4, что понятие "неопределенных значений" в контексте представления отсутствующей информации заменено понятием специальных значений.
Следует отметить, что в реальном мире мы обычно пользуемся именно специальными значениями. Например, специальное значение "Г используется для обозначения количества рабочих часов для некоторого сотрудника, если его фактическое значение по какой-либо причине неизвестноз. Таким образом, общая идея заключается в том, чтобы просто применять подходящее специальное значение, отличное от обычных значений атрибута, во всех тех случаях, когда обычное значение не может использоваться. Обратите внимание, что это специальное значение обязательно должно принадлежать соответствующему домену.
Поэтому в примере с данными о количестве рабочих часов типом атрибута НООНЯ ИОНКЕО является не просто целое число, а целые числа плюс специальное значение. Безусловно, следует признать, что изложенная выше схема не очень элегантна, ио она обладает явным преимуществом, поскольку не подрывает логических основ реляционной модели. В остальной части этой книги мы будем просто игнорировать возможность поддержки неопределенных значений (ИОЬЬ) за исключением некоторых случаев, специфических для контекста языка БОЬ, когда те или иные ссылки на неопределенные значения (ИОЬЬ) будут неизбежны.
Более подробно эти вопросы рассматриваются в (18.! 2]. 18.7. Поддержка неопределенных значений в языке Я9Е Поддержка неопределенных значений (ИОЬЬ) и трехзначной логики в языке БО отражает весь широкий спектр подходов, описанных в разделах 18.1 — 18.5. Так, например, когда в языке БОЬ условие ИНЕНЕ применяется к таблице Т, зто исключает из рассмотрения все строки таблицы Т, для которых указанное в предложении ИНЕНЕ условие принимает значение7агле или ип7с (т.е. не ггие). Аналогично, когда к результату выполнения некоторой операции группирования, представленному таблицей О, применяется оператор НйЧ1ИО, из дальнейшего рассмотрения исключаются все группы кортежей, для которых указанное в предложении НйЧ180 условие принимает значение /а(зе или ип7г (т.е.
не ггие). Из этого следует, что мы просто обратили внимание читателя на некоторые возможности, специфические для языка БОЬ и не являющиеся частью концепции трехзначной логики, которая обсуждалась в предыдущем разделе. Заиечапие. Очень сложно оценить все последствия поддержки неопределенных значений (ИОЬЬ) в языке БОЬ. Дополнительную информацию можно найти в официальных документах стандарта БОЬ (4.22] и в учебном издании [4.19]. З Обратите впал|ание, чп1о для этого не используется яеопределепяое зиачеиие (ИУЩ. В реал ьпо ч лепре никакого неопределенного значения вообще пе существует.
711 Глава 18. Отсутстб)гюи(ая информацил Определение данных Как описано в разделе 5.5 главы 5, для столбцов таблиц базы данных обычно указывается некоторое значение, принимаемое па умолчанию; оно часто определяется (явно или неявно), как величина НОЬЬ.
Более того, столбцы в таблицах базы данных всегда разрешают использование неопределенных значений, если условие запрета их использования не будет указано явно (напрнмер, в виде фразы НОТ НОЬЬ). Представление неопределенных значений зависит от реализации, но оно должно быть таким, чтобы система смогла отличить это значение от лругих, которые неопределенными не являются (даже несмотря на то, что операция сравнения ИОЬЬ м х не дает в результате г«ие). Табличные выражения Напомним замечание из главы 7 (раздел 7.7) о том, что явная подлержка операции 1018 была введена только в версии Я()Ь/92 стандарта языка ЯОЬ. Более того, если перед ключевым словом 3018 указан один из определителей ЬЕГТ, Н16НТ или ГОЬЬ (с необязательной добавкой ООТЕН в каждом случае), рассматриваемое соединение является внешним. Вот несколько примеров.
Б ЬЕГТ 101И ЯР ОМ Я.Б[) = ЯР.Я() Я ЬЕГТ 101Н ЯР ОЯ1ИО ( Б)) ) Б ЬЕГТ НАТОРАЬ 101Ы БР Три приведенных выражения эквивалентны, но первое приводит к созданию таблицы с двумя идентичными столбцами номера поставщика, а второе и третье — таблицы с одним столбцом номера поставщика. Язык ЯОЬ также полдерживает аппроксимацию внешнего соединения, которую называют объединяюи(им соединением. Однако подробное обсуждение этого вопроса выходит за рамки данной главы.
Условные выражения Как отмечалось в главе 8, в языке ЯОЬ условные выражения являются аналогом того, что во всех остальных случаях называется логическими (или булевыми) выражениями (более подробно они рассматриваются в приложении А). Неудивительно, что условные выражения являются той частью языка Я >Ь, которая в наибольшей степени связана с неопределенными значениями и трехзначной логикой.
Ниже предлагается несколько замечаний по этому повалу. ° Проверка наличия неапредвленнага значения. В языке ЯОЬ предусмотрены два специальных оператора сравнения, 18 НОЬЬ и 1Я НОТ ИОЬЬ, предназначенных для проверки наличия или отсутствия неопределенных значений. Синтаксис использования этих операторов показан ниже. <конструктор строкИ> 1Я [ НОТ ) НОЬЬ (Параметр <колструктор строке> подробно рассматривается в приложении А.) Невнимательные пользователи могут попасть здесь в ловушку, поскольку выражения г 18 НОТ НОЬЬ и КОТ (г 1Я МОЬЬ) не являются эквивалентными! Более подробно эта особенность рассматривается в [4.
) 9). 712 Часть )«. Дополнительные аспекты ° Проверка наличия значений згце, за!ве и цп)цзоччп. Если р — это заключенное в скобки условное выражение, то следующие операторы также являются условными выражениями. р 1Я [ ИОТ ) ТВОЕ р 1Я [ ИОТ ] РАЬЯЕ р 1Я [ ИОТ ] ОИКИОНИ Значения этих выражений показаны в приведенной ниже таблице истинности. Обратите внимание, что выражения р 18 ИОТ ТИНЕ и ИОТ р не являются эквивалентными. Заиечание. Выражение р 1Я ОИЕИОИИ соответствует описанному выше оператору МАРНЕ(р). ° Условие МАТОМ. Синтаксис параметра <условяе яабсй> (см, приложение А) содержит ключевые слова РАНТ1АЬ и РОЬЬ (их использование в приложении А не рассматривается). Эти опции могут повлиять на результат, если в данных присутствуют неопределенные значения.
<конструктор строки> НАтсн [ ОМ1оое ] [ РАЕТ1АЬ ] РОЬЬ ) ( <табличное выражение>) Существует шесть возможных случаев, зависящих от того, указана ли опция ОИ1ООЕ, а также указана ли опция РАМТ1АЬ либо РОЬЬ. Подробное обсуждение этого вопроса достаточно сложное и выходит за рамки настоящей главы. Дополнительную информацию можно найти в [4.19].
° Уставив ЕХ1БТБ. См. комментарий к [! 8.6]. Скалярные выражения ° Литеразы. Ключевое слово МОЬЬ может быть использовано как способ литерального представления неопределенных значений (например, в операторе 1ИЯЕНТ). Тем не менее следует заметить, что данное ключевое слово может указываться не во всех контекстах, в которых допускается использование литералов. Согласно стандарту "не существует значения параметра <лнтерал> для представления неопределенных значений, хотя в некоторых случаях для указания необходимости использования неопределенного значения может употребляться ключевое слово ИОЬЬ" [4.22]. Поэтому, например, ключевое слово ИОЬЬ нельзя явно использовать как операнд в простых операциях сравнения, т.е. вы- ражениеМНЕНЕ Х = ИНЬЬ некорректно.
713 Глава 18. Отсутствующая информация ° Функция СОАБЕБСЕ. Это БОЬ-аналог функции 1Р ОИК (см. раздел 18.2), определенной выше в данной главе. ° Обоби1ающие функции. Обобщающие функции языка Б()Ь, например ЯОИ, АЧО и т.п., не ведут себя в соответствии с правилами для скалярных операторов, изложенными выше, в разделе 18.2. Вместо этого они просто игнорируют любое неопределенное значение в своих аргументах (исключеиие составляет функция СОНЕТ('), при вычислении которой неопределенное значение трактуется, как обычное значение). Кроме того, если этим функциям в качестве аргумента передается пустое множество, они возвращают неопределенное значение. Исключение и здесь составляет функция СОНЕТ, которая в данном случае возвращает значение "нуль'.
(Сравните с трактовкой обработки пустых множеств, изложенной в главе 7.) ° Скитярные подчиненные запросы. Если скалярное выражение фактически является заключенным в скобки табличным выражением, например (ЯЕЬЕСТ Я.С1ТУ ГНОИ Б ННЕНЕ Б.Б))='81'), то вполне естественно, что результатом вычисления подобного табличного выражения должна быть таблица, содержащая единственный столбец и единственную строку. Тогда значением скалярного выражения в целом будет то единственное скалярное значение, которое содержится в результирующей таблице.
Но если результатом вычисления табличного выражения является таблица, не содержащая ни одной строки, в языке Б()Ь значение этого скалярного выражения определяется, как неопределенное (ИОЬЬ). Ключи Ниже кратко перечислены основные особенности использования неопределенных значений в ключевых атрибутах, характерные для языка Б1.1Ь. ° Потенциальные ключи. Пусть С вЂ” это атрибут, являющийся частью потенциального ключа К некоторой базовой таблицы.
Если ключ К является первичным, то язык БОЬ запрещает использование неопределенных значений в столбце С (обеспечивая таким образом соблюдение ограничения целостности сущности). Тем не менее, если ключ К не является первичным, язык Б( Н- разрешает присутствие в столбце С любого количества неопределенных значений (конечно, вместе с любым количеством значений, не являющихся неопределенными).
° Внешние ключи. Правила, определяющие смысл соответствия значения заданного внешнего ключа некоторому значению соответствующего потенциального ключа (при наличии в них неопределенных значений), очень сложны. В данном случае их подробное обсуждение опускается. Заметим только, что они, в основном, совпадают с правилами, ус гановленными для условий ИАТСН (см, выше). Неопределенные значения также оказывают влияние на выполнение действий по установленным правилам поддержки ссылочной целостности (САБСАОЕ, ЯЕТ ИОЬЬ и т.д.), заданным в предложениях ОИ ОЕЬЕТЕ и ОН ОРОАТЕ.