Тема №15

15 РЕЛЯЦИОННАЯ МОДЕЛЬ ДАННЫХ

15.1 Основные понятия реляционной модели данных

Реляционная модель данных была предложена американским математиком Э.Ф. Коддом, который в 1970 г. впервые сформулировал ее основные понятия. В настоящее время это самая распространенная модель данных.

В основе реляционной модели данных лежит понятие «отношение» (relation). Отношение отображает некоторый объект, объект характеризуется набором атрибутов D1, D2,…, Dn . Каждый атрибут — набором допустимых значений, называемым доменом. Пусть

D1 = {x1 , x2 ,…, xn}

D2 = {y1 , y2 ,…, yn}

……………………

Dn = {z1 , z2 ,…, zn}

Список имен атрибутов (D1, D2,…, Dn) называется схемой отношения, а количество атрибутов в отношении — степенью отношения.

Отношение определяется как подмножество R декартова произведения D1×D2×Dn, т.е. RD1×D2×Dn. Отметим, что декартово произведение — это набор всевозможных сочетаний из п значений, где каждое значение берется из своего домена. Приведем пример отношения.

Пусть D1 содержит номера трех заказов {1021, 1022, 1023}, D2 — коды двух клиентов {АА, AC}, D3 — веса трех заказов, заданных в килограммах {100, 300, 120}. В этом случае отношение R есть декартово произведение D1×D2×D3, которое представляет собой набор из 18 троек значений, где первое значение — это один из номеров заказов, второе — один из кодов клиентов, а третье — один из весов заказа:

<1021 АА 100>

<1021 АА 300>

<1021 АА 120>

<1022 АА 100>

<1022 АА 300>

<1022 АА 120>

<1023 АА 100>

<1023 АА 300>

<1023 АА 120>

<1021 АС 100>

<1021 АС 300>

<1021 АС 120>

<1022 АС 100>

<1022 АС 300>

<1022 АС 120>

<1023 АС 100>

<1023 АС 300>

<1023 АС 120>

В реляционной модели термин «отношение» используется как синоним слова «таблица». Так, описанное выше отношение можно представить как таблицу следующего вида.

R

Номер заказа | Код клиента | Вес заказа
1021 | АА | 100
1021 | АА | 300
1021 | АА | 120
1021 | AC | 100
1021 | AC | 300
1021 | AC | 120
1022 | AA | 100
1022 | AA | 300
1022 | AA | 120
1022 | AC | 100
1022 | AC | 300
1022 | AC | 120
1023 | AA | 100
1023 | AA | 300
1023 | AA | 120
1023 | AC | 100
1023 | AC | 300
1023 | AC | 120

Столбцы этой таблицы соответствуют атрибутам, а строки называются кортежами. Количество кортежей в отношении называется мощностью отношения.

На практике при моделировании реальных объектов отношения со всевозможными сочетаниями значений атрибутов встречаются редко. Например, если были сделаны три заказа, то отношение R будет содержать только три строки и представляться в виде таблицы:

R

Номер заказа | Код клиента | Вес заказа
1021 | АА | 100
1022 | АС | 300
1023 | АА | 120

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

Таким образом, реляционная модель данных основана не математическом понятии отношения и представлении отношений в форме таблиц.

Таблица в реляционной модели данных (реляционная таблица) обладает следующими свойствами:

1. Каждое значение атрибута, содержащееся на пересечении строки и столбца, должно быть атомарным, т.е. не расчленяться па несколько значений.

2. Значения в столбце должны быть однородными.

3. Каждая строка уникальна, т.е. в таблице не существует двух полностью совпадающих строк.

4. Каждый столбец имеет уникальное имя.

5. Последовательность столбцов в таблице несущественна.

6. Последовательность строк в таблице несущественна.

В качестве примера реляционной таблицы приведем таблицу клИЕНТЫ:

клИЕНТЫ

Код клиента | Клиент | Адрес
АА | БГЭУ | Минск, просп. Партизанский, 26
АБ | Сименс | Мюнхен, ул. Лейбница, 8
АС | Атлант | Минск, просп. Победителей, 61
АД | БГУИР | Минск, ул. Бровки, 6

В таблице реляционной базы данных (базы данных, построенной по реляционной модели) столбцы называют полями, а строки — записями. Одно или несколько полей, значения которых в каждой записи таблицы однозначно ее идентифицируют, называют ключевым полем. В таблице КЛИЕНТЫ таковым может быть поле «Код клиента» или поле «Клиент».

В реляционной базе данных между таблицами устанавливаются связи, которые делают их более информативными, чем они являются по отдельности.

