
- •Уровни представления данных в бд
- •Языки баз данных
- •Логическая структура данных
- •Операции над данными
- •10. Иерархическая модель данных
- •Реляционная модель данных
- •Основные понятия реляционной модели данных
- •Таким образом, отношение - это совокупность кортежей, т.Е. Таблица со всеми своими строками.
- •Ключи отношений
- •Поставщик изделие
- •Первичный ключ никогда не должен принимать нулевого значения, а в составном ключе ни одна из компонент никогда не должна быть нулевой.
- •Контроль ссылочной целостности
- •Нормализация отношений реляционной бд
- •Первая нормальная форма
- •Поставки1 поставки
- •Поставщик1 поставки
- •Операции над отношениями
- •Теоретико-множественные операции
- •Запрос 4
- •Язык sql - общие сведения
- •Язык запросов qbe
- •Запрос 1
- •Запрос 2
Операции над отношениями
Над отношениями реляционной БД можно выполнять операции реляционной алгебры и реляционного исчисления. Запрос к БД можно записать в виде формулы, результат вычисления которой представляет собой ответ на этот запрос. Поэтому все манипуляции с данными можно свести к вычислению соответствующих формул. Языки данных реляционных СУБД позволяют записывать эти формулы с помощью операторов языка данных конкретной СУБД. В различных СУБД реализована определенная часть операций над отношениями, определяющая возможности данной СУБД и сложность составления запросов к БД.
Операции реляционной алгебры можно разделить на две группы.
Первую группу составляют операции над множествами. Поскольку отношение представляет собой множество (множество кортежей), то над отношениями можно выполнять теоретико-множественные операции. К ним относятся операции объединения, пересечения, разности и декартова произведения.
Вторую группу составляют специальные операции над отношениями: сцепление, композиция и проекция. При составлении запросов наиболее часто используются операции сцепления (соединения) отношений и проекции отношения на его компоненты.
Теоретико-множественные операции
При выполнении этих операций над двумя отношениями последние должны быть совместимы по структуре. Совместимость структур означает совместимость по атрибутам отношений (атрибуты имеют одинаковый смысл) и совместимость типов соответствующих доменов. Частным случаем совместимости является идентичность. Такие отношения имеют одинаковую арность и одинаковые имена атрибутов.
Пусть имеются два идентичных бинарных отношения с именами R и S, состоящие из атрибутов А1 и А2.
Объединением отношений R и S (R S) называется новое отношение, состоящее из кортежей <x, y>, принадлежащих либо отношению R, либо отношению S.
R |
|
|
S |
|
|
RS |
|
|
RS |
|
|
R\ S |
|
A 1 |
A 2 |
|
A 1 |
A 2 |
|
A 1 |
A 2 |
|
A 1 |
A 2 |
|
A 1 |
A 2 |
a |
b |
|
p |
q |
|
a |
b |
|
a |
b |
|
l |
k |
c |
d |
|
c |
d |
|
c |
d |
|
c |
d |
|
m |
p |
l |
k |
|
a |
b |
|
l |
k |
|
|
|
|
|
|
m |
p |
|
l |
n |
|
m |
p |
|
|
|
|
|
|
|
|
|
|
|
|
p |
q |
|
|
|
|
|
|
|
|
|
|
|
|
l |
n |
|
|
|
|
|
|
Пересечением отношений R и S (RS ) называется новое отношение, состоящее из кортежей <x, y>, принадлежащих одновременно отношениям R и S.
Разностью отношений R и S (R\ S) называется отношение, кортежи которого принадлежат R но не принадлежат S.
Операция декартова произведения рассматривалась нами выше.
Специальные операции над отношениями
Пусть имеются два бинарных отношения с именами R и S. Отношение R состоит из атрибутов А1 и А2, отношение S - из атрибутов А2 и А3.
Сцепление отношений
Можно выполнить операцию сцепления двух отношений по одинаковым значениям одноименных атрибутов Ai. Атрибуты, по которым выполняется сцепление, должны быть определены на одном и том же домене. Операцию сцепления обозначим символом *.
Сцеплением бинарных отношений R и S называется новое отношение R*S, состоящее из кортежей <x, y, z>, для которых кортеж <x, y> принадлежит R, а <y, z> принадлежит S.
Пример
Определим результат выполнения операции сцепления отношений R и S, атрибуты которого А2 определены на одном и том же домене. Это значит, что если в столбце с именем А2 таблицы R содержатся, например, названия городов, то и в столбце А2 таблицы S также содержатся названия городов.
R S R*S R*M
-
А1
А2
А2
А3
А1
А2
А3
А1
А2
a
b
b
k
a
b
k
a
b
c
b
d
f
c
b
k
c
b
c
d
d
p
c
d
f
e
q
c
d
p
В результате сцепления двух бинарных отношений получено новое тернарное отношение, кортежи которого оказались "сцеплены" по одинаковым значениям атрибута А2
Иными словами, в результате сцепления двух таблиц, состоящих из двух столбцов, получена новая таблица, состоящая из трех столбцов. Строки результирующей таблицы "сцеплены" по одинаковым значениям, находящимся в столбцах с именем А2.Таким образом, информация из одной таблицы оказалась "привязанной" к информации из другой таблицы.
В общем случае, если отношение R имеет арность m, а отношение S - арность n , то R*S будет иметь арность m+n-1.
Эта операция называется еще операцией соединения или естественного соединения.
Можно выполнить сцепление отношения с множеством.
Пусть множество М является одноэлементным и содержит одно значение {b} из того же домена, на котором задан атрибут А2 отношения R. Тогда результатом операции сцепления будет отношение R*M, состоящее из тех кортежей отношения R, у которых значение атрибута А2 равно b.
Иными словами, в результате сцепления таблицы R с константой b из таблицы R оказались выбранными стоки, содержащие в столбце А2 значение b. Если в столбце А2 содержались, например, названия городов, то из таблицы отберутся строки с заданным названием города. Эта операция называется еще выборкой.
Проекция отношения на его компоненты
Проекцией отношения R на его i-ю компоненту (атрибут Аi ) называется множество, состоящее из различных значений этого атрибута. Операция проекции обозначается R [Аi].
Пример
Найдем проекцию отношения R на его атрибут А2. В результате получим множество {b, d, q}. Иными словами, результатом проекции является множество различных значений, образующих столбец А2 таблицы R.
Можно выполнять операцию проекции на несколько компонент.
Использование реляционной алгебры для составления
запросов к БД
Для полученной ранее модели данных, состоящей из трех нормализованных отношений ПОСТАВЩИК, ПОСТАВКИ, ДОСТАВКА составим запросы, запишем их в виде формул реляционной алгебры и получим результаты для каждого из запросов.
При составлении запросов и вычислении формул следует помнить о том, что результатом выполнения любой операции над отношением является новое отношение, к которому, в свою очередь, можно применить любую операцию реляционной алгебры. Эта важная идея создания новых таблиц на основе старых позволяет составлять запросы любой сложности.
Запрос 1
Сообщить название фирмы-поставщика П1.
Мы получим ответ на этот запрос, если из таблицы ПОСТАВЩИК выделим строку, содержащую сведения о поставщике П1. Это можно сделать, выполнив операцию сцепления отношения ПОСТАВЩИК с известной из запроса константой П1 (т.е. выполнив операцию сцепления отношения с одноэлементным множеством {П1}).
ПОСТАВЩИК * {П1}
В результате выполнения операции получим новое отношение, состоящее из единственного кортежа (т.е. таблицу, состоящую из одной строки).
-
П1
Восход
Тула
Полученная строка содержит лишние сведения. Уточним ответ, применив к вновь полученному отношению операцию проекции на атрибут Имя поставщика. Полученная формула и является формулой запроса.
ПОСТАВЩИК * {П1} [Имя поставщика]
В результате будет выделен один столбец. Это и будет ответом на запрос.
-
Восход
Запрос 2
В каком количестве поставляются изделия И2?
Искомые сведения находятся в таблице ПОСТАВКИ. Аналогично Запросу 1 применим к отношению ПОСТАВКИ операцию сцепления с известной константой И2, а затем спроектируем полученное отношение на атрибут Кол.
ПОСТАВКИ * {И2} [Кол]
Результаты выполнения операций.
-
П1
П2
И2
И2
200
500
-
200
500
Запрос 3
Сколько изделий И2 поставляет фирма Заря?
В этом запросе известными являются значения двух атрибутов: Имя поставщика = Заря и номер изделия - И2. Известные и искомые данные находятся в двух таблицах: ПОСТАВЩИК и ПОСТАВКИ, поэтому для ответа на запрос необходимо "привязать" сведения из одной таблицы к сведениям из другой таблицы. Это можно сделать, выполнив операцию сцепления отношений по атрибуту П#.
Для выработки ответа на запрос выполним следующие действия:
- узнаем значение атрибута П#, выполнив операцию сцепления отношения ПОСТАВЩИК с одноэлементным множеством Заря;
- выполним операцию сцепления полученного результата с отношением ПОСТАВКИ по атрибуту П#;
- выполнив операцию сцепление отношения с одноэлементным множеством, выделим кортежи, содержащие сведения об изделии И2;
- и, наконец, выполним проекцию на атрибут Кол.
Запишем формулу запроса.
ПОСТАВЩИК * {Заря} * ПОСТАВКИ * {И2} [Кол]
Определим результаты выполнения каждой из операций.
1. В результате выполнения операции сцепления отношения ПОСТАВЩИК с одноэлементным множеством {Заря} получим новое отношение, содержащее единственный кортеж (т.е. новую таблицу, состоящую из одной строки).
-
П2
Заря
Самара
2. Вторая операция выполняет сцепление полученного отношения, имеющего арность 3, с отношением ПОСТАВКИ, имеющим также арность 3, по одинаковому значению атрибута П#. В результате получим новое отношение арностью 5. В него войдут все кортежи сцепляемых отношений, у которых значение атрибута П# = П2.
-
П2
Заря
Самара
И1
200
П2
Заря
Самара
И2
500
3. В результате выполнения третьей операции из полученного отношения выберутся строки, в которых значение атрибута И# равно И2.
4. С помощью операции проекции уточним ответ, выделив столбец Кол.
-
П2
Заря
Самара
И2
500
500