Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
26.05.2014
Размер:
462.34 Кб
Скачать

Проектирование

Проектирование (projection) — это операция, которая выделяет заданные атрибу­ты отношения. Результатом проектирования является новое отношение, содер­жащее выбранные атрибуты; иными словами, при проектировании из исходного отношения выбирается некоторое множество столбцов. В качестве примера рас­смотрим отношение СТУДЕНТ из рис. 8.12, а. На рис. 8.14, а показана проекция этого отношения на атрибуты Имя и Специальность, которая обозначена СТУДЕНТ [Имя, Специальность]. На рис. 8.14, б показана проекция этого отношения на атри­буты Специальность и Курс, обозначенная СТУДЕНТ [Специальность, Курс].

Обратите внимание, что хотя отношение СТУДЕНТ имеет четыре кортежа, про­екция СТУДЕНТ [Специальность, Курс] имеет только три. Один кортеж был исклю­чен, поскольку после выполнения операции проектирования кортеж [ИСТОРИЯ, С1] оказался в результирующем отношении в двух экземплярах. Так как результат проектирования является отношением, а отношение не может иметь одинаковых кортежей, избыточный кортеж был исключен.

Проекцию можно также использовать для изменения порядка следования атрибутов в отношении. Например, проекция СТУДЕНТ [Курс, Специальность, Имя, ЛичныйНомер] меняет порядок атрибутов в отношении СТУДЕНТ на обратный (ис­ходный порядок представлен на рис. 8.11). Иногда эта возможность позволяет сделать два отношения совместимыми по объединению.

Выборка

В то время как оператор проектирования выделяет вертикальное подмножество (столбцы) отношения, оператор выборки (selection) выделяет горизонтальное под­множество (строки). Проектирование указывает, какие атрибуты должны быть в новом отношении, а выборка указывает, какие строки должны в нем присутство­вать. Обозначается выборка путем указания имени отношения, за которым следует ключевое слово WHERE («где»), за которым, в свою очередь, идет условие, наклады­ваемое на атрибуты. На рис. 8.15, а представлена выборка СТУДЕНТ WHERE Специаль­ность = 'МАТЕМАТИКА', а на рис. 8.15, б - СТУДЕНТ WHERE Курс = 'С1\

Соединение

Операция соединения (join) представляет собой комбинацию произведения, вы­борки и (возможно) проектирования. Соединение двух отношений А и В происхо­дит следующим образом. Сначала формируется произведение А х В. Затем дела­ется выборка, при которой исключаются некоторые кортежи (критерии отбора указываются в операторе соединения). После этого путем проектирования могут быть (при необходимости) исключены некоторые атрибуты.

Рассмотрим отношения СТУДЕНТ и ЗАПИСЬ, показанные на рис. 8.12. Предполо­жим, мы хотим знать имя и номер каждого студента. Чтобы получить эти дан­ные, нам нужно соединить кортежи отношения СТУДЕНТ с соответствующими кортежами отношения ЗАПИСЬ на основании атрибута НомерСтудента. Такое со­единение мы обозначаем как СТУДЕНТ JOIN (ЛичныйНомер= НомерСтудента) ЗАПИСЬ . Эта запись означает: «Соединить кортеж отношения СТУДЕНТ с кортежем отно­шения ЗАПИСЬ, если значение атрибута ЛичныйНомер в отношении СТУДЕНТ равня­ется значению атрибута НомерСтудента в отношении ЗАПИСЬ».

Чтобы построить это соединение, мы сначала находим произведение отноше­ний СТУДЕНТ и ЗАПИСЬ — результат этой операции представлен на рис. 8.13. Затем мы выбираем те кортежи произведения, где значение атрибута ЛичныйНомер из отношения СТУДЕНТ равно значению атрибута НомерСтудента из отношения ЗАПИСЬ (таких кортежей только три). Результат этой операции изображен на рис. 8.16, а. Заметьте, что у нас имеется два идентичных атрибута: СТУДЕНТ.ЛичныйНомер п ЗАПИСЬ.НомерСтудента. Один из них является лишним, и мы его исключаем путем проектирования (в данном случае мы выбираем ЗАПИСЬ.НомерСтудента).

Результатом является отношение на рис. 8.16, б. Соединение на рис. 8.16, а называется эквивалентным соединением (equijoin), а соединение на рис. 8.16, б — естественным соединением (natural join). Если не указано иного, то когда гово­рят о соединении, подразумевается естественное соединение.

Поскольку построение произведения двух больших отношений является дли­тельной операцией, алгоритм, который использует СУБД для соединения двух отношений, отличается от того, который описан здесь. Результат, однако, остает­ся тем же самым.

Можно выполнять соединение и по другим условиям, а не только по равенству. И качестве примеров можно привести соединения СТУДЕНТ JOIN (ЛичныйНомер* НомерСтудента) ЗАПИСЬ или СТУДЕНТ JOIN (ЛичныйНомер < НомерСотрудника) ППС. Результатом последнего соединения явится набор кортежей, в котором номера студентов меньше, чем номера сотрудников. Такая операция может иметь смысл, если, скажем, идентификаторы присваиваются людям в хронологическом поряд­ке. В результирующем отношении будут представлены пары студент—преподава­тель, в которых студент появился в учебном заведении раньше, чем преподаватель.

Есть одно важное ограничение на условия соединения: атрибуты, входящие в условие, должны относиться к одному и тому же домену, поэтому соединение вида СТУДЕНТ JOIN (Специальность = НазваниеПредмета) ЗАНЯТИЯ противоречит ло­гике. Даже при том, что значения атрибутов Специальность и НазваниеПредмета имеют тип Char (10), они относятся к разным доменам. С семантической точки зрения такого рода соединение не имеет смысла. (К сожалению, многие реляци­онные СУБД допускают такие соединения.)

Соседние файлы в папке ИТПРЭС 2008 (Информационные технологии в проектировании РЭС)