Теория и практика построения баз данных (1088289), страница 63
Текст из файла (страница 63)
Примеры отношений: а — СТУДЕНТ; б — ЗАПИСЬ Номер Название Порядковый Имя Специальн~шть Курс Студента Предмета Номер Рис. 8.13. Произведение отношений СТУДЕНТ н ЗАПИСЬ Проектирование Проектирование (рго)есгюп) — это операция, которая выделяет заданные атрибу- ты отношения. Результатом проектирования является новое отношение, содер- 292 Глава 8. Основы построения реляционных баз данных Реляционная алгебра 293 жашее выбранные атрибуты; иными словами, при проектировании из исходного отношения выбирается некоторое множество столбцов. В качестве примера рассмотрим отношение СТУДЕНТ из рис. 8.12, а.
На рис. 8.14, а показана проекция этого отношения на атрибуты Имя и Специальность, которая обозначена СТУДЕНТ [Имя, Специальность), На рис. 8.14, б показана проекция этого отношения на атрибуты Специальность и Курс, обозначенная СТУДЕНТ [Специальность, Курс]. Обратите внимание, что хотя отношение СТУДЕНТ имеет четыре корте>ха, проекцти СТУДЕНТ [Специальность, Курс] имеет только три, Один кортеж был исключен, поскольку после выполнения операции проектирования кортеж [ИСТОРИЯ, С1] оказался в результируюшем отношении в двух экземплярах. Так как результат проектирования является отношением, а отношение не может иметь одинаковых кортежей, избыточный кортеж был исключен, Проекцию можно также использовать для изменения порядка следования атрибутов в отношении. Наприл1ер, проекция СТУДЕНТ [Курс, Специальность, Имя, ЛичныйНомер] меняет порядок атрибутов в отношении СТУДЕНТ на обратный (исходный порядок представлен на рис. 8.11).
Иногда эта возможность позволяет сделать два отношения совместимыми по объединеншо. Имя Специальность Специальность Курс е б Рис. 8.14. Проекции отношения СТУДЕНТ: е — СТУДЕНТ [Имя, Специальность); б — СТУДЕНТ [Специальность, Курс) Выборка В то время как оператор проектирования выделяет вертикальное подмножество (столбцы) отношения, оператор выборки (зе1есйоп) выделяет горизонтальное подмножество (строки), Проектирование указывает, какие атрибуты дол>хны быть в новом отношении, а выборка указывает, какие строки должны в нем присутствовать. Обозначается выборка 1гутем указания имени отношения, за которым следует ключевое слово УУНЕРЕ («где»), за которым, в свою очередь, идет условие, накладываемое на атрибуты.
На рис. 8.15, а представлена выборка СТУДЕНТ тУНЕйЕ Специальность = '[ЦАТЕМАТИКА', а на рис. 8.15, б — СТУДЕНТ туНЕВЕ Курс -'С1', Соединение Операция соединения бош) представляет собой комбипаци1о произведения, выборки и (возможно) проектирования. Соединение двух отношений А и В происходит следующим образом. Сначала формируется произведение А х В. Затем делается выборка, при которой исключаются некоторые кортежи (критерии отбора указываются в операторе соединения).
После этого путем проектирования могут быть (при необходимости) исключены некоторые атрибуты. Личный Имя Специальность Курс 1ба ПАРКС МАТЕМАТИКА АС Личный Номер Имя Специальность Курс т б Рис. 8.18. Примеры выборки: е — СТУДЕНТ ЬУНЕЙЕ Специальность = 'МАТЕМАТИКА', б — СТУДЕНТ ЬУНЕЛЕ Курс = 'С1' Рассмотрим отношения СТУДЕНТ и ЗАПИСЬ, показанные на рис, 8,12. Предположим, мы хотим знать имя н номер каждого студента.
Чтобы получить эти данные, нам нужно соединить кортежи отношения СТУДЕНТ с соответствующими кортежами отношения ЗАПИСЬ на основании атрибута НомерСтудента. Такое соединение мы обозначаем как СТУДЕНТ З01Н (ЛичныйНомер НомерСтудента) ЗАПИСЬ . Эта запись означает: «Соединить кортеж отношения СТУДЕНТ с кортежем отношения ЗАПИСЬ, если значение атрибута ЛичныйНомер в отношении СТУДЕНТ равняется значению атрибута НомерСтудента в отношении ЗАПИСЬ». Чтобы построить это соединение, мы сначала находим произведение отношений СТУДЕНТ и ЗАПИСЬ вЂ” результат этой операции представлен на рнс.
8.13. Затем мы выбираем те кортежи произведения, где значение атрибута ЛичныйНомер из отношения СТУДЕНТ равно значению атрибута НомерСтудента из отношения ЗАПИСЬ (таких кортежей только три). Результат этой операции изображен на рис. 8.16, а. Заметьте, что у нас имеется два идентичных атрибута СТУДЕНТ.ЛичныйНомер и ЗАПИСЬ.НомерСтудента.
Один из нпх является лишним, п мы его исключаем путем проектирования (в данном случае мы выбираем ЗАПИСЬ.НомерСтудента). Результатом является отношение на рис. 8.16, б. Соединение на рис. 8.16, а называется экеиеалентньы1 соединением (ецш1о[п), а соединение на рис. 8.16, б— т тестеенньси соединением (пагцга1 ]о[в), Если нс указано иного, то когда говорят о соединении, подразумевается естествеш1ое соединение.
Поскольку построение произведения двух больших отношений является длительной операцией, алгоритм, который использует СУБД для соединения двух отношений. отличается от того, который описан здесь Результат, однако, остаетгя тем же самым. Можно выполнять соединение и по другим условиям, а не только по равенству. В качестве примеров можно привести соединения СТУДЕНТ ЗО[Н [ЛичныйНомер и НомерСтудента) ЗАПИСЬ или СТУДЕНТ З01Н (ЛичныйНомер < НомерСотрудника) ППС. Результатом последнего соединения явится набор кортежей, в котором номера студентов меньше, чем номера сотрудников. Такая операция может иметь смысл, если, скажем, идентификаторы присваиваются людям в хронологическоь1 порядке.
В результиру1ошем отношении будут представлены пары студент — преподаватель, в которых студент появился в учебном заведении раньше, чем преподаватель. Реляционная алгебра 295 Личный Номер 123 ДЖОНС ИСТОРИЯ 123 Н350 ИСТОРИЯ 123 ДЖОНС 123 ВА490 105 АНДЕРСОН МЕНЕДЖМЕНТ 105 ВА490 Личный Номер Личный Номер Пример Формат Тяп СТУДЕНТ[Имя] ТРЕТЬЕКУРСНИК[Имп] ЗАНЯТИЯ У(НЕЯЕ НазваниеПредметв = 'А' СТУДЕНТ [Имя, Специальность) СТУДЕНТ 301Н (ЛичныйНомер=иомерСтудента) ЗАПИСЬ ц †, пересечение, перемножение Операции над множествам Выборка отношение ЬУНЕЯЕ (условие) ПРоекция Соединение отношение [список атрибутов! отношение1 30(Н (условие) отношение 2 студент герт Онтей зонч (ЛичныйНомер=номерСтудента) ЗАПИСЬ Внутреннее соединение Внешнее соединение То же, что и соединение студент серг Оцтей 30)н (ЛичныйНомер=НомерСтудента) ЗАПИСЬ отношение1 ЬЕРТ 0()ТЕЛ 301Н (условие) отношение 2 или отношение! й(ЙНТ 0()ТЕЛ 301Н (условие) отношение 2 294 Глава 8.
Основы построения реляционных баз данных Номер Название Порядковый ИмЯ Специальность Курс Студента Предмета Номер Название Порядковый Имя Специальность Курс Предмета Номер Номер Название Порядковый Имя Специальность КуРс Студента Предмета Номер Рис. 8.16. Примеры соединения отношений СТУДЕНТ и ЗАПИСЬ: в — эквивалентное соединение; б — естественное соединение; в — левое внешнее соединение Есть одно важное ограничение на условия соединения: атрибуты, входящие в условие, должны относиться к одному и тому же домену, поэтому соединение вида СТУДЕНТ 301Н (Специальность НазваниеПредмета) ЗАНЯТИЯ противоречит логике. Даже при том, что значения атрибутов Специальность и НазваниеПредмета имею~ тип Сйаг (10), они относятся к разным доменам. С семантической точки зрения такого рода соединение не имеет смысла.
(К сожалению, многие реляционные СУБД допускают такие соединения.) Внешнее соединение Операция соединения приведет к о~ношению, в котором перечислены студенты и предметы, на которые они записаны. Студенты, пе записанные ни на один из предметов, не будут представленьг э результатах. Если мы хотим включить в результирующее отношение всех студентов, можно пспользовать внешнее соединение (ощег)о[п).
Так, в результате операции левого внешнего соединения (]е(с оцгег ]ош), имеющей вид СТУДЕНТСЕЕТООТЕР30[Н(ЛичныйНомер НомерСтудента) ЗАПИСЬ, получится отношение, в котором будут присутствовать все строки из отношения СТУДЕНТ. Данное отношение представлено на рис. 8.16, в. В нем фигурирует студент Смит, хотя этот студент не записан ни на один из предметов.
Ключевое слово СЕЕТ (левый) указывает, что в результате должны быть представлены все строки из отношения, находящегося по левую сторону от оператора соединения (в нашем случае это отношение СТУДЕНТ). Операпия правого внешнего соединения (Пййс ~ш(ег]огп), имеющая вид СТУДЕНТ Р16НТ 00ТЕ Р 301Н (Личный Номер = НомерСтудента) ЗАПИСЬ, приведет к опшшению, в котором будут присутствовать все строки из таблицы, находящейся справа от оператора соединения, — а именно таблицы ЗАПИСЬ. Внешнее соединение удобно использовать при работе со связями, в которых минимальное кардинальное число равняегся нулю с одной или с обеих сторон. Иногда, когда во избежание неоднозначности требуется указать, какой именно тнп соединения имеется в виду, вместо термина соединение используется термин внутреннее соединение (гппег ]ош).
Выражение запросов в терминах реляционной алгебры В табл. 8.2 перечислены все основные операции реляционной алгебры, описанные выше. Из них стандартными операциями теории множеств являются объединение (+), вычитание (-), пересечение и произведение. Операция выборки ныделяет из отношения определенные кортежи (строки) в соответствии с услопнями, наложенными на значения атрибутов. Операция проектирования выделяет нз отношения атрибуты (столбцы) по заданным именам. Наконец, операция соединения копкатенирует кортежи двух отношений в соответствии с условием, наложенным на значения атрибутов. Таблица 8.2. Операции реляционной алгебры Теперь посмотрим, как с помощью реляционных операторов можно форлгулпровать запросы.
Воспользуемся для этого отношениями СТУДЕНТ, ЗАНЯТИЯ и ЗАПИСЬ, показанными на рис. 8.12. Данные для примера представлены на рнс. 8.17. Наша цель состоит в том, чтобы продемонстрировать различные операции Реляционная алгебра 297 Личный Н о м а р И С л е ц и а л ь н ь К У Р С Номер Студента Название Предмета Порядковый Номер Название Предмета Время Аудитория 296 Глава 8. Основы построения реляционных баз данных с отношениями. Хотя вы, скорее всего, не будете использовать реляционную алгебру при работе с коммерческими продуктами, этп примеры помогут вам понять, каким образом можно манипулировать отношениями. а Рис.
В.17. Данные для отношений, определенных на рис. 8.11: а — отношение СТУДЕНТ; б — отношение ЗАПИСЬ; е — отношение ЗАНЯТИЯ 1. Вывести имена всех студен~он. СТУДЕНТ ЕИии] Эта строка проектирует отношение СТУДЕНТ на атрибут Имя. Результатом является следующая таблица: Повторяющиеся имена могут быть опуптены. Хотя имена Дтконс и Бейкер фигурируют в отношении СТУДЕНТ дважды, повторения были исключены, поскольку результат проектирования представляет собой отношение, а от- ношение не может содержать одинаковые кортежи.