Введение в системы БД (542480), страница 70
Текст из файла (страница 70)
Частично эту проблему можно решить с помощью оператора ТСЬОЯЕ, кратко рассмотренного в главе 6 (но только частично). Дальнейшие подробности выходят за рамки этой книги. Зачечаняе, Хотя данную задачу обычно называют составлением спецификации материалов или разузлованием деталей, применяется она на самом деле значительно шире, чем можно судить по этим названиям. В действительности класс отношений вида "детали содержат детали" очень широко распространен в самых разных приложениях.
Кроме всего прочего, подобный вид отношений присутствует в процессах управления иерархическими структурами, в родословных деревьях, графах аутентификации, сетевых взаимодействиях, структурах вызова программных модулей, транспортных сетях и т.д.
7.8. Этот запрос нельзя выразить ни в терминах исчисления, ни в терминах алгебры. Например„чтобы выразить его в терминах исчисления, по существу, потребовалось бы уметь выражать нечто подобное следующему. "Существует ли отношение г, такое, что в этом отношении г имеется кортеж т., такой, что а.Я)) = Я() ( 'Я1' )?" Другими словами, мы должны были бы уметь квалифицировать отношения, а не кортежи и, следовательно, потребовалась бы иная переменная с новой областью значений, т.е, такая переменная, значениями которой являлись бы некоторые отношения, а не кортежи.
Поэтому подобный запрос не может быть выражен в терминах реляционного исчисления, как оно определено на настоящий момент, Кстати, обратите внимание, что рассматриваемый запрос — это запрос типа "Да — нет" (причем, желаемый ответ — чаще всего значение истина). Поэтому читателю может показаться, что запрос нельзя выразить в терминах исчисления или с помощью алгебры, потому что выражения реляционного исчисления и алгебры принимают значения отношений, а не логические. Однако запросы типа "Да — нет" могут быть выражены в терминах исчисления и алгебры, если они правильно реализованы! Главная трудность заключается в том, чтобы понять, что результаты "да" и "нет" (экаивалентные значениям истина и ложь) могут быть нредстаюены как отношения.
Рассматриваемые отношения — это ТАВЬЕ ВЕЕ и ТйВЬЕ РУИ соответственно. Более подробное обсуждение этих отношений приводится в [5.51. 7.9. Для подтверждения реляционной полноты языка Я(И. необхолимо сначала показать, что существуют ЯОЬ-выражения лля каждой из пяти примитивных операций реляционной алгебры (выборки, проекции, произведения, объединения и вычитания), а затем доказать, что операнды таких ЯЯЬ-выражений могут, в свою очередь, быть произвольными выражениями языка Я( И.. 286 Часть 11. Реляционная л~одель г)ачнем с предварительного замечания о том, что язык БОЬ фактически поддерживает оператор переименования реляционной алгебры ЕЕМАМЕ после введения в стандарт БОЕ!92 необязательной спецификации АЯ <лют столбца> в предложении ЯЕЬЕСТ. Следовательно, можно быть уверенным, что все имена столбцов в таблицах правильны и, в частности, что операнды операций произведения, объединения и вычитания удовлетворяют требованиям реляционной алгебры (в нашей версии) в отношении именования столбцов.
Более того, указанные требования к именованию столбцов операндов действительно удовлетворяются: правила вывода имен столбцов в языке БОЬ фактически совпадают с аналогичными правилами реляционной алгебры (в нашей версии), что было показано в главе б. Вот выражения языка 9 Н., соответствуюшие пяти примитивным операциям алгебры. Алгебра Язык БС)Ь А ИНЕНЕ р й (х, у,..., х) А Т1МЕЯ В А ОМ10М В А МТМОЯ В ЯЕЬЕСТ * РВОМ А ИНЕНЕ р НЕВЕСТ ЕТЯТЬМСТ х, у,...,х РНОМ А А СНОБЕ ЮО1М В ЯЕЬЕСТ * РВОМ А ОМ10М ЯЕЬЕСТ * РНОМ В ЯЕЬЕСТ * РВОМ А ЕХСЕРТ ЯЕЬЕСТ ь РВОМ В Обратившись к грамматике табличных выражений языка Ы.Н., которая описывается в приложенииА, можно увидеть, что переменные А и В в приведенных выше БОЬ- выражениях по сути являются значениями параметра <сеялка на табллцу>. Можно убелиться еше и в том, что если заключить каждое из пяти показанных Б(Н.- выражений в скобки, то оно также станет допустимым значением зтого же параметраз.
Отсюда следует, что язык Щ. на самом деле является реляционно полным. Заивчание. В действительности во всем вышесказанном есть один недостаток: язык 9 >Ь не поддерживает проекций по нулевому количеству столбцов (поскольку он не поддерживает пустых предложений ЯЕЬЕСТ).
Как следствие язык БОЬ не поддерживает таблиц ТйВЬЕ ОЕЕ и ТАВЬЕ ЯОМ [5.5]. Язык БОЬ подлерживает операцию ЕХТЕМО, но не ЯНИМАН1ХЕ (по крайней мере, не непосредственно). Что касается операции ЕХТЕМО, то выражение реляционной алгебры 7.10. ЕХТЕМО А АОП ехр АЯ Х в языке Б()Ь может быть представлено так. ЯЕЬЕСТ А.*, ехр' АБ Х РНОИ ( А ) АЯ А Выражение ехр' в предложении ЯЕЬЕСТ является БОБ-аналогом операнда ехр в выражении ЕХТЕМО.
Заключенная в скобки ссылка на переменную А представляет собой значение параметра <ссилка ла таблицу> произвольной сложности 287 Глава 7. Реляционное исчисление "здесь мы игнорируем тот сракт, что в языке ось параметр <сеялка на таблицу> в деиствительности требует включения в свое значение определения переменной кортежа с пустой областью значений (см, приложение Ай (соответствующую операнду А оператора ЕХТЕМ0).
Вторая ссылка й в предложении УКОМ вЂ” имя переменной кортежа. Что касается операции БОММАКХХЕ, основная проблема состоит в том, что выражение реляционной алгебры ЯОММАК1ХЕ А РЕК В возвращает результат, кардинальность которого равна кардинальности операнда В, в то время как "эквивалентное" этой функции БО).-выражение НЕВЕСТ УКОМ А ОКОВУ ВХ С возвращает результат с кардинальностью, равной кардинальности проекции табли- цы й по атрибуту С. 7.11. Язык БО(. не поддерживает реляционных сравнений непосредственно.
Однако подобные операции можно смоделировать, хотя и в виде очень громоздких выражений. Например, реляционное сравнение й = В (где А и  — отношения) можно успешно смоделировать с помощью следующего БО(.-выражения. МОТ ЕХ1ЯТЯ ( ЯЕЬЕСТ * УЮМ А ИНЕКЕ МОТ ЕХТБТЯ ( БЕЗВЕСТ * УКОМ В ИНЕКЕ А-строка = В-строка ) ) Здесь операнды й-строка и В-строка — это значения параметра <конструктор строка> (прнложение А), представляющие соответственно всю строку таблицы А н всю строку таблицы В.
7.12. Вот несколько таких формулировок. Заметьте, что этот список далеко не исчерпывающий (4.18). Обратите внимание также на простоту каждого запроса! БЕЗВЕСТ 01ЯТ1МСТ Я.ЯМАМЕ УКОМ Я ИНЕКЕ Б.Я$ 1М ( БЕЗВЕСТ ЯР.Я$ УКОМ ЯР ИНЕКЕ ЯР.Р$ = 'Р2' ) ) БЕЗВЕСТ 01БТ1МСТ Т.ЯМАМЕ УЮМ ( Я КАТОНАМИ 101М ЯР ) АБ Т ИНЕКЕ Т.Р$ = 'Р2' БЕЗВЕСТ 01ЯТ1МСТ Т.ЯМАМЕ УКОМ ( Я 101М ЯР ОМ Я.Б$ = ЯР.Р$ АМО ЯР.Р$ = 'Р2' ) АЯ Т ) БЕЗВЕСТ 01ЯТ1МСТ Т.ЯМАМЕ УКОМ ( Я 101М БР ОЯ1МО Б$ ) АЯ Т ИНЕКЕ Т.Р$ = 'Р2' 288 Часть 11. Реляционная модель БЕЬЕСТ П1ЯТ?МСТ Я.БИВНЕ РВОМ Б ИНЕИ ЕХ1БТЯ ( ЯЕЬЕСТ Я РВОМ БР ИНЕКЕ ЯР.Я$ = Я.Я$ АИП ЯР.Р$ = 'Р2' ) ЯЕЬЕСТ 01ЯТ1МСТ Я.БМАМЕ РВОМ Я, БР ИНЕКЕ Я.Я$ = БР.Я$ АМП БР.Р$ -" 'Р2' ) БЕЬЕСТ 01ЯТ1НСТ Я.ЯМАМЕ РКОМ Б ИНЕКЕ 0 < ( ЯЕЬЕСТ СОПИТ(ь) РВОМ БР ИНЕВЕ ЯР.Я$ = Я.Б$ АМП ЯР.Р$ = 'Р2' ) БЕЬЕСТ РВОМ ИНЕКЕ ( 01ЯТ1ЫСТ Я.ЯМАМЕ Я 'Р2' 1И ЯЕЬЕСТ БР.Р$ РВОМ ЯР ИНЕКЕ ЯР.Я$ = Б.Я$ ) Б.ЯМАМЕ Я, ЯР Я.Б$ = БР.Б$ ЯР.Р$ = 'Р2' ВХ Б.ЯНАМЕ ЯЕЬЕСТ РВОМ ИНЕКЕ АМП ОКОПР 7.13.14.ЛХ ИНЕВЕ ЛХ.С?ТУ = 'ЬопНоп' 7.13.15.БР?Х.Я$ ИНЕКЕ ЯРвХ.З$ = 1$ ( '01' ) 7.13.16.ЯРЛХ ИНЕКЕ ЯРЛХ.ОТ? > ОТУ ( 300 ) АМО ЯРЮХ.ОТУ < ОТ? ( 750 ) 7.13.17.
( РХ.СО?ОВ, РХ.С1Т? ) 289 Глава 7. Релиз(ионное исчисление Дополнительный вопрос. Каков смысл всех приведенных выше запросов? 7.13. Мы перенумеровали решения для этого пункта как 7.13.п, где и — номер исходного упражнения в главе 6, т.е. упр. б.п. Подразумевается, что переменные ЯХ, БУ, РХ, РУ, ЛХ, ЛУ, БРЮХ, БРЮТ н т.д. — это переменные кортежей, изменяюшихся на отношениях Я, Р, д и ЯРЮ соответственно. Определение этих переменных кортежей в ответах не показано.
7.13.13. ?Х 7.13.18.( ЯХ.Я$, РХ.Р$, ЮХ.Ю$ ) ИНЕКЕ ЯХ.С?ТУ = РХ.С1ТХ йМО РХ.С1Т? = ЮХ.С1ТХ йМО ЮХ.С1Т? = ЯХ.С?ТУ 7.13.19. ( ЯХ.Я$, РХ.Р$, ЮХ.Ю$ ) ИНЕКЕ ЯХ.С?Т? ~ РХ.С?Т? ОК РХ.С1Т? Ф ЮХ.С1ТУ ОК ЮХ.С1ТУ Ф ЯХ.С1Т? 7.13.20.( ЯХ.Я$, РХ.Р$, ЮХ.Ю$ ) ИНЕКЕ ЯХ.С?Т? и РХ.С1Т? йМО РХ.С1Т? Ф ЮХ.С?Т? АМО ЮХ.С1Т? Ф ЯХ.С?Т? 7.13 21.ЯРЮХ.Р$ ИНЕКЕ ЕХ1ЯТЯ ЯХ ( ЯХ.Я$ = ЯРЮХ.Я$ АМО ЯХ.С?ТУ = 'Ьопг)оп' ) 7.13.22.ЯРЮХ.Р$ ИНЕКЕ ЕХ1ЯТЯ ЯХ ЕХ?ЯТЯ ЮХ ( ЯХ.Я$ = ЯРЮХ.Я$ АМР ЯХ.С1Т? = 'Ьопйоп' АМО ЮХ.Ю$ = ЯРЮХ.Ю$ йИО ЮХ.С1Т? = 'Ьопбоп' ) 7.13.23.( ЯХ.С1ТУ АЯ ЯС?ТУ, ЮХ.С?Т? йЯ ЮС?Т? ) ИНЕКЕ ЕХ?ЯТЯ ЯРЮХ ( ЯРЮХ.Я$ = ЯХ.Я$ АМО ЯРЮХ.Ю$ = ЮХ.Ю$ ) 7.13.24.ЯРЮХ.Р$ ИНЕКЕ ЕХ1ЯТЯ ЯХ ЕХ1ЯТЯ ЮХ ( ЯХ.С1ТУ = ЮХ.С1Т? АМО ЯРЮХ.Я$ = ЯХ.Я$ АМО ЯРЮХ.Ю$ = ЮХ.Л) ) 7.13.25.ЯРЮХ.Ю$ ИНЕКЕ ЕХ1ЯТЯ ЯХ ЕХ1ЯТЯ ЮХ ( ЯХ.С1Т? и ЮХ.С1Т? АМО ЯРЮХ.Я$ = ЯХ.Я$ АМО ЯРЮХ.Ю$ = ЮХ.Ю$ ) 7.13.26.
( ЯРЮХ.Р$ АЯ ХР$, ЯРЮ?.Р$ АЯ ?Р$ ) ИНЕКЕ ЯРЮХ.Я$ = ЯРЮ?.Я$ АМО ЯРЮХ.Р$ < ЯРЮ?.Р$ 733.27.СООМТ ( ЯРЮХ.Ю$ ИНЕКЕ ЯРЮХ.Я$ = Я$ ( 'Я1' ) ) йЯ М 7.13.28.ЯОМ ( ЯРЮХ ИНЕКЕ ЯР?Х.Я$ = Я$ ( 'Я?' ) АМО ЯРЮХ.Р$ = Р$ ( 'Р?' ), ЦТ? ) АЯ О Замечание. Следующее "решение" не верно (почему?). ЯОМ ( ЯРЮХ.ОТ? ИНЕКЕ ЯРЮХ.Я$ = 8$ ( 'Я1' ) АМО ЯРЮХ.Р$ = Р$ ( 'Р1' ), ОТ? ) АЯ О Ответ.