Связь устанавливается посредством связи ключевых полей, содержащих общую информацию для обеих таблиц. Пусть таблица R1 связывается с таблицей R2 . Тогда таблица R1 называется основной (master), а таблица R2 — подчиненной (detail). Ключевое поле основной таблицы называется первичным ключом (primary key), а подчиненной — внешним ключом (foreign key).

Одна запись основной таблицы может быть связана с одной или несколькими записями подчиненной таблицы. При этом значения первичного ключа уникальны, а внешнего — могут повторяться.

В общем виде реляционная модель данных представляет собой множество взаимосвязанных таблиц. Графическое изображение связи между таблицами называется схемой данных.

Имеется таблица ЗАКАЗЫ следующего вида:

ЗАКАЗЫ

Номер заказа | Код клиента | Дата заказа | Вес заказа
1020 | АБ | 01.02.06 | 400
1021 | АА | 01.02.06 | 100
1022 | АС | 12.02.06 | 300
1023 | АА | 20.03.06 | 120
1024 | АБ | 28.05.06 | 600

Рассмотрим связь вышеупомянутой таблицы КЛИЕНТЫ с данной таблицей. Поле «Код клиента» таблицы ЗАКАЗЫ содержит идентификаторы клиентов, сделавших конкретные заказы. Если мы хотим знать, каково название клиента, то необходимо найти его идентификатор в поле «Код клиента» таблицы КЛИЕНТЫ и в найденной записи прочесть значение поля «Клиент». Другими словами, нужно связать таблицы КЛИЕНТЫ и ЗАКАЗЫ. Поскольку один клиент может сделать несколько заказов, то таблица КЛИЕНТЫ является основной, а таблица ЗАКАЗЫ — подчиненной. Поле «Код клиента» таблицы КЛИЕНТЫ является первичным ключом, а таблицы ЗАКАЗЫ — внешним. На рисунке 15.1 представлена схема данных таблиц КЛИЕНТЫ и ЗАКАЗЫ.

Рисунок 15.1 – Схема данных таблиц КЛИЕНТЫ и ЗАКАЗЫ

Существуют следующие основные виды связей:

■ один к одному;

■ один ко многим;

■ многие к одному;

■ многие ко многим

Связь "один к одному" предполагает, что в каждый момент времени каждому элементу (кортежу) отношения А соответствует 0 или 1 элементов (кортежей) отношения В (см. рисунок 15.2). Например, работник получает зарплату, и только одну.

рисунок 15.2 – Связь один к одному

Связь "один ко многим" состоит в том, что в каждый момент времени каждому элементу (кортежу) отношения А соответствует несколько элементов (кортежей) отношения В (см. рисунок 15.3). В качестве примера можно сказать, что в доме проживает много жильцов.

рисунок 15.3 – Связь один ко многим

Связь "многие к одному" предполагает, что в каждый момент времени множеству элементов отношения А соответствует 1 элемент отношения В. Например, несколько студентов представляют собой студенческую учебную группу (см. рисунок 15.4).

рисунок 15.4 – Связь многие к одному

Наконец, связь "многие ко многим" состоит в том, что в каждый момент времени множеству элементов отношения А соответствует множество элементов отношения В (см. рисунок 15.5). К сожалению, этот тип связи в реляционных БД непосредственно не поддерживается. Примером такой связи может служить тот факт, что у студентов учебные занятия по дисциплинам ведут множество преподавателей.

рисунок 15.5 – Связь многие ко многим

Помимо вышеперечисленных, еще могут существовать множественные связи между одними и теми же элементами и тренарные связи (см. рисунок 15.6), которые, могут быть выражены через уже рассмотренные.

рисунок 15.6 – Множественные и тренарные связи

15.2 Условия реляционной целостности

В реляционной модели данных должны выполняться условия целостности данных. Это условие «целостности таблиц» и условие «ссылочной целостности».

Условие «целостности таблиц» накладывает ограничения на значения первичного ключа. Как было сказано выше, значения первичного ключа таблицы должны быть уникальными. Кроме того, они должны быть непустыми. Отсюда следует, что не каждое поле может быть выбрано в качестве первичного ключа.

Условие «ссылочной целостности» предполагает, что каждое значение внешнего ключа должно совпадать с одним из значений первичного ключа. Например, если из таблицы КЛИЕНТЫ удалить запись, которая имеет хотя бы одну подчиненную запись в таблице ЗАКАЗЫ, то в таблице ЗАКАЗЫ окажутся записи о заказах, размещенных неизвестно кем, т.е. нарушается условие ссылочной целостности.

15.3 Операции реляционной алгебры

В процессе обработки реляционных таблиц СУБД выполняет операции реляционной алгебры, такие как объединение, пересечение, декартово произведение, разность, проекция, выборка, соединение, деление.

Операции объединения, пересечения, декартова произведения, разности являются традиционными операциями над множествами.

Операции объединения, пересечения, разности производятся над двумя исходными отношениями R1 и R2, имеющими одинаковый состав и порядок атрибутов. Результатом является отношение такой же структуры.

Объединением двух отношений R1, R2 называется отношение R, содержащее множество кортежей, принадлежащих либо R1 либо R2, либо обоим отношениям R1 и R2 одновременно.

Пусть заданы два отношения R1 = {r1} и R2 = {r2}, где r1 и r2 кортежи отношений R1 и R2 соответственно. Тогда объединение

R= R1R2 = {r|rR1 rR2},

где r – кортеж нового отношения.

Пример 1. Пусть исходными являются отношения R1 и R2, которые содержат перечень номеров заказов и веса заказов, которые оформлялись двумя различными участками отдела сбыта:

R1 | R2

Номер заказа | Вес заказа
1021 | 100
1022 | 300
1023 | 120
1024 | 500
1026 | 200

Номер заказа | Вес заказа
1021 | 100
1022 | 300
1024 | 500
1025 | 300

Тогда объединение R1R2 содержит общий перечень заказов, которые оформлялись в отделе сбыта:

R

Номер заказа | Вес заказа
1021 | 100
1022 | 300
1023 | 120
1024 | 500
1025 | 300
1026 | 200

Пересечением отношений R1 и R2 называется отношение R, которое содержит множество кортежей, принадлежащих одновременно и R1, и R2, т.е.

R= R1R2 = {r|rR1rR2},

где r — кортеж нового отношения.

Пример 2. Пусть отношения R1 и R2 такие же, как в примере 1. Тогда пересечение R1R2 содержит перечень заказов, которые оформлялись обоими участками отдела сбыта:

R

Номер заказа | Вес заказа
1021 | 100
1022 | 300
1024 | 500

Декартово произведение отношений R1 и R2 представляет собой отношение R, которое содержит множество кортежей, представляющих набор всевозможных сочетаний из п значений, где каждое значение берется из своего отношения

R= R1×R2 = {r|rR1×rR2},

где r — кортеж нового отношения.

Пример 3. Пусть R1 содержит номера трех заказов {1021, 1022, 1023}, R2 — коды двух клиентов {АА, AC}. В этом случае отношение R есть декартово произведение R1×R2, которое представляет собой набор из 6 двоек значений, где первое значение — это один из номеров заказов, второе — один из кодов клиентов:

<1021 АА>

<1022 АА>

<1023 АА>

<1021 АС>

<1022 АС>

<1023 АС >

Разностью отношений R1 и R2 называется отношение R, содержащее множество кортежей, принадлежащих R1 и не принадлежащих R2, т.е.

R = R1 \ R2 = {r|rR1rR2},

где r — кортеж нового отношения.

Пример 3. Пусть отношения R1 и R2 такие же, как в примере 1. Тогда разность R1 \ R2 содержит перечень заказов, которые оформлялись только на первом участке отдела сбыта:

R

Номер заказа | Вес заказа
1023 | 120
1026 | 200

Следует отметить, что операции объединения и пересечения являются коммутативными операциями, т.е. результат операции не зависит от порядка операндов. Но результат операции разности зависит от порядка операндов. Так, разность R2\R1 представляет собой отношение, содержащее перечень заказов, которые оформлялись только на втором участке отдела сбыта:

R

Номер заказа | Вес заказа
1025 | 300

Операции проекции, выборки, соединения, деления являются специальными операциями реляционной алгебры.

Операция проекции — это выбор атрибутов в отношении. Пусть в отношении R выбирается подмножество его атрибутов Y. Тогда проекцией PY(R) будет отношение, в которое входят все кортежи R, содержащие только значения атрибутов из подмножества Y.

Пример 5. Пусть отношение R есть таблица ЗАКАЗЫ, а подмножество Y включает два атрибута— «Номер заказа» и «Код клиента».

ЗАКАЗЫ

Номер заказа | Код клиента | Дата заказа | Вес заказа
1020 | АБ | 01.02.06 | 400
1021 | АА | 01.02.06 | 100
1022 | АС | 12.02.06 | 300
1023 | АА | 20.03.06 | 120
1024 | АБ | 28.05.06 | 600

Тогда проекцией PY(R) является отношение:

Номер заказа | Код клиента
1020 | АБ
1021 | АА
1022 | АС
1023 | АА
1024 | АБ

Для операции выборки задается условие выборки кортежей булевым выражением а(r), составленным из термов сравнения с помощью логических операций «И» , «ИЛИ», «НЕ». Терм сравнения — выражение типа сравнения (в нем могут использоваться операции « = », «>», «<», «≥», «≤», «≠»). Результат операции выборки, заданной на отношении R в виде булева выражения, есть отношение

R [a(r)] = {r|rR a(r) = «Истина»}.

Пример 6. Требуется выбрать заказы с номером 1021 из отношения:

R1

Номер заказа | Вес заказа | Номер участка
1021 | 100 | 1
1022 | 300 | 1
1023 | 120 | 1
1024 | 500 | 1
1026 | 200 | 1
1023 | 120 | 2
1021 | 100 | 2
1024 | 500 | 3

Тогда результатом выборки является отношение, содержащее кортежи, у которых номер заказа равен 1021:

R

Номер заказа | Вес заказа | Номер участка
1021 | 100 | 1
1021 | 100 | 2

Операция соединения отношений R1, R2 выполняется путем сцепления кортежей отношения R1 с кортежами отношения R2 при условии совпадения значения атрибута А1 отношения R1 со значением атрибута А2 отношения R2 (Al, A2 — атрибуты, задаваемые для сцепления). При этом в результирующее отношение R одинаковые атрибуты включаются только один раз. Операция соединения записывается следующим образом:

R1 ►◄ R2

А1 = А2

Пример 7. Пусть отношение R1 — это таблица КЛИЕНТЫ, а отношение R2 — таблица ЗАКАЗЫ.

КЛИЕНТЫ | ЗАКАЗЫ

Код клиента | Клиент | Адрес
АА | БГЭУ | Минск, просп. Партизанский, 26
АБ | Сименс | Мюнхен, ул. Лейбница, 8
АС | Атлант | Минск, просп. Победителей, 61
АД | БГУИР | Минск, ул. Бровки, 6

Номер заказа | Код клиента | Дата заказа | Вес заказа
1020 | АБ | 01.02.06 | 400
1021 | АА | 01.02.06 | 100
1022 | АС | 12.02.06 | 300
1023 | АА | 20.03.06 | 120
1024 | АБ | 28.05.06 | 600

Тогда соединением отношений R1, R2 по «Коду клиента» будет следующее отношение:

R

Код клиента | Клиент | Адрес | Номер заказа | Дата заказа | Вес заказа
АА | БГЭУ | Минск, просп. Партизанский, 26 | 1021 | 01.02.06 | 100
АА | БГЭУ | Минск, просп. Партизанский, 26 | 1023 | 20.03.06 | 120
АБ | Сименс | Мюнхен, ул. Лейбница, 8 | 1020 | 01.02.06 | 400
АБ | Сименс | Мюнхен, ул. Лейбница, 8 | 1024 | 28.05.06 | 600
АС | Атлант | Минск, просп. Победителей, 61 | 1022 | 12.02.06 | 300

Операция деления выполняется над двумя отношениями R1, R2, имеющими атрибуты, определенные на одном домене. Пусть k1 степень отношения R1, a k2 — отношения R2 и к1 > к2. Тогда результат операции деления R1÷ R2 есть отношение R степени к1 - к2, любой кортеж которого вместе с любым кортежем R2 образует кортеж, имеющийся в R1.

Пример 8. Пусть исходные отношения следующие:

R1 | R2

Код произво-дителя | Производитель | Мероприятие | Дата
П1 | Сименс | Рекламная акция | 10.06.06
П1 | Сименс | Участие в выставке | 20.06.06
П2 | Атлант | Рекламная акция | 10.06.06
П2 | Атлант | Участие в выставке^ | 20.06.06
П3 | Горизонт | Участие в выставке | 20.06.06

Мероприятие | Дата
Рекламная акция | 10.06.06
Участие в выставке | 20.06.06

Тогда результат операции деления R÷R2 есть отношение:

R

П1 | Сименс
П2 | Атлант

15.4 Достоинства и недостатки реляционной модели данных

Главные достоинства реляционной модели данных заключаются в том, что она проста для понимания, наглядна и имеет строгое математическое обоснование.

Недостатки проявляются в следующем:

• реляционная модель данных не допускает представления объектов со сложной структурой, поскольку в ее рамках возможно моделирование лишь с помощью двумерных таблиц;

• данные об объектах содержатся, как правило, во многих таблицах. Соответственно извлечение информации о каждом таком объекте требует выполнения многих операций соединения с помощью первичных и внешних ключей, что значительно замедляет обработку данных.