Введение в системы БД (542480), страница 61
Текст из файла (страница 61)
Сг е АБО р ( С1 ) АВО ... АБО р ( Ся ) В частности, обратите внимание, что если отношение г пустое, то результатом вычисления данного выражения будет значение истина. В качестве примера рассмотрим отношение В, содержащее те же кортежи, что и в предыдущем примере. Тогда приведенные ниже выражения будут иметь указанные значения. РОВАЬЬ Ч ( Ч.А > 1 ) : Ре)ее РОВАЬЬ Ч ( У.В > 1 ) Сгие РОВАЬЬ Ч ( Ч.А = 1 АБО Ч.С > 2 ] : Сгие 250 Часть 11. Реляционная модель (1, 2, 3 ) ( 1, 2, 4 ) ( 1р 37 4 ) ЕХ1ЯТБ Ч ( Ч.С > 1 ) ЕХ1БТЯ Ч ( Ч.В > 3 ) ЕХ1ЯТЯ Ч ( Ч.А > 1 Ой Ч.С = 4 ) : Сгие : Ра)ее : Сгие Замечание.
Квантор ГОИАЬЬ включен в реляционное исчисление просто для удобства. Он не является необходимым, так как приведенное ниже тождество показывает, что любая формула %ГГ, использующая квантор ГОйаЬЬ, всегда может быть заменена эквивалентной формулой %ГГ, использующей квантор ЕХ1БТЯ. ГОЕЕЬЬ Ч ( р ) = БОТ БХТБтЯ ц ( нот р ) (Проще говоря, выражение "все значения Ч, удовлетворяющие формуле р*' — это то же самое, что и выражение "нет таких значений Ч, которые бы не удовлетворяли формуле р".) Например, утверждение (истинное) Для любого целого хсуществует целое у, такое, что у > х равносильно утверждению Не существует целого х, такого, что не существует целого у, такого, что у > х. (Иначе говоря, не существует наибольшего целого числа.) Но обычно легче выразить подобное утверждение в терминах квантора ГОЕЕЬЬ, чем в терминах квантора ЕХ1БТБ, с использованием двойного отрицания.
Другими словами, на практике гораздо удобнее использовать оба квантора. Еще раз о свободных и связанных переменных Предположим, что переменная х изменяется на множестве всех целых чисел, и рассмотрим следующую формулу Ъ ГГ. ЕХ1БТЯ х ( х > 3 ) Связанная переменная х в этой формуле тчГГ является своего рода фиктивной переменной. Она служит лишь для связи внутренних параметров выражения с внешним кван- тором. В формуле ччГГ просто утверждается, что существует целое число (скажем, х), которое больше 3.
Следовательно, заметьте, значение этой формулы )Ггг остазось бы полностью неизменным, если бы все экземпляры х были заменены экземплярами некоторой другой переменной (сказкам, у). Другими словами, формула Ъ'ГГ ЕХ1ЯТБ у (у > 3) семантически идентична формуле, приведенной ранее. Теперь рассмотрим другую формулу ФГГ. ЕХ1ЯТЯ х ( х > 3 ) ЕБО х < 0 Здесь имеется три ссылки на переменную х, обозначающие две различные переменные. Первые две ссылки связаны и могли бы быть заменены ссылкой на другую переменную у без изменения общего смысла формулы. Третья ссылка на переменную х не может быть безболезненно изменена.
Таким образом, из двух приведенных ниже формул '1й'ГГ первая эквивалентна рассмотренной формуле, а вторая — нет. ЕХ1ЯТБ у ( у > 3 ) ХБО х < 0 ЕХ1БТЯ у ( у > 3 ) ЕБО у < 0 Кроме того, обратите внимание, что окончательное значение первоначальной формулы зч'ГГ не может быть определено, если неизвестно значение свободной переменной х.
В отличие от нее формула ФГГ, в которой все ссылки на переменные являются связанными, всегда однозначно имеет значение либо истина, либо лаясь. 251 Глава 7. Реляционное исчисление Дополнительная терминология. Формула %гг, в которой все переменные связаны, называется закрытой формулой %чти (фактически она является высказыванием). Открытая формула ЪУтт — это формула, которая не является закрытой, т.е, такая формула, которая содержит по крайней мере одну ссылку на свободную переменную. Реляционные операции Параметр <репяциоииая операция> не совсем уместен в контексте исчисления — более подходящим вариантом был бы параметр <реляциоииое определеиие>.
Однако мы будем использовать именно первый вариант для согласованности с обозначениями в главе б. В качестве напоминания приводим следующий синтаксис. <реляциоияая операциЯ> <прототип кортеха> ( ИНЕНЕ <логическое вяражеиие> ) <прототип кортежа> <выражение кортежа> Напоминаем также, что следующие синтаксические правила теперь несколько упрощены. ° Во-первых, все ссылки на переменные кортежей в параметре <прототип кортежа> должны быть свободными в пределах значения этого параметра.
° Во-вторых, ссылка на переменную кортежа в предложении ИНЕНЕ может быть свободной только в случае, если ссылка на эту же переменную (обязательно свободная) присутствует в соответствующем значении параметра <прототип кортежа>. Например, следующее выражение является допустимым значением параметра <репяциоииая операция> (" Получить номера поставщиков, находящихся в Лондоне" ). БХ.Б() ИНЕНЕ ЯХ.СТТУ = 'Ьопг)оп' Здесь ссылка на переменную БХ в прототипе кортежа является свободной. Ссылка на переменную БХ в предложении ИНЕНЕ также является свободной, поскольку ссылка на ту же переменную (обязательно свободную) имеется и в значении параметра <прототип кортежа> этого выражения. Замечание.
Далее термин "прототип кортежа" будет употребляться без скобок. Приведем дру~ой пример (" Получить имена поставщиков детали с номером 'Р2'"; см, обсуждение квантора существования, которое приводилось выше). БХ.ЯНАНЕ ИНЕНЕ ЕХХЯТЯ ЯРХ ( ЯРХ.Я(( ЯХ.Я() ХН() БРХ.Р() = Р() ( 'Р2' ) ) Здесь все ссылки на переменную БХ являются свободными, тогда как все ссылки на переменную ЯРХ (в предложении ИНЕЕЕ) являются связанными, как и должно быть, поскольку на них нет ссылок в прототипе кортежа. Интуитивно понятно, что результатом выполнения операции, заданной параметром <репяциоииая операция>, будет отношение, содержащее все возможные значения кортежей, определяемых параметром <прототип кортежа>, для которых результат вычисления логического выражения, заданного в предложении ИНЕНЕ параметром <логическое выражение>, принимает значение истина. (Если предложение ИНЕЕЕ опущено, это эквивалентно указанию выражения ИНЕЕЕ бгпе.) Сделаем некоторые уточнения.
Часть П. Реляционная модель ° Прежде всего, прототип кортежа — это список разделенных запятыми элементов (возможно, заключенный в скобки), каждый элемент которого является либо ссылкой на атрибут кортежа (который может содержать предложение йЯ для введения нового имени атрибута), либо просто именем переменной кортежаз.
Тем не менее отметим следующее. а) В этом контексте имя переменной кортежа чаще всего является сокращенным обозначением списка разделенных запятыми ссылок на атрибуты, по одной для каждого атрибута отношения, на котором задана данная переменная кортежа. б) Ссылка на атрибут кортежа без предложения АЯ, в принципе, является сокращенным обозначением ссылки с предложением АЯ, в которой новое имя атрибута совпадает со старым. Следовательно, без потери общности прототип кортежа можно рассматривать как список, состоящий из разделенных запятыми ссылок на атрибуты в виде Ч1.А1 йЯ Вз.
Обратите внимание, что ссылки ЧЕ- и йз-е могут повторяться, тогда как ссылки Взче должны быть разными. ° Пусть Ч1, Ч2, ..., Чл будут различными переменными кортежей, упоминаемыми в прототипе кортежа, и пусть эти переменные будут определены на отношениях г1, г2, ..., гп соответственно.
Примем, что г1', г2', ..., гш' — это новые отношения, полученные после переименования атрибутов в предложении АЯ, и пусть г' — это декартово произведение отношений г1', г2', ..., гл'. ° Пусть отношение г — это выборка из отношения г', удовлетворяющая формуле %гг в предложении ИНЕВЕ. Замечание. Здесь предполагается, что на предыдущем шаге были также переименованы атрибуты, упоминающиеся в предложении ИНЕВЕ; в противном случае функция ЧЧгг в предложении ИНЕВЕ может не иметь смысла. Как мы увидим в следующем разделе, в вопросе устранения неоднозначности предложенный здесь конкретный синтаксис полагается не на это предположение, а на уточнения.
° Конечное значение реляционной операции, заданной параметром <реллцлоллое ллралелле>, определяется как проекция отношения г по всем заданным атрибутам В). В следующем разделе приводится несколько примеров подобных выражений. 7.3. Примеры Представляем несколько примеров использования реляционного исчисления кортежей для формулирования запросов. В качестве упражнения рекомендуется решить эти задачи средствами реляционной алгебры (лля сравнения). З Суэчествуют и другие воэмоясности, однако для экономии времени мы ограничиися только этими двумя. 253 Глава 7. Реляционное исчисление 7.3.1.
Определить номера поставщиков из Парижа со статусом, болыпим 20 ( ях.я», ях.ятАтся ) ИНЕКЕ ЯХ.С?Т? = 'Рат?а' АНО ЯХ.ЯТАТОЯ > 20 7.3.2. Найти все такие пары номеров поставщиков, в которых два поставщика находятся в одном городе Ях.я» АЯ ЯА, Я?.М АЯ ЯВ ИНЕКЕ ЯХ.С1Т? = ЯУ.С?ТУ АНО ях.я» < я?.я» Обратите внимание, что спецификации АЯ в прототипе кортежа используются для именования атрибутов результата. Следовательно, эти имена недоступны для использования в фразе ИНЕКЕ, и потому второе сравнение в фразе ИНЕКЕ записано как ЯХ. Я» < ЯУ.
Я», а не в виде ЯА < ЯВ. 7.3.3. Определить имена поставщиков детали с номером 'Р2' ях ИНЕКЕ ЕХ1ЯТЯ ЯРХ ( ЯРХ.Я» = ЯХ.Я» АНО ЯРХ.Р» = Р» ( 'Р2' ) ) Обратите внимание на использование имени переменной кортежа в прототипе кортежа. Этот пример является сокращенной записью следующего выражения. (Ях.я», ЯХ.НАНЕ, ЯХ.ЯТАТОЯ, ЯХ.С?Т? ) ИНЕКЕ ЕХ?ЯТЯ ЯРХ ( ЯРХ.Я№ = ЯХ.Я» АНО ЯРХ.Р» = Р» ( 'Р2' ) ) 7.3.4.