![]() |
|
|
Реферат: Реляционное исчислениеEXISTS V (V.A>1 OR V.C = 4) : true Теперь рассмотрим квантор общности FORALL, для чего вернёмся к соответствующему примеру из предыдущего раздела. FORALL PX (PX.COLOR = COLOR (‘Red’) ) Эта формула WFF может быть прочитана следующим образом. В текущем значении отношения P для всех кортежей (скажем, PX) значение их атрибута COLOR равно ‘Red’. Обе ссылки на переменную PX в этом примере связаны. Подобно тому, как квантор EXISTS был определён как повторение операции OR, квантор существования FORALL определяется как повторяющаяся операция AND (И). Другими словами, если обозначения r, V и p(V) имеют тот же смысл, что и в приведённом выше определении квантора EXISTS, то формула WFF вида FORALL V (p (V) ) равносильна следующей формуле WFF. true AND p (t1) AND … AND p (tm) В частности, обратите внимание, что если отношение r пустое, то результатом вычисления данного выражения будет значение истина. В качестве примера рассмотрим отношение R, содержащее те же кортежи, что и в предыдущем примере. Тогда приведённые ниже выражения будут иметь указанные значения. FORALL V (V.A>1) : false FORALL V (V.B>1) : true FORALL V (V.A = 1 and V.C>2) : true Замечание. Квантор FORALL включён в реляционное исчисление просто для удобства. Он не является необходимым, так как приведённое ниже тождество показывает, что любая формула WFF, использующая квантор FORALL, всегда может быть заменена эквивалентной формулой WFF, использующей квантор EXISTS. FORALL V (p) ≡ NOT EXISTS V (NOT p) (Проще говоря, выражение «все значения V, удовлетворяющие формуле p» ─ это то же самое, что и выражение «нет таких значений V, которые бы не удовлетворяли формуле p».) Например, утверждение (истинное) Для любого целого x существует целое y, такое, что y>x равносильно утверждению Не существует целого x, такого, что не существует целого y, такого, что y>x. (Иначе говоря, не существует наибольшего целого числа.) Но обычно легче выразить подобное утверждение в терминах квантора FORALL, чем в терминах квантора EXISTS, с использованием двойного отрицания. Другими словами, на практике гораздо удобнее использовать оба квантора. 2.5. Ещё раз о свободных и связанных переменных. Предположим, что переменная x изменяется на множестве всех целых чисел, и рассмотрим следующую формулу WFF. EXISTS x (x>3) Связанная переменная x в этой формуле WFF является своего рода фиктивной переменной. Она служит лишь для связи внутренних параметров выражения с внешним квантором. В формуле WFF просто утверждается, что существует целое число (скажем, x), которое больше 3. Следовательно, значение этой формулы WFF осталось бы полностью неизменным, если бы все экземпляры x были заменены экземплярами некоторой другой переменной (скажем, y). Другими словами, формула WFF EXISTS y (y>3) семантически идентична формуле, приведённой ранее. Теперь рассмотрим другую формулу WFF. EXISTS x (x>3) AND x<0 Здесь имеется три ссылки на переменную x, обозначающие две различные переменные. Первые две ссылки связаны и могли быть заменены ссылкой на другую переменную y без изменения общего смысла формулы. Третья ссылка на переменную x не может быть безболезненно изменена. Таким образом, из двух приведённых ниже формул WFF первая эквивалентна рассмотренной формуле, а вторая ─ нет. EXISTS y (y>3) AND x<0 EXISTS y (y>3) AND y<0 Кроме того, обратите внимание, что окончательное значение первоначальной формулы WFF не может быть определено, если неизвестно значение свободной переменной x. В отличие от неё формула WFF, в которой все ссылки на переменные являются связанными, всегда однозначно имеет значение либо истина, либо ложь. Дополнительная терминология. Формула WFF, в которой все переменные связаны, называется закрытой формулой WFF (фактически она является высказыванием). Открытая формула WFF ─ это формула, которая не является закрытой, т.е. такая формула, которая содержит по крайней мере одну ссылку на свободную переменную.
2.6. Реляционные операции.
Параметр <реляционная операция> не совсем уместен в контексте исчисления ─ более подходящим вариантом был бы параметр <реляционное определение>. Однако будем использовать именно первый вариант, и в качестве напоминания приводим следующий синтаксис. <реляционная операция> : : = <прототип кортежа> [ WHERE <логическое выражение> ] <прототип кортежа> : : = <выражение кортежа> Напоминаем также, что следующие синтаксические правила теперь несколько упрощены. - Во-первых, все ссылки на переменные кортежей в параметре <прототип кортежа> должны быть свободными в пределах значения этого параметра. - Во-вторых, ссылка на переменную кортежа в предложении WHERE может быть свободной только в случае, если на эту же переменную (обязательно свободная) присутствует в соответствующем значении параметра <прототип кортежа>. Например, следующее выражение является допустимым значением параметра <реляционная операция> («Получить номера поставщиков, находящихся в Лондоне»). SX.S# WHERE SX.CITY = ‘London’ Здесь ссылка на переменную SX в прототипе кортежа является свободной. Ссылка на переменную SX в предложении WHERE также является свободной, поскольку ссылка на ту же переменную (обязательно свободную) имеется и в значении параметра <прототип кортежа> этого выражения. Замечание. Далее термин «прототип кортежа» будет употребляться без скобок. Приведём другой пример («Получить имена поставщиков детали с номером ‘P2’») SX.SNAME WHERE EXISTS SPX (SPX.S# SX.S# AND SPX.P# = P# (‘P2’) ) Здесь все ссылки на переменную SX являются свободными, тогда как все ссылки на переменную SPX (в предложении WHERE) являются связанными, как и должно быть, поскольку на них нет ссылок в прототипе кортежа. Интуитивно понятно, что результатом выполнения операции, заданной параметром <реляционная операция>, будет отношение, содержащее все возможные значения кортежей, определяемых параметром <прототип кортежа>, для которых результат вычисления логического выражения, заданного в предложении WHERE параметром <логическое выражение>, принимает значение истина. (Если предложение WHERE опущено, это эквивалентно указанию выражения WHERE true.) Сделаем некоторые уточнения. - Прежде всего, прототип кортежа ─ это список разделённых запятыми элементов (возможно, заключённый в скобки), каждый элемент которого является либо ссылкой на атрибут кортежа (который может содержать предложение AS для введения нового имени атрибута), либо просто именем переменной кортежа. Тем не менее отметим следующее. а) В этом контексте имя переменной кортежа чаще всего является сокращённым обозначением списка разделённых запятыми ссылок на атрибуты, по одной для каждого атрибута отношения, на котором задана данная переменная кортежа. б) Ссылка на атрибут кортежа без предложения AS, в принципе, является сокращённым обозначением ссылки с предложением AS, в которой новое имя атрибута совпадает со старым. Следовательно, без потери общности прототип кортежа можно рассматривать как список, состоящий из разделённых запятыми ссылок на атрибуты в виде Vi.Ai AS Bj. Обратите внимание, что ссылки Vi- и Aj-е могут повторяться, тогда как ссылки Bj-е должны быть разными. - Пусть V1, V2, … ,Vm будут различными переменными кортежей, упоминаемыми в прототипе кортежа, и пусть эти переменные будут определены на отношениях r1, r2, … ,rm соответственно. Примем, что r1’, r2’, … ,rm’ ─ это новые отношения, полученные после переименования атрибутов в предложении AS, и пусть r’ ─ это декартово произведение отношений r1’, r2’, … , rm’. - Пусть отношение r ─ это выборка из отношения r’, удовлетворяющая формуле WFF в предложении WHERE. Замечание. Здесь предполагается, что на предыдущем шаге были также переименованы атрибуты, упоминающиеся в предложении WHERE; в противном случае функция WFF в предложении WHERE может не иметь смысла. - Конечное значение реляционной операции, заданной параметром <реляционное выражение>, определяется как проекция отношения r по всем заданным атрибутам Bj. 2.7. Примеры. Представляем несколько примеров использования реляционного исчисления кортежей для формулирования запросов. Ø Определить имена поставщиков детали с номером ‘P2’ SX WHERE EXISTS SPX (SPX.S# = SX.S# AND SPX.P# = P# (‘P2’) ) Обратите внимание на использование имени переменной кортежа в прототипе кортежа. Этот пример является сокращённой записью следующего выражения. (SX.S#, SX.NAME, SX.STATUS, SX.CITY) WHERE EXISTS SPX (SPX.S# = SX.S# AND SPX.P# = P# (‘P2’) ) Этот же пример решённый средствами реляционной алгебры выглядит так ( (SP JOIN S) WHERE P# =’P2’) {SNAME} Ø Определить имена поставщиков по крайней мере одной красной детали SX.SNAME WHERE EXISTS SPX (SX.S# = SPX.S# AND EXISTS PX (PX.P# = SPX.P# AND PX.COLOR = COLOR (‘Red’) ) ) Этот же пример решённый средствами реляционной алгебры выглядит так ( ( ( P WHERE COLOR = COLOR (‘Red’) ) JOIN SP) {S#} JOIN S) {SNAME} 3. Сравнительный анализ реляционного исчисления и реляционной алгебры. В начале утверждалось, что реляционная алгебра и реляционное исчисление в своей основе эквивалентны. Осудим это утверждение более подробно. Вначале Кодд показал, что алгебра по крайней мере мощнее исчисления. Он сделал это, придумав алгоритм, называемый алгоритмом редукции Кодда, с помощью которого любое выражение исчисления можно преобразовать в семантически эквивалентное выражение алгебры. Мы не станем приводить здесь этот алгоритм полностью, а ограничимся довольно сложным примером, иллюстрирующим в общих чертах, как он функционирует.
S-детали, P- поставщики, J- проекты, SPJ- поставки. Рассмотрим теперь следующий запрос: «Получить имена поставщиков и названия городов, в которых находятся поставщики деталей по крайней мере для одного проекта в Афинах, поставляющих по крайней мере 50 штук каждой детали». Выражение реляционного исчисления для этого запроса следующее. (SX.SNAME, SX.CITY) WHERE EXISTS JX FORALL PX EXISTS SPJX ( JX.CITY = ‘Athens’ AND JX.J# = SPJX.J# AND PX.P# = SPJX.P# AND SX.S# = SPJX.S# AND SPJX.QTY ≥ QTY (50) ) Здесь SX, PX, JX и SPJX ─ переменные кортежей, получающие свои значения из отношений S, P, J и SPJ соответственно. Теперь покажем, как можно вычислить это выражение, чтобы достичь требуемого результата. Этап 1. Для каждой переменной кортежа выбираем её область значений (т.е. набор всех значений для переменной), если это возможно. Выражение «выбираем, если возможно» подразумевает, что существует условие выборки, встроенное в фразу WHERE, которую можно использовать, чтобы сразу исключить из рассмотрения некоторые кортежи. В нашем случае выбираются следующие наборы кортежей. SX : Все кортежи отношения S 5 кортежей PX : Все кортежи отношения P 6 кортежей JX : Кортежи отношения J, в которых CITY = ‘Athens’ 2 кортежа SPJX : Кортежи отношения SPJ, в которых CITY ≥ 50 24 кортежа Этап 2. Строим декартово произведение диапазонов, выбранных на первом этапе. Вот результат.
(И т.д.) Всё произведение содержит 5*6*2*24=1440 кортежей. Замечание. Для экономии места здесь это отношение полностью не приводится. Мы также не переименовывали атрибуты (хотя это следовало бы сделать во избежание двусмысленности), просто расположили их в таком порядке, чтобы было видно, какой атрибут S# относится, например, к отношению S, а какой ─ к отношению SPJ. Это также сделано для сокращения изложения. Этап 3. Осуществляем выборку из построенного на этапе 2 произведения в соответствии с частью «условие соединения» фразы WHERE. В нашем примере эта часть выглядит следующим образом. JX.J# = SPJX.J# AND PX.P# = SPJX.P# AND SX.S# = SPJX.S# Поэтому из произведения исключаются кортежи, для которых значение атрибута S# из отношения поставщиков не равно значению атрибута S# из отношения поставок, значение атрибута P# из отношения деталей не равно значению атрибута P# из отношения поставок, значение атрибута J# из отношения проектов не равно значению атрибута J# из отношения поставок. Затем получаем подмножество декартова произведения, состоящее (как оказалось) только из десяти кортежей. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |