Главная » SQL, Базы данных » СОПОСТАВЛЕНИЕ ВНУТРЕННИХ И ВНЕШНИХ ПРЕДИКАТОВ

0

Как было показано выше, каждая переменная отношения имеет предикат переменной отношения, а вся база данных имеет предикат базы данных.  Безусловно, все рассматриваемые предикаты являются такими, о которых "в системе имеется информация".

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

Это означает, что подобные предикаты определены формально (т.е. они фактически входят в состав определения базы данных), кроме того, их соблюдение контролируется системой. По этим причинам иногда удобно называть рассматриваемые предикаты внутренними предикатами, поскольку переменные отношения и базы данных в принципе имеют также внешние предикаты, описание которых приведено ниже8.

Первое и наиболее важное замечание состоит в том, что внутренние предикаты — это формальные конструкции, тогда как внешние предикаты — просто неформальные конструкции. Внутренние предикаты (это — не строгая формулировка) являются описанием того, что означают данные для системы; в отличие от этого, внешние предикаты описывают, что означают данные для пользователя. Безусловно, пользователи должны знать не только о внешних предикатах, но и о внутренних, однако еще раз повторим, что система должна иметь информацию о внутренних предикатах (и действительно быть способной учитывать лишь внутренние предикаты). Можно фактически неформально утверждать, что любой внутренний предикат представляет собой аппроксимацию в системе соответствующего внешнего предиката.

В дальнейшем изложении, если не указано иное, речь будет идти исключительно о переменных отношения. Итак, как уже было сказано, внешним предикатом  данной конкретной переменной отношения по сути является то, что эта переменная отношения означает для пользователя. Например, в случае  переменной отношения поставщиков S внешний предикат может формулироваться таким образом, как показано ниже.

Поставщик с указанным номером поставщика (S#) работает по контракту, имеет указанное имя (SNAME) и указанный статус (STATUS), а также находится в указанном городе (CITY). Кроме того, значение его статуса должно находиться в пределах от 1 до 100 включительно и должно быть равно 20, если городом является Лондон. К тому же никакие два различных поставщика не имеют один и тот же номер поставщика.

Но для удобства дальнейшего обсуждения заменим этот предикат более  простым,

приведенным ниже.

Поставщик S#работает по контракту, имеет имя SNAME, имеет статус STATUS и находится в городе CITY.

(Вообще говоря, все внешние предикаты являются лишь неформальными, поэтому мы имеем право формулировать их сколь угодно просто или сложно, безусловно, в разумных пределах.)

Теперь отметим, что приведенное выше утверждение действительно является предикатом, поскольку оно имеет четыре формальных параметра (S#, SNAME, STATUS и CITY), соответствующие четырем атрибутам переменной отношения9, и после подстановки вместо

8   Внешние предикаты уже рассматривались в главах 3 и 6, но тогда они именовались просто предика тами. До сих пор фактически по умолчанию термин "предикат" использовался во всей данной книге как обозначение именно внешнего предиката. Единственным важным исключением было обсуждение опе рации ограничения, приведенное в главе 7, где условие ограничения было названо предикатом; так оно и есть, но это — не внешний предикат.

9   В этом изложении термин "формальный параметр" используется немного в ином смысле, чем в разделах 9.3 и 9.4. В этих разделах формальные параметры (и соответствующие фактические параметры) обозначали целые отношения, а в данном изложении они обозначают отдельные атрибуты.

этих формальных параметров фактических параметров соответствующих типов образуется высказывание (т.е. некий логический объект, безусловно принимающий либо истинное, либо ложное значение). Поэтому каждый кортеж, присутствующий в переменной отношения S в любой указанный момент времени, может рассматриваться как обозначающий такое высказывание,  полученное путем конкретизации данного предиката. Кроме того (что очень важно!), в данный момент времени рассматриваются как истинные лишь  данные  конкретные высказывания (т.е. те высказывания, которые теперь представлены кортежами в переменной отношения S). Например, рассмотрим следующий кортеж.

{ S# S#(‘S1′), SNAME NAME(‘Smith’), STATUS 20, CITY ‘London’ }

Если этот кортеж присутствует в переменной отношения S в некоторый момент времени, то следует считать истинным фактом, что в данный момент существует поставщик, работающий по контракту, который имеет номер поставщика s1, имя Smith, статус 20 и находится в Лондоне. Вообще говоря, справедлива следующая формула:

IF   (   s   S   )   =  TRUE  THEN XPS   (   s   )   =  TRUE

В этой формуле применяются описанные ниже обозначения. ■

s — это кортеж в следующей форме:

{   S#   s#,   SNAME  sn,   STATUS   st,   CITY  sc   }

Здесь s# — значение типа S#, sn — значение типа NAME, st — значение типа

INTEGER и sc — значение типа CITY.

■     XPS — внешний предикат для поставщиков.

■     XPS(S) — это высказывание, полученное путем конкретизации предиката XPS значениями формальных параметров s#   =   s#, SNAME  =   sn, STATUS   =   st и CITY  =   sc.

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

{ S# S#(‘S6′), SNAME NAME(‘Lopez’), STATUS 30, CITY ‘Madrid’ }

В этом случае данный факт следует рассматривать таким образом, что в данный момент не существует работающего по контракту поставщика с номером поставщика S6, который имеет имя Lopez, статус 30 и находится в Мадриде. Вообще говоря, справедлива следующая формула:

IF ( s € S ) = FALSE THEN XPS ( s ) = FALSE

В более краткой форме она выглядит таким образом: IF  NOT   {   s  €   S   )   THEN NOT XPS   (   s   )

На основании изложенного выше можно вывести следующую формулу:

s e  s XPS   (  s  )

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

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии