МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Реляционное исчисление

    Реляционное исчисление

    Содержание.

    1. Введение.

    2. Исчисление кортежей.

    2.1. Синтаксис.

    2.2. Переменные кортежей.

    2.3. Свободные и связанные переменные кортежей.

    2.4. Кванторы.

    2.5. Ещё раз о сводных и связанных переменных.

    2.6. Реляционные операции.

    2.7. Примеры

    3. Сравнительный анализ реляционного исчисления и реляционной алгебры.

    4. Вычислительные возможности.

    4.1. Примеры

    5. Исчисление доменов.

    5.1. Примеры

    6. Средства языка SQL.

    6.1. Примеры

    7. Заключение.

    8. Список литературы.

    1.Введение.

    Часть реляционной модели, которая связана с операторами

    манипулирования данными, основывается на использовании реляционной алгебры.

    Однако с тем же основанием можно сказать, что она построена на базе

    реляционного исчисления. Другими словами, реляционная алгебра и реляционное

    исчисление представляют собой два альтернативных подхода. Принципиальное

    различие между ними следующее. Реляционная алгебра в явном виде

    представляет набор операций (соединение, объединение, проекция и т.д.),

    которые можно использовать, чтобы сообщить системе, как в базе данных из

    определённых отношений построить некоторое требуемое отношение, а

    реляционное исчисление просто представляет систему обозначений для

    определения требуемого отношения в терминах данных отношений.

    Например, рассмотрим три отношения:

    > S-поставщики, каждый поставщик имеет уникальный номер (S#); имя (SNAME);

    значение рейтинга или статуса (STATUS); место расположения (CITY).

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

    > P-детали, у каждого вида детали есть уникальный номер (P#); название

    детали (PNAME); цвет (COLOR); вес (WEIGHT); город, где хранится этот вид

    деталей (CITY). Каждый отдельный вид детали имеет только один цвет и

    хранится на складе только в одном городе.

    > SP-поставки, служит для организации логической связи двух других

    отношений. Например, первая строка отношения SP связывает поставщика с

    номером ‘S1’ из отношения S с соответствующей деталью, имеющей номер ‘P1’

    в отношении P, т.е. представляет факт поставки деталей типа ‘P1’

    поставщиком с номером ‘S1’ (а также указывает количество деталей-300

    штук). Таким образом, каждая поставка характеризуется номером поставщика

    (S#), номером детали (P#) и количеством (QTY). Предполагается, что в одно

    и то же время может быть не более одной поставки для одного поставщика и

    одной детали.

    |S#|SNAME |STATUS |CITY |

    |S1|Smith |20 |London|

    |S2|Jones |10 |Paris |

    |S3|Black |30 |Paris |

    |S4|Clark |20 |London|

    |S5|Adams |30 |Athens|

    |S#|P#|QTY |

    |S1|P1|300 |

    |S1|P2|200 |

    |S1|P3|400 |

    |S1|P4|200 |

    |S1|P5|100 |

    |S1|P6|100 |

    |S2|P1|300 |

    |S2|P2|400 |

    |S3|P2|200 |

    |S4|P2|200 |

    |S4|P4|300 |

    |S4|P5|400 |

    |P#|PNAME |COLOR |WEIGHT |CITY |

    |P1|Nut |Red |12.0 |London|

    |P2|Bolt |Green |17.0 |Paris |

    |P3|Screw |Blue |17.0 |Rome |

    |P4|Screw |Red |14.0 |London|

    |P5|Cam |Blue |12.0 |Paris |

    |P6|Cog |Red |19.0 |London|

    Рассмотрим запрос «Выбрать номера поставщиков и названия городов,

    в которых находятся поставщики детали с номером ‘P2’». Алгебраическая

    версия этого запроса выглядит приблизительно так:

    . Сначала выполнить соединение отношения поставщиков S и отношения поставок

    SP по атрибуту S#.

    . Далее выбрать из результата этого соединения кортежи с номером детали

    ‘P2’.

    . И, наконец, выполнить для результата этой выборки операцию проекции по

    атрибутам S# и CITY.

    Этот же запрос в терминах реляционного исчисления формулируется

    приблизительно так:

    . Получить атрибуты S# и CITY для таких поставщиков, для которых в

    отношении SP существует запись о поставке с тем же значением атрибута P#,

    равным ‘P2’.

    В этой формулировке пользователь лишь указывает определённые

    характеристики требуемого результата, оставляя системе решать, что именно и

    в какой последовательности соединять, проецировать и т.д., чтобы получить

    необходимый результат.

    Итак, можно сказать, что, по крайней мере, внешне формулировка

    запроса в терминах реляционного исчисления носит описательный характер, а в

    терминах реляционной алгебры - предписывающий. В реляционном исчислении

    просто описывается, в чём заключается проблема, тогда как реляционной

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

    неформально, алгебра имеет процедурный характер (пусть на высоком уровне,

    но всё же процедурный, поскольку задаёт необходимые для выполнения

    процедуры), а исчисление – непроцедурный.

    Подчеркнём, однако, что упомянутые отличия существуют только

    внешне. На самом деле реляционная алгебра и реляционное исчисление

    логически эквивалентны. Каждому выражению в алгебре соответствует

    эквивалентное выражение в исчислении, и точно так каждому выражению в

    исчислении соответствует эквивалентное выражение в алгебре. Это означает,

    что между ними существует взаимнооднозначное соответствие, а различия

    связаны лишь с разными стилями выражения; исчисление ближе к естественному

    языку, а алгебра - к языку программирования; Но повторим еще раз, эти

    различия только кажущиеся, а не реальные. В частности, ни один из подходов

    нельзя назвать « более

    непроцедурным « по сравнению с другим.

    Реляционное исчисление основано на разделе математической логики,

    который называется исчислением предикатов. Идея использования исчисления

    предикатов в качестве основы языка баз данных впервые была высказана в

    статье Кунса (Kuhns). Понятие реляционного исчисления, т.е.

    специального применения исчисления предикатов, в реляционных базах данных,

    впервые было предложено Коддом в 1972, а позже Кодд представил язык,

    основанный непосредственно на реляционном исчислении и названный «

    подъязык данных ALPHA». Сам язык ALPHA никогда не был реализован, однако

    язык QUEL, который действительно был реализован и некоторое время

    серьезно конкурировал с языком SQL , очень походил на язык ALPHA ,

    оказавший заметное влияние на построение языка QUEL .

    Основным средством реляционного исчисления является понятие

    переменной кортежа (также называемой переменной области значений). Коротко

    говоря, переменная кортежа – это переменная, «изменяющаяся на» некотором

    заданном отношении, т.е. переменная, допустимыми значениями которой

    являются кортежи заданного отношения. Другими словами, если переменная

    кортежа V изменяется в пределах отношения r , то в любой заданный момент

    переменная V представляет некоторый кортеж t отношения r. Например,

    запрос «Получить номера поставщиков из числа тех, которые находятся в

    Лондоне» может быть выражен на языке QUEL так:

    RANGE OF SX IS S;

    RETRIEVE (SX.S#) WHERE SX.CITY = “London”;

    Переменной кортежа здесь является переменная SX, которая изменяется

    на отношении, представляющем собой текущее значение переменной – отношения

    S (оператор RANGE – оператор определения этой переменной). Оператор

    RETRIEVE означает следующее: «Для каждого возможного значения переменной

    SX выбирать компонент S# этого значения тогда и только тогда, когда его

    компонент CITY имеет значение ‘London’».

    В связи с тем, что реляционное исчисление основано на переменных

    кортежа, его первоначальную версию (для отличия от исчисления доменов, речь

    о котором пойдет ниже) называют также исчислением кортежей.

    Замечание. Для удобства примем следующее соглашение: далее в этой

    книге термины исчисление и реляционное исчисление, приведенные без

    уточнения «кортежей» или «доменов», будут означать именно исчисление

    кортежей (там, где это играет какую-то роль).

    В статье Лакруа (Lacroix) и Пиротте (Pirotte) предлагается

    альтернативная версия исчисления, называемая исчислением доменов, в

    которой переменные кортежа изменяются на доменах, т.е. являются

    переменными, изменяемыми на доменах, а не на отношениях. В литературе

    предлагается множество языков исчисления доменов. Наиболее известный из

    них – пожалуй, Query-By-Example, или QBE (в действительности он является

    смешанным, так как в языке QBE присутствуют и элементы исчисления

    кортежей). Существует несколько коммерческих реализаций этого языка.

    2.Исчисление кортежей.

    Сначала введем для реляционного исчисления конкретный синтаксис,

    взяв за образец (хотя умышленно не совсем точно) версию исчисления языка

    Titorial D, а затем перейдём к обсуждению семантики. В следующих ниже

    подразделах обсуждаются синтаксис и семантика.

    2.1.Синтаксис.

    Замечание. Многие из приведенных здесь синтаксических правил не будут

    поняты вам до тех пор, пока вы не изучите семантический материал,

    следующий далее. Однако мы все же решили собрать все правила вместе для

    удобства ссылок.

    Начнем с повторения синтаксиса параметра .

    < реляционное выражение>

    :: = RELATION {}

    | < имя переменной-отношения>

    | < реляционная операция>

    | < реляционное выражение>

    Иными словами, синтаксис параметра

    остается прежним, однако из наиболее важных его подпараметров, <

    реляционная операция >, теперь будет иметь совершенно иное определение.

    :: = RANGEVAR

    RANGES OVER ;

    Параметр может использоваться как

    , однако, лишь в определенном контексте, а именно:

    . перед точкой и последующим уточнением в параметре < ссылка на атрибут

    кортежа >;

    . сразу после квантора в параметре < логическое выражение с квантором>;

    . как операнд в параметре < логическое выражение >;

    . как параметр < прототип кортежа > или как (операнд) подпараметр <

    выражение> в параметре < прототип кортежа >.

    < ссылка на атрибут кортежа >

    :: = .[ AS ]

    Параметр может использоваться как

    параметр < выражение>, но только в определенном контексте, а именно:

    . как операнд параметра ;

    . как параметр или как (операнд) подпараметр

    в параметре .

    < логическое выражение >

    :: = … все обычные возможности вместе с:

    | < логическое выражение с

    квантором>

    Ссылки на переменные кортежей в значении параметра < логическое

    выражение > могут быть свободными в пределах этого параметра тогда и

    только тогда, когда выполнено два следующих условия.

    . Параметр < логическое выражение> расположен непосредственно после

    параметра < реляционная операция> (т.е. параметр < логическое выражение >

    следует сразу за ключевым словом WHERE.).

    . Ссылка (обязательно свободная) именно на эту переменную кортежа

    непосредственно присутствуют в значении параметра ,

    непосредственно содержащегося в том же выражении (т.е. параметр располагается непосредственно

    перед ключевым словом WHERE).

    Замечание по терминологии. В контексте реляционного исчисления (в

    версии исчисления доменов или исчисления кортежей) логические выражения

    часто называют правильно построенными формулами (well-formed formulas –

    WFF, что произносится как « вэфф»). Далее мы также будем часто пользоваться

    этой терминологией.

    < логическое выражение с квантором>

    :: = EXISTS < имя переменной кортежа >(<

    логическое выражение >)

    | FORALL (<

    логическое выражение >)

    < реляционная операция >

    :: = < прототип кортежа > [ WHERE < логическое

    выражение >]

    В реляционной алгебре параметр < реляционная операция >

    представлял собой одну из форм параметра , однако

    здесь он определяется иначе. Другие формы параметра < реляционное выражение

    > (в основном, имена переменных – отношений и обращение к операторам

    выбора) допустимы, как и ранее.

    < прототип кортежа >

    :: = < выражение кортежа>

    Все ссылки на переменные кортежа, помещенные непосредственно в

    значение параметра , должны быть свободными в пределах

    данного параметра < прототип кортежа>.

    Замечание. Прототип кортежа – термин удачный, но не стандартный.

    2.2. Переменные кортежей.

    Приведём несколько примеров определения переменных кортежей

    (выраженных в контексте базы данных поставщиков и деталей).

    RANGEVAR SX RANGES OVER S;

    RANGEVAR SY RANGES OVER S;

    RANGEVAR SPX RANGES OVER SP;

    RANGEVAR SPY RANGES OVER SP;

    RANGEVAR PX RANGES OVER P;

    RANGEVAR SU RANGES OVER

    (SX WHERE SX.CITY=’London’)

    (SX WHERE EXISTS SPX (SPX.S# = SX.S# AND

    SPX.P# SPX = P# (‘P1’) ) );

    Переменная кортежа SU из последнего примера определена на объединении

    множества кортежей поставщиков детали с номером ‘P1’. Обратите внимание,

    что в определении переменной кортежа SU используются переменные кортежей SX

    и SPX. Также обратите внимание на то, что в подобных определениях

    переменных, построенных на объединении отношений, объединяемые отношения,

    безусловно, должны быть совместимы по типу.

    Замечание. Переменные кортежей не являются переменными в обычном

    смысле (как в языках программирования); они являются переменными в

    логическом смысле.

    2.3. Свободные и связанные переменные кортежей.

    Каждая ссылка на переменную кортежа (в некотором контексте, в

    частности в формуле WFF) является или свободной, или связанной. Сначала

    поясним это утверждение в чисто синтаксических терминах, а затем перейдем к

    обсуждению его смысла.

    Пусть V – переменная кортежа. Тогда имеем следующее.

    . Ссылки на переменную V в формулах WFF типа NOT p свободны или связаны в

    пределах этой формулы в зависимости от того, свободны ли они в формуле

    p.Ссылки на переменную V в формулах WFF типа (p AND q) и (p OR q) свободны

    или связаны в зависимости от того, свободны ли они в формулах p и q.

    . Ссылки на переменную V, которые свободны в формуле WFF p, связаны в

    формулах WFF типа EXISTS V(p) и FORALL V(p). Другие ссылки на переменные

    кортежей в формуле p будут свободны или связаны в формулах WFF типа EXISTS

    V(p) и FORALL V(p) в соответствии с тем, свободны ли они в формуле p.

    Для полноты необходимо добавить следующие замечания.

    . Единственная ссылка на переменную V в значении параметра является свободной в пределах этого параметра .

    . Единственная ссылка на переменную V в значении параметра V.A является свободной в пределах этого параметра .

    . Если ссылка на переменную V является свободной в некотором выражении exp,

    то эта ссылка будет также свободной в любом выражении exp’,

    непосредственно содержащем выражение exp как подвыражение, если только в

    выражении exp’ не вводится квантор, связывающий переменную V.

    Приведём несколько примеров формул WFF, содержащих переменные

    кортежей.

    . Простые сравнения

    SX.S# = S# (‘S1’)

    SX.S# = SPX.S#

    SPX.P# ? PX.P#

    Здесь все ссылки на переменные SX, PX и SPX являются свободными.

    . Логические выражения из простых сравнений

    PX.WEIGHT < WEIGHT (15.5) OR PX.CITY = ‘Rome’

    NOT (SX.CITY = ‘London’)

    SX.S# = SPX.S# AND SPX.P# ? PX.P#

    PX.COLOR = COLOR (‘Red’) OR PX.CITY = ‘London’

    Здесь также все ссылки на переменные SX,PX и SPX являются свободными.

    . Формулы WFF с кванторами

    EXISTS SPX (SPX.S# = SX.S# AND SPX.P# = P# (‘P2’) )

    FORALL PX (PX.COLOR = COLOR (‘Red’) )

    В этих примерах ссылки на переменные SPX и PX являются связанными, а

    ссылка на переменную SX является свободной. Подробнее данные примеры

    объясняются ниже.

    2.4. Кванторы.

    Существуют два квантора: EXISTS и FORALL. Квантор EXISTS является

    квантором существования, а FORALL- квантором всеобщности. По сути, если

    выражение p - формула WFF, в которой переменная V свободна, то выражения

    EXISTS V (p)

    и

    FORALL V (p)

    также являются допустимыми формулами WFF, но переменная V в них обеих

    будет связанной. Первая формула означает следующее: «Существует по крайней

    мере одно значение переменной V, такое, что вычисление формулы p даёт для

    него значение истина». Вторая формула означает следующее: «Для всех

    значений переменной V вычисление формулы p даёт значение истина».

    Предположим, например, что переменная V изменяется на множестве «Члены

    сената США в 1999 году», и предположим также, что выражение p - следующая

    формула WFF: «V - женщина» (разумеется, здесь не пытаемся использовать

    формальный синтаксис). Тогда выражение EXISTS V(p) будет допустимой

    формулой WFF, имеющей значение истина (true); выражение FORALL V(p) также

    будет допустимой формулой WFF, но вычисление его значения будет давать

    значение ложь (false).

    Теперь рассмотрим квантор существования EXISTS более внимательно. Ещё

    раз обратимся к примеру из предыдущего раздела.

    EXISTS SPX (SPX.S# = SX.S# AND SPX.P# = P# (‘P2’) )

    Из приведённых ранее рассуждений следует, что эта формула WFF может

    быть прочитана следующим образом.

    В текущем значении отношения SP существует кортеж (скажем, SPX), такой,

    для которого значение атрибута S# в этом кортеже равно значению атрибута

    SX.S# (какое бы оно ни было), а значение атрибута P# в кортеже SPX равно

    ‘P2’.

    Каждая ссылка на переменную SPX в этом примере является связанной.

    Единственная ссылка на переменную SX свободна.

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.