- •Лекция 1,2. Основные понятия. Введение в базы данных.
- •2. Управление буферами оперативной памяти.
- •3. Управление транзакциями
- •4. Журнализация
- •5. Поддержка языков бд
- •Теоретические языки запросов.
- •1. Теоретико – множественные операции
- •2. Специальные операции:
- •Кортежные переменные и правильно построенные формулы
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •Лекция 6. Табличный язык запросов qbe
- •1. Запросы на выборку
- •2. Запросы на обновление
- •Запросы с использованием группировки и обобщающего набора функций:
- •Запрос для вычисления выражения
- •Лекция 7. Язык sql. Определение данных, манипулирование данными.
- •Раздел from
- •Раздел where
- •Раздел group by
- •Раздел having
- •Агрегатные функции и результаты запросов
- •Семантика агрегатных функций
- •Результаты запросов
- •Операторы определения и манипулирования данными.
- •Операторы определения данных. Определение таблицы.
- •Определение столбца
- •Операторы манипулирования данными.
- •Основные понятия модели Сущность-Связь.
- •Инфологическое проектирование.
- •Лекция 12.
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.
Во второй формулировке мы указали лишь характеристики результирующего отношения, но ничего не сказали о способе его формирования. В этом случае система должна сама решить, какие операции и в каком порядке нужно выполнить над отношениями СОТРУДНИКИ и ОТДЕЛЫ. Обычно говорят, что алгебраическая формулировка является процедурной, т.е. задающей правила выполнения запроса, а логическая - описательной (или декларативной), поскольку она всего лишь описывает свойства желаемого результата. Как мы указывали в начале лекции, на самом деле эти два механизма эквивалентны и существуют не очень сложные правила преобразования одного формализма в другой.