Введение в системы БД (542480), страница 64
Текст из файла (страница 64)
Реляционная модель 7.5.3. Выбрать сведения о каждой поставке и указать полные данные о входящих в нее типах деталей и общий вес поставки ( ЯРХ, РХ.ИЕ16НТ * ЯРХ.ОТТ ) АЯ ЯН1РИТ ИНЕКЕ РХ.Р() = БРХ.Р() 7.5.4. Для каждой детали выбрать номер и общий объем поставки в штуках ( РХ.Р)), ЯОМ ( ЯРХ ИНЕКЕ ЯРХ.Р() = РХ.РР, ОТТ ) АЯ ТОТОТХ ] 7.5.5. Определить общее количество поставляемых деталей ЯОМ (ЯРХ, ОТХ ) АЯ ОКАИОТОТАЬ ) 7.5.6. Для каждого поставщика указать номер и общий объем поставки в штуках ( ЯХ.Я(), СОНЕТ ( ЯРХ ИНЕКЕ ЯРХ.Б() = БХ.Б() ) АБ () ОР РАКТЯ ) 7.5.7.
Указать названия городов, в которых находится более пяти красных деталей КАИОЕЧАК РТ КАИОЕЯ ОЧЕК Р; РХ.С1ТТ ИНЕКЕ СООИТ ( РХ ИНЕКЕ РХ.С1ТХ = РХ.С1ТТ АИО РХ.СОЬОК = СОЕОК ( 'Кед' ) ) > 5 7.6. Исчисление доменов Как указывалось в разделе 7.!, реляционное исчисление, ориентированное на домены (или исчисление доменов), отличается от исчисления кортежей тем, что в нем вместо переменных кортежей использую~ся переменные доменов, т.е.
переменные, принимающие свои значения в пределах домена, а не отношения. В этой книге мы лишь кратко рассмотрим исчисление доменов. С практической точки зрения большинство очевидных различий между версиями исчисления доменов и исчисления кортежей основано на том, что версия для доменов поддерживает дополнительную форму параметра <логическое янраяение>, ко~орый мы будем называть условием принадлежности. В общем виде условие принадлежности можно записать так.
К ( пара, пара, ... ) Здесь К вЂ” имя переменной-отношения, а каждый параметр лара имеет вид А:ч, где А — атрибут переменной-отношения К, а ч — имя переменной домена или литерал. Про- 263 Глава 7. Реляционное исчисление верка условия дает значение истина тогда и только тогда, когда в текущем значении пе- ременной-отношения Н существует кортеж, имеющий указанные значения для указанных атрибутов.
Например, рассмотрим результат вычисления следующего выражения. ЯР ( 8():8()('81'), Р():Р()('Р1') ) Он будет иметь значение исглнна тогда и только тогда, когда в переменной- отношении ЯР будет существовать кортеж со значением атрибута 8(), равным '81', и значением атрибута Р(), равным 'Р1'. Аналогично условие принадлежности ЯР ( Бя:ЯХ, Р():РХ ) принимает значение истина тогда и только тогда, когда в переменной-отношении ЯР существует кортеж со значением атрибута 8(), эквивалентным текущему значению переменной домена ЯХ (какому бы то ни было), и значением атрибута Ря, эквивалентным текущему значению переменной домена РХ (опять же, какому бы то ни было). Далее будем подразумевать существование следующих переменных доменов. Ниже приведено несколько примеров выражений исчисления доменов.
ЯХ ИНЕСЕ 8 ( 8():ЯХ ) ЯХ ИНЕНЕ Я ( 8():БХ, С1ТТ:'Ьолдол' ) ( БХ, С1ТТХ ) ИНЕНЕ Я ( 8$:БХ, С1ТТ:'Ьопдоп' ) АИН) ЯР ( 8():БХ, Р(): Р() ( 'Р2' ) ] ( ЯХ, РХ ) ИНЕНЕ Я (8():БХ, С1ТУ:С1ТХХ ) АИО Р ( Р():РХ, С1Т1:С1Т11 ) АИВ С1ТТХ я С1ТУТ Если говорить нестрого, первое выражение означает множество всех номеров поставщиков, второе — множество всех номеров поставщиков в переменной- отношении Я, третье — подмножес~во номеров поставщиков из Лондона. Следующее выражение — это выраженный в терминах исчисления доменов запрос "Определить номера поставщиков и названия ~продав, в которых находятся поставщики детали с номером 'Р2'" (вспомните, что в этом запросе, выраженном в терминах исчисления кортежей, использовался квантор существования). И последнее вы- 264 Часть 11. Реляционная модель Домел 8() Ря НАНЕ СОЬОН ИЕТОНТ ОТТ СНАН 1ИТЕОЕК Переменная домена БХ,Я1,...
РХ,РТ, ... ИАНЕХ, НАМЕТ, СОЬОВХ, СОЬОКТ, ... ИЕ1ОНТХ, ИЕ16НТТ, ... ОТТХ, ОТУХ, С1ТТХ, С1Т11, ... БТАТОЯХ, БТАТО81.... ражение — это представленный в терминах исчисления доменов запрос "Найти все такие пары номеров поставщиков и номеров деталей, для которых поставщик и деталь находятся в одном городе". Ниже приведено несколько примеров из числа рассмотренных в разделе 7.3, но на этот раз выраженных в терминах исчисления ломенов (часть из них несколько изменена).
7.6.1. Выбрать номера поставщиков из Парижа со статусом, большим 20 ЯХ ИНЕКЕ ЕХ1ЯТБ БТАТОЯХ (ятйт0ях > 20 Аю Я ( 5$:ЯХ, 5тйТУБ:5ТйТОБХ, С1ТУ:'Рагза' ) ) Этот пример несколько неуклюж по сравнению с его аналогом, выраженным в терминах исчисления кортежей. Обратите внимание, что все еще требуется использовать кванторы. С другой стороны, существуют ситуации, когда верно обратное утверждение, что видно из более сложных примеров, приведенных ниже. 7.6.2.
Найти все такие пары номеров поставщиков, в которых два поставщика находятся в одном городе ( ЯХ АЯ Яй, 51 АЯ ЯН ) ИНЕКЕ ЕХБ15Т С1ТХХ ( Я ( 5$.'ЯХ, С1ТУ:С1ТУХ) йИО я ( 5$:51, сттх:сттхх) Аю ЯХ < 51 ) 7.6.3. Определить имена поставщиков по крайней мере одной красной детали ИАМЕХ ИНЕКЕ ЕХ15ТЯ ЯХ ЕХ15ТЯ РХ ( Б ( 5$:ЯХ, ЯИАМЕ:ИАМЕХ ) АМО ЯР ( 5$:БХ, Р$:РХ ) АМО Р ( Р$:РХ, СОьОК:СОьОК('Кеб') ) ) 7.6.4. Определить номера поставщиков всех типов деталей, поставляемых поставщиком с номером 'су2' ИАМЕХ ИНЕКЕ ЕХ1ЯТЯ ЯХ ЕХ1ЯТЯ РХ ( Я ( Я$:ЯХ, ЯНАМЕсНАМЕХ ) АЮ яР ( 5$:яХ, Р$гРХ ) АМ0 ЯР ( 5$:5$('52'), Р$:РХ ) ) 7.6.5. Выбрать имена поставщиков всех типов деталей НАМЕХ ИНЕКЕ ЕХ1ЯТЯ ЯХ ( Я ( 5$:ЯХ, ЯИАМЕ:МАМЕХ ) АИО ГОКАЬЬ РХ ( 1Г Р ( Р$:РХ ) ТНЕМ ЯР ( 5$:БХ, Р$:РХ ) ЕМ0 1Г ) 265 Глава 7.
Реляг$ионное исчисление 7.6.6. Определить имена поставщиков, которые не поставляют деталь с номером 'Р2' КАМЕХ ИНЕНЕ ЕХ1ЯТЯ ЯХ ( Я ( Я():БХ, ЯКАМЕ:КАМЕХ ) АКО КОТ БР (ЯФ:ЯХ, Р():Р()('Р2') ) ) 7.6.7. Определить номера поставщиков всех типов деталей, поставляемых поставщиком с номером 'су2' ЯХ ИНЕНЕ РОКАММА РХ ( 1Р ЯР ( Я():Я((('Я2'), Р():РХ ) АЙНЕМ БР ( Я():ЯХ, Р():РХ ) ЕКО 1Р ) 7.6.8. Получить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером '$2', либо и то, и другое РХ ИНЕНЕ ЕХ1ЯТЯ ИЕ1СНТХ ( Р ( Р():РХ, ИЕ1СНТзИЕ1СНТХ ) АКО ИЕ1СНТХ > ИЕ1СНТ ( 16.0 ) ) ОН ЯР ( Б()зЯ()('Я2'), Р():РХ ) Исчисление доменов, как и исчисление кортежей, формально эквивалентно реляционной алгебре (т.е. оно реляционно полно).
Для доказательства можно сослаться, например, на статью Ульмана (И!шап) [7.13). 7.7. Средства языка ЯН Как уже говорилось в разделе 7.4, в основу реляционного языка могут быть положены как реляционная алгебра, так и реляционное исчисление. Что же положено в основу языка БО(,? К сожалению, отав~ам будет "частично и то, и другое, а частично ни та, ни другое...".
Когда язык БОЬ только разрабатывался, предполагалось что он будет отличаться как от реляционной алгебры, так и от реляционного исчисления [4.8). Действительно, именно этим мотивировалось введение в язык конструкции 1К <подзапрос> (см, пример 7.7.10, приведенный ниже). Однако со временем выяснилось, что язык БО(. нуждается в определенных средствах как реляционной алгебры, так и исчисления, поэтому он был расширен для включения этих функцийз.
На сегодняшний день ситуация складывается таким образом, что язык БО(. в чем-то похож на реляционную алгебру, в чем-то на реляционное исчисление, а в чем-то отличается от них З Вшвдствив этага, как атиечаетсл в аннотации к [4.)Б), конструкцию 1К <подзапрос> мажна палнастыа удалит~ из языка бвз потери ега фунлцианазьнасти! В этап есть некатарал крапил, паскалыу благодаря именна такой конструкции в названии даннага языка, в переааде азначающвга "язык струкп~урираванныл запрасав (Бггис(игвг) Олегу йапХиакел появилась слава "структурираванныз (5)гистгвгА В действительности ииенна эта канспрукцил спасабстваваэа таму, чпэа язык Бь)1 оказал<я на пераам.чесме, оставив позади и реляционную алгебру, и реллцианнаг исчисление. 266 Часть 1Х Реляционная модель обоих. Таким положением дел объясняется, почему в главе 6 мы отложили обсуждение средств обработки данных языка Я;>Ь до настоящей главы.
(Мы предоставляем читателю в качестве упражнения определить, какая часть языка БОЬ основана на алгебре, какая на исчислении, а какая ни на том, ни на другом.) Запросы в языке БОЬ формулируются в виде табличных выражений, которые потенциально могут иметь очень высокую степень сложности. Здесь мы не будем углубляться во все эти сложности, а просто рассмотрим несколько примеров, раскрывающих наиболее важные моменты. В качестве основы для примеров взяты определения БОЬ-таблиц для базы данных поставщиков и деталей, представленные в главе 4 (см. рис.
4.1). Напоминаем, что в БОЬ-версии этой базы данных нет типов данных, определяемых пользователем, и все столбцы определены в терминах встроенных типов языка БОЬ. Замечаное. Более полная и более формальная интерпретация всех БОЬ-выражений в целом и табличных выражений в частности приводится в приложении А. 7.7.1. Указать цвета деталей и названия городов, в которых находятся детали "не из Парижа" с весом, превышающим 10 фунтов ЯЕБЕСТ РХ.СОБОК, РХ.С1ТХ ГНОМ Р ЛЯ РХ ИНЕКЕ РХ.С1ТТ <> 'Раг1в' КИО РХ ИЕ16НТ > 10.0; Необходимо отметить следующее.
!. Прежде всего обратите внимание на использование в этом примере символа "<>" (не равно). Типичные скалярные операторы сравнения записываются в языке БОЬ следующим образом: =, <>, <, >, <= и >ге 2. Обратите также внимание на спецификацию Р вЯ РХ в предложении ИНЕКЕ. Этой спецификацией вводится новая переменная кортежа РХ (в стиле исчисления кортежей), областью значений которой является текущее значение таблицы Р. Областью применения такого определения, нестрого говоря, является выражение, в котором она появляется. Замечание. В языке БОЬ обозначение РХ называется относительным именем.
3. В языке Я.>Ь также допускается неявное обращение к переменным кортежей, что позволяет переписать наш запрос в следующем виде. ЯЕБЕСТ Р.СОБОК, Р.С1ТХ ГКОМ Р ИНЕКЕ Р.С1ТТ <> 'Раг1в' КИО Р.ИЕ16НТ > 10.0 Основная идея состоит в том, чтобы разрешить использование имени таблицы для обозначения неявной переменной кортежа, областью значений которой является рассматриваемая таблица (разумеется, при условии однозначности результата). Например, предложение ГКОМ Р в нашем примере можно рассматривать как 267 Глава 7. Реляционное исчисление сокращенную запись предложения РВОМ Р АЯ Р. Другими словами, необходимо четко понимать, что Р в выражении Р.СОВОВ в предложениях ИНЕВЕ и ЯЕЬЕСТ обозначает не саму таблицу Р, а переменную кортежа Р, которая принимает свои значения из одноименной таблицы.