Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материалы к БД по дисциплине.docx
Скачиваний:
19
Добавлен:
21.04.2019
Размер:
1.3 Mб
Скачать

2. Специальные операции:

Проекция – это унарная операция на отношениях, т.е. в этой операции участвует только одно отношение. Проекцией отношения, имеющего множество атрибутов R на некоторый список имен атрибутов L , называется отношение с заголовком, определяемым списком L и телом, множество кортежей которого получается из кортежей исходного отношения путем вычеркивания элементов соответствующих атрибутам R-L. Проекция дает вертикальное подмножество отношений.

Пример1. Показать имена и статус всех поставщиков.

S {SNAME, STATUS}

SNAME

STATUS

Smith

20

Jones

10

Black

30

Проекция, в который список атрибутов пустой называется нулевой проекцией. Часто удобно указывать не те атрибуты, по которым берется проекция, а те которые проекцией отбрасываются.

P {All BUT WGT}

Выбор (селекция). Выбором из отношения D по условию F называется отношение имеющие тот же заголовок, что и отношение D и множество кортежей из исходного отношения для которых проверка условий F дает значение – истина.

D WHERE X  literal

В качестве операций могут быть указаны операции сравнения (>,<,= и др.). Выбор дает горизонтальное подмножество кортежей. Литерал – это значение, указанное непосредственно в тексте программы.

Пример2. Показать всю информацию о деталях красного цвета.

P WHERE COLOR= Red’

P

PNAME

COLOR

WGT

City

P1

Nut

Red

12

London

P4

Screw

Red

14

London

Соединение. Операция реляционной алгебры, связывающая отношения. Соединения бывают различных видов. Рассмотрим  - соединение и естественное соединение.

- соединение(соединение по условию).

- соединением отношения С по атрибуту Х с отношением D по атрибуту Y называется результат вычисления следующего выражения

(С TIMES D) WHERE X  Y

Если  «>», то выбирать строки, где X > Y. Такое  - соединение называется “больше,чем”.

Даны два отношения C и D. Выполнить  - соединение отношений C и D по условию B < X.

С D

X

Y

3

1

6

2

А

В

С

1

2

3

4

5

6

7

8

9


(C TIMES D) WHERE B < X

A

B

C

X

Y

1

2

3

3

1

1

2

3

6

2

4

5

6

6

2

Эквисоединение (равносоединение).

Эквисоединение – это тета соединение, основанное на равенстве значений определенных столбцов. Здесь оператор  равен «=»

(C TIMES D) WHERE X=Y

Естественное соединение.

Естественным соединением (C JOIN D) отношений C и D , имеющих множество атрибутов X,Y и Y,Z соответственно, где Y общее подмножество атрибутов из C и D, определенных на одних и тех же доменах, называется отношение с заголовком { X,Y,Z } и телом, содержащим множество кортежей таких, для которых в отношении C значение атрибута X равно x, а Y равно y , и в отношении D значение атрибута Z равно z.

Пример естественного соединения отношений C и D:

C D

Y

Z

B1

C1

B2

C1

B3

C2

X

Y

A1

B1

A2

B1

A3

B2


C JOIN D

X

Y

Z

A1

B1

C1

A2

B1

C1

A3

B2

C1

Пример3. Получить всю информацию о поставщиках и поставках. Выполнить естественное соединение (S JOIN SP) отношений S и SP.

Найдем сначала декартово произведение отношений S и SP. Перед выполнением этой операции необходимо переименовать атрибуты отношений так, чтобы у них не было одинаковых атрибутов. Переименуем атрибуты S# в отношении SP в атрибут SPS #

S TIMES (SP RENAME S# As SPS#)

S#

SNAME

STATUS

CITY

SPS#

P#

QTY

S1

Smith

20

London

S1

P1

300

S1

Smith

20

London

S1

P2

200

S1

Smith

20

London

S1

P3

400

S1

Smith

20

London

S2

P1

300

S1

Smith

20

London

S2

P2

400

S1

Smith

20

London

S3

P2

200

S2

Jones

10

Paris

S1

P1

300

S2

Jones

10

Paris

S1

P2

200

S2

Jones

10

Paris

S1

P3

400

S2

Jones

10

Paris

S2

P1

300

S2

Jones

10

Paris

S2

P2

400

S2

Jones

10

Paris

S3

P2

200

S3

Black

30

Paris

S1

P1

300

S3

Black

30

Paris

S1

P2

200

S3

Black

30

Paris

S1

P3

400

S3

Black

30

Paris

S2

P1

300

S3

Black

30

Paris

S2

P2

400

S3

Black

30

Paris

S3

P2

200

Таблица1. Декартово произведение отношений S и SP.

Выполним эквисоединение отношений S и SP.

(S TIMES (SP RENAME S# As SPS#)) WHERE S# = SPS#

Из предыдущей таблицы выберем строки, в которых значения атрибутов S# и SPS# равны. Получим следующее отношение.

S#

SNAME

STATUS

CITY

SPS#

P#

QTY

S1

Smith

20

London

S1

P1

300

S1

Smith

20

London

S1

P2

200

S1

Smith

20

London

S1

P3

400

S2

Jones

10

Paris

S2

P1

300

S2

Jones

10

Paris

S2

P2

400

S3

Black

30

Paris

S3

P2

200

Таблица 2. Эквисоединение отношений S и SP.

Если в этом отношении (Таблица 2) опустить один атрибут, например SPS#

((S TIMES (SP RENAME S# As SPS#)) WHERE S# = SPS#){All BUT SPS#}, (А)

то получим естественное соединение отношений S и SP .

(S JOIN SP) (В)

S#

SNAME

STATUS

CITY

P#

QTY

S1

Smith

20

London

P1

300

S1

Smith

20

London

P2

200

S1

Smith

20

London

P3

400

S2

Jones

10

Paris

P1

300

S2

Jones

10

Paris

P2

400

S3

Black

30

Paris

P2

200

Таблица 3. Естественное соединение отношений S и SP .

Выражения (А) и (В) эквивалентны.

Пример4. Определить имена поставщиков детали ‘P3’.

Сначала выполняется естественное соединение отношений S и SP по общему атрибуту S#. Затем в результате соединения выбираются кортежи, в которых P# = ‘P3’ Получаем всю информацию о поставщиках и поставках детали ‘P3’.

(S JOIN SP) WHERE P = ‘P3’ (С)

S#

SNAME

STATUS

CITY

P#

QTY

S1

Smith

20

London

P3

200

S2

Jones

10

Paris

P3

400

S3

Black

30

Paris

P3

200

Далее выполняется проекция по атрибуту SNAME полученной выборки:

((S JOIN SP) WHERE P# = ‘P3’){SNAME} (D)

Результат запроса:

SNAME

Smith

Предыдущее выражение (D) можно преобразовать в логически эквивалентное и более рациональное выражение следующего вида:

((SP WHERE P# = ‘P3’) JOIN S){SNAME} (F)

Реляционная алгебра может служить хорошим основанием для оптимизации.

Деление. Пусть отношения С и D имеют заголовки {X1, X2, …, XM} {Y1, Y2, …, YN} соответственно. Заголовки не пересекаются. Пусть имеется отношение Z с заголовком {X1, X2, …, XM, Y1, Y2,…, YN}. Результат деления отношения С на отношение D по отношению Z (C DIVIDEBY D PER Z, где отношение С - делимое, отношение D - делитель, Z - отношение-посредник) называется отношение, содержащее такие значения Х из отношения С, для которых соответствующие значения Y из Z включают все значения Y из D.

Z

S#

P#

S1

P1

S1

P2

S1

P3

S2

P1

S2

P2

S3

P2

С

S#

S1

S2

S3

D

P1

P2

P3

C DIVIDEBY D PER Z

S#

S1

Лекция 5. Реляционное исчисление.

Реляционная модель в части манипулирования данными построена на базе реляционной алгебры и реляционного исчисления.

Исчисление кортежей и исчисление доменов

Предположим, что мы работаем с базой данных, обладающей схемой СОТРУДНИКИ (СОТР_НОМ, СОТР_ИМЯ, СОТР_ЗАРП, ОТД_НОМ) и ОТДЕЛЫ (ОТД_НОМ, ОТД_КОЛ, ОТД_НАЧ), и хотим узнать имена и номера сотрудников, являющихся начальниками отделов с количеством сотрудников больше 50.

Если бы для формулировки такого запроса использовалась реляционная алгебра, то мы получили бы алгебраическое выражение, которое читалось бы, например, следующим образом:

  • выполнить соединение отношений СОТРУДНИКИ и ОТДЕЛЫ по условию СОТР_НОМ = ОТД_НАЧ;

  • ограничить полученное отношение по условию ОТД_КОЛ > 50;

  • спроецировать результат предыдущей операции на атрибут СОТР_ИМЯ, СОТР_НОМ.

Мы четко сформулировали последовательность шагов выполнения запроса, каждый из которых соответствует одной реляционной операции. Если же сформулировать тот же запрос с использованием реляционного исчисления, которому посвящается этот раздел, то мы получили бы формулу, которую можно было бы прочитать, например, следующим образом: Выдать СОТР_ИМЯ и СОТР_НОМ для сотрудников таких, что существует отдел с таким же значением ОТД_НАЧ и значением ОТД_КОЛ большим 50.

Во второй формулировке мы указали лишь характеристики результирующего отношения, но ничего не сказали о способе его формирования. В этом случае система должна сама решить, какие операции и в каком порядке нужно выполнить над отношениями СОТРУДНИКИ и ОТДЕЛЫ. Обычно говорят, что алгебраическая формулировка является процедурной, т.е. задающей правила выполнения запроса, а логическая - описательной (или декларативной), поскольку она всего лишь описывает свойства желаемого результата. Как мы указывали в начале лекции, на самом деле эти два механизма эквивалентны и существуют не очень сложные правила преобразования одного формализма в другой.