Введение в системы БД (542480), страница 67
Текст из файла (страница 67)
ЯЕЬЕСТ О1ЯТ1НСТ Я.ЯМАМЕ РВОМ Б 275 Глава 7. Реляз(ионное исчисление ИНЕКЕ ( ЯЕЬЕСТ СОПИТ ( ЯР.Р() ) ГНОМ БР ИНЕКЕ БР.ЯГ - "Я.Я() ) ( ЯЕЬЕСТ СОПИТ ( Р.Р() ) ГКОМ Р ) (Расшифровка: "Получить имена поставщиков, лля которых количество поставляемых деталей равно количеству всех леталей".) Однако обратите внимание на слелуюшие обстоятельства. ° Во-первых, в отличие от формулировки с выражением МОТ ЕХТБТБ, в последней формулировке предполагается, что в отношении БР нет номеров деталей, которые не содержатся в отношении Р. Другими словами, зти лве формулировки эквивалентны (а вторая будет верной) только в случае соблюдения определенного ограничения целослгнослги (полробности приводятся в слелуюшей главе).
° Во-вторых, метод, примененный во второй формулировке лля сравнения двух количеств (ползапросы, расположенные по обе стороны знака равенства), изначально не поллерживался в языке Бг г). и был лобавлен только в стандарте Бг г1.(92. Он все еше не поддерживается во многих пролуктах. ° В-третьих, на самом деле предпочтительнее было бы сравнивать лве таблицы (см. обсуждение реляционных сравнений в главе 6), и тогда запрос записывался бы так.
ЯЕЬЕСТ 01ЯТТМСТ Б.ЯМАМЕ ГНОМ Б ИНЕКЕ ( НЕВЕСТ БР.РР ) ГНОМ ЯР ИНЕКЕ ЯР.Б() = Б.Я() ( БЕЬЕСТ Р.Р() ГНОМ Р ) ; Поскольку язык Бгг(, непосредственно не поддерживает операции сравнения таблиц, необходимо прибегнуть к приему, использующему сравнение кардкнальносгли таблиц (опираясь на практический опыт, мы можем гарантировать, что если карлинальности таблиц равны, то и таблицы одинаковы, по крайней мере в обсуждаемом случае). Дополнительный материал по данной теме приведен в упр.
7.11. 7.7.16. ЯР. Р() БР ЯР.Б() = 'Я2' 1 276 Чаепгь .г1 Реляционная модель ЯЕЬЕСТ ГНОМ ИНЕКЕ ПМ1ОМ НЕВЕСТ ГКОМ ИНЕКЕ Определить номера деталей, которые либо весят более 1б фунтов, либо поставляются поставщиком с номером 'Б2', либо и то, и другое Р. Р() Р Р.ИЕ16НТ > 16.0 Лишние повторяющиеся строки всегда исключаются из результата выполнения не- уточненных операторов ОН10Н, 1НТЕЕЯЕСТ и ЕХСЕРТ (в языке Я()(. оператор ЕХСЕРТ служит аналогом операции И1НОЯ реляционной алгебры).
Однако язык ЯО(. также поддерживает уточненные варианты этих операторов (ОН10Н Аьь, 1НТЕЕЯЕСТ АЫ и ЕХСЕРТ АЬЬ), при которых повторяющиеся строки (если они есть) сохраняются. Примеры с этими вариантами операторов умышленно опускаются. В заключение отметим, что, хотя список примеров операций выборки был достаточно большим, о многих возможностях языка Б()(. здесь даже не упоминалось. Язык Б()(. в действительности является чрезвычайно избыточным (4.18] в том смысле, что почти всегда существует множество способов формулирования одного и того же запроса и нам не хватит места, чтобы описать все возможные формулировки и все возможные опции лаже для сравнительно небольшого числа примеров, которые приводились в этой главе. 7.8. Резюме В этой главе кратко рассматривалось реляционное исчисление, альтернативное реляционной алгебре.
Внешне два подхода очень отличаются: исчисление имеет описательный характер, тогда как характер алгебры — предписывающий, но на более низком уровне они представляют собой одно и то же, поскольку любые выражения исчисления могут быть преобразованы в семантически эквивалентные выражения алгебры и наоборот. Реляционное исчисление существует в двух версиях: исчисление кортежей и исчисление доменов.
Основное различие между ними состоит в том, что переменные исчисления кортежей изменяются на отношениях, а переменные исчисления доменов изменяются на доменах, Выражение исчисления кортежей состоит из прототипа кортежа и необязательного предложения ННЕЕЕ, содержащего логическое выражение или формулу ЪУГГ ("правильно построенную формулу"). Подобная формула %ГГ может включать кванторы (ЕХ1ЯТЯ н РОЕА1 Ь), свободные и связанные ссылки на переменные, логические (булевы) операторы (АНО, ОА, НОТ и др.) и т.д.
Каждая свободная переменная, которая встречается в формуле %ГГ, также должна быть упомянута в прототипе кортежа. Замечание. В настоящей главе явно этот вопрос не затрагивался, но выражения реляционного исчисления предназначены, по существу, для тех же целей, что и выражения реляционной алгебры (см. раздел 6.6 главы 6). На примере было показано, как алгоритм редукции Кодда может использоваться для преобразования произвольного выражения реляционного исчисления в эквивалентное выражение реляционной алгебры, таким образом подготавливая почву для выбора возможной стратегии реализации исчисления. Вновь обратившись к вопросу реляционной полноты, мы кратко обсудили, каким образом можно доказать, что некоторый язык (.
является полным в этом смысле. Кроме того, здесь обсуждалось, как можно расширить исчисление кортежей с целью поддержки определенных вычислительных возможностей (аналогичные возможности в реляционной алгебре обеспечиваются операциями ЕХТЕНО и ЯОИНАЕ1ХЕ). Затем читателям было представлено краткое введение в исчисление доменов и отмечено (правда, без попытки доказать это)„что оно также является реляционно полным. Таким образом, исчисление кортежей, исчисление доменов и реляционная алгебра эквивалентны. 277 Глава 7.
Реляционное исчисление И наконец, вашему вниманию был представлен обзор соответствующих средств языка БОЬ. Язык Б >Ь является своеобразной смесью реляционной алгебры и исчисления (кортежей). Например, в нем есть прямая поддержка таких операций реляционной алгебры, как соединение и объединение, но одновременно с этим используются переменные кортежей и квантер существования из реляционного исчисления. ЯОЬ-запрос представляет собой табличное выражение.
Обычно такая конструкция содержит единственное выражение выборки, однако поддерживаются и различные типы явных выражений операций соединения (ЛОХМ), причем выражения соединения и выборки могут комбинироваться произвольным образом с помощью операторов ОМ10М, 1МТЕКБЕСТ и ЕХСЕРТ. Также упоминалось о возможности использования предложения ОКОВЕ ВХ для определения упорядоченности строк в таблице, являющейся результатом вычисления данного табличного выражения (любого вида).
В частности, были описаны следующие компоненты выражений выборки. ° Базовое предложение БЕЬЕСТ, в том числе использование ключевого слова 01БТ1МСТ, скалярных выражений, введение имен результирующих столбцов и использование предложения ЯЕЬЕСТ * ° Предложение ГКОМ, включая использование переменных кортежей ° Предложение МЕККЕ, включая использование оператора ЕХ1БТБ ° Предложения ОКООР ВУ и ЕАЧХМО, включая использование обобщающих функций СООМТ, БОМ, АЧО, МАХ и М1М ° Использование подзапросов в предложениях БЕЬЕСТ, ГКОМ и МНЕКЕ Кроме того, здесь был описан концептуальный алгоритм вычисления (т.е. схема формального опрелеления) для выражений выборки. Упражнения 7.1. Пусть р(х) и Ч вЂ” произвольные формулы %гр, в которых переменная х соответственно используется и не используется в качестве свободной переменной.
Какие из следующих формулировок верны? (Здесь символ "=е" означает "следует", а символ "-=" означает "эквивалентно". Обратите внимание, что если А =ь В и В ~ А, то А - =В.) а) ЕХ1БТБх(Ч) = — Ч б) ГОКАЬЬ х ( Ч ) =- Ч р (х) АМО Ч ) и ЕХ1ЯТЯ х ( р (х) ) АМВ Ч ГОКАЬЬ „ ( р (х) АМО Ч ) м ГОКАЬЬ х ( р (х) ) АМО Ч д) ГОКАЬЬ х ( р (х) ) =ь ЕХХЯТБ х ( Р (х) ) 7.2. Пусть р(х,у) — это произвольная формула 1нРТ со свободными переменными х и у. Какие из следующих формулировок верны? а) ЕХХБТЯ х ЕХ1ЯТБ у ( р(х,у) ) ж ЕХ1БТЯ у ЕХ1ЯТБ х ( р(х,у) ) б) ГОКА1Ь х ГОКАЬЬ у ( р(х,у) ) - =ГОКАЬЬ у ГОКАЬЬ х ( р(х,у) ) в) ГОКАЬХ, х ( р(х,у) ) и МОТ ЕХ1ЯТЯ х ( МОТ Р(х,У) ) г) ЕХ1ЯТЯ х ( р(х,у) ) ж МОТ ГОКА11 х ( МОТ р(х,у) ) 278 Часть 11.
Реляг(ионная модель д) ЕХ1ятя х ГОНАББ у ( р(х,у) ) = ГОНАББ у ЕХ1ятВ х ( р(х,у) ) е) ЕХ1ятя у ГОНАББ х ( р(х,у) ) =» ГОЕАББ х ЕХ1ятя у ( р(х,у) ) 7.3. Пусть р(х) и п(у) — произвольные формулы %БР со свободными переменными х и у соответственно. Какие из слелуюших формулировок верны? а) ЕХ1БТЯ х ( р(х) ) АНР ЕХ1БТЯ у ( г)(у) ) -= ЕХ1ятя х ЕХ1ятя у ( р(х) АНО Ч(у) ) б) ЕХ1ЯТЯ х ( 1Г р(х) ТНЕН п(х) ЕНО 1Г ) 1Г ГОНАББ х ( р(х) ) тНЕН Ехтятя х ( п(х) ) ЕНО ТГ 7.4. Еще раз обратимся к запросу из примера 7.3.8: "Определить номера поставщиков по крайней мере всех типов деталей, поставляемых поставщиком с номером 'Я2'".
Для этого запроса возможна следующая формулировка в терминах исчисления кортежей. ЯХ.Я4 ИНЕНЕ ГОНАББ ЯРУ ( 1Г БРУ.БГ = '82' ТНЕН ЕХ1ЯТЯ ЯРЕ ( БРХ.Б0 = ЯХ.Я0 АНО БРЕ.Р0 = БРУ.Р)) ЕНО ТГ ) (Здесь БРХ вЂ” зто еще одна переменная кортежа, изменяющаяся на о~ношении поставок.) Что будет возвращено при выполнении этого запроса, если поставщик с номером 'Я2' в данный момент не поставляет никаких деталей? Что будет, если в приведенном выражении переменную БХ всюду заменить переменной БРХ? 7.5.
Вот пример запроса к базе данных поставщиков, деталей и проектов (используются обычные упрощения для имен переменных). ( РХ.НАНЕ, РХ.С1ТХ ) ИНЕЕЕ ГОНАББ ЯХ ГОНАББ ЯХ ЕХ1ЯТБ БРЛХ ( ЯХ.С1ТУ = 'Бопбоп' АНО ЛХ.С1ТУ = 'Раста' АНО ЯРЮХ.Я0 = ЯХ.Я4 АНР ЯРТХ.Р)) = РХ.Р4 АНО ЯРЮХ.ЛФ = ЮХ.Ю)) АНО ЯРЛХ.ОТУ < ОТХ ( 500 ) ) а) Сформулируйте этот запрос в словесной форме.