Еще одна стандартная унарная операция, которую мы изучим, – это операция проекции. Операция проекции
– это операция выбора столбцов из таблицы, представляющей отношение, по
какому-либо признаку. А именно машина выбирает те атрибуты (т. е.
буквально те столбцы) исходного отношения-операнда, которые были указаны
в проекции.
Оператор проекции обозначается [S'] или π<S'>. Здесь S' – подсхема исходной схемы отношения S, т. е. ее некоторые столбцы. Что это означает? Это означает, что у S’ атрибутов меньше, чем у S, потому что в S' остались только те из них, для которых выполнилось условие проекции. А в таблице, представляющей отношение r(S' ), строк столько же, сколько их у таблицы r(S), а столбцов – меньше, так как остались только соответствующие оставшимся атрибутам. Таким образом, оператор проекции π< S'> применительно к отношению r(S) дает в результате новое отношение с другой схемой отношения r(S' ), состоящее из проекций t(S) [S' ] кортежей исходного отношения. Как определяются эти проекции кортежей? Проекция любого кортежа t(S) исходного отношения r(S) на подсхему S' определяется следующей формулой:
t(S) [S’] = {t(a)|a ∈ def(t) ∩ S’}, S' ⊆S.
Важно заметить, что дубликаты кортежей из
результата исключаются, т. е. в таблице, представляющей новое,
результирующее отношение повторяющихся строк не будет.
С учетом всего вышесказанного, операция проекции в терминах систем управления базами данных будет выглядеть следующим образом:
π<S'>r(S) ≡ π<S’>r ≡ r(S) [S’] ≡ r [S' ] = {t(S) [S’] | t ∈ r };
Рассмотрим пример, иллюстрирующий принцип работы операции выборки.
Пусть дано отношение «Сессия» и схема этого отношения:
S: Сессия (№ зачетной книжки, Фамилия, Предмет, Оценка);
Нас будут интересовать только два атрибута из этой схемы, а именно «№ зачетной книжки» и «Фамилия» студента, поэтому подсхема S' будет выглядеть следующим образом:
S' : (№ зачетной книжки, Фамилия).
Нужно исходное отношение r(S) спроецировать на подсхему S'.
Далее, пусть нам дан кортеж t0(S) из исходного отношения:
t0(S) ∈ r(S): {(№ зачетной книжки: 100), (Фамилия: ‘Иванов’), (Предмет: ‘Базы данных’), (Оценка: 5)};
Значит, проекция этого кортежа на данную подсхему S' будет выглядеть следующим образом:
t0(S) S': {(№ зачетной книжки: 100), (Фамилия: ‘Иванов’)};
Если говорить об операции проекции в
терминах таблиц, то проекция Сессия [№ зачетной книжки, Фамилия]
исходного отношения – это таблица Сессия, из которой вычеркнуты все
столбцы, кроме двух: № зачетной книжки и Фамилия. Кроме того, все
дублирующиеся строки также удалены.
|