Файл: Учебное пособие Введение.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 100

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


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


Ф амилия

Год_рож-дения

Год_пос-тупления

Номер_

билета

Курс_

обучения

Стипен-дия

Петров

1978

1994

123456

5

100.50

Иванов

1979

1995

122453

4

0.00

Соколов

1975

1995

122454

4

90.00

Ключом отношения r(R) называется подмножество атрибутов K R, такое, что для любых различных кортежей t1 и t2 из r выполняется t1(K) t2(K) (свойство уникальности), и ни одно собственное подмножество K K не обладает этим свойством (свойство неизбыточности). Это означает, что ключ – это минимальный (неизбыточный) набор атрибутов, уникальным образом идентифицирующих кортеж, т. е. среди всех возможных кортежей отношения (среди всех возможных, а не только среди тех, из которых состоит отношение в данный момент) нет двух различных кортежей с одинаковыми значениями атрибутов, входящих в ключ.

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

Ключ, состоящий из одного атрибута, называется простым. Ключ, состоящий более чем из одного атрибута, называется
составным.

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

Например, в схеме отношения Студент атрибут {Год_поступления} не может быть ключом, так как значения этого атрибута повторяются (во втором и третьем кортежах). Атрибуты {Год_поступления, Курс_обучения} также не являются ключом, так как набор данных {1995, 4} повторяется в двух кортежах. Ключом для схемы Студент может быть атрибут {Номер_билета}, так как каждый студент имеет студенческий билет с уникальным номером.

Студент(Фамилия, Год_рождения, Год_поступления, Номер_билета, Курс_обучения, Стипендия).

Пусть r(R) – отношение со схемой R, FK – набор атрибутов из схемы R (FK R). Пусть s(S) – отношение со схемой S, CK – ключ отношения s (CK S). Набор атрибутов FK называется внешним ключом отношения r(R), ссылающимся на отношение s, если каждое значение атрибутов FK в отношении r всегда совпадает со значениями атрибутов CK некоторого кортежа в отношении s.

Определим еще одно отношение

Соревнования(Название_вида, Номер_участника, Номер_билета).

Это отношение будет содержать информацию о том, в каких видах и под какими номерами студенты участвуют в соревнованиях. В каждом виде соревнований может участвовать несколько студентов, каждый из которых имеет уникальный номер участника в пределах данного вида соревнований, любой студент может участвовать в нескольких видах соревнований, поэтому ключом отношения будет совокупность атрибутов {Название_вида, Номер_участника}.
Соревнования

Название_вида

Номер_участника

Номер_билета

Бег на 100 м

1

122453

Бег на 100 м

2

123456

Прыжки в высоту

1

122454

Прыжки в высоту

2

122453



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

Значения внешнего ключа могут повторяться. Для отношения Соревнования это означает, что один и тот же студент может участвовать в разных видах соревнований.

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


3.2. Операции


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

Операции обновления предназначены для добавления, удаления и изменения кортежей отношения.

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

Группу реляционных операторов можно разбить еще на две группы:

  1. Традиционные операции над множествами: объединение, пересечение, вычитание и декартово произведение.

  2. Специальные реляционные операции: селекция (выборка), проекция, соединение и деление.



3.2.1. Операции обновления отношений


Операции обновления – это операции, выполняемые над одним кортежем отношения.
Добавление

Цель операции – добавить один кортеж с данными 1,…,dn> в отношение r со схемой (A1,A2,…,An).

ADD(r; A1= d1, …, An= dn).

Когда фиксирован порядок имен атрибутов, допустима более короткая запись:

ADD(r; d1, …, dn).

Операция может быть не выполнена по следующим причинам:

  1. Добавляемый кортеж не соответствует схеме отношения r.

  2. Некоторые значения кортежа не принадлежат соответствующим доменам.

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

Примеры для отношения Студент, определенного в разделе 3.1:

  1. ADD(Студент; Дубов, 1980, 1996, 134742, 2, 100.00).

  2. ADD(Студент; Фамилия = Марков, Имя = Сергей, Отчество = Петрович, Курс_обучения = 2) – не будет выполнена по причине 1, в схеме отношения Студент нет атрибутов Фамилия, Имя, Отчество.

  3. ADD(Студент; Колобков, 1976, 1996, 122454, 8, 90.00) – не будет выполнена по причинам 2 и 3. Ключом отношения Студент является атрибут {Номер_билета}. Отношение уже содержит кортеж с номером билета 122454 у студента Соколова (причина 3), и значением атрибута Курс_обучения не может быть число 8 (причина 2).


Удаление

Цель операции – удаление одного кортежа с данными 1,…dn> из отношения r.

DEL(r; A1=d1, …, An=dn).

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

DEL(r; <ключ> = ),

<ключ> – содержит только те атрибуты, которые входят в ключ,

– содержит только те значения удаляемого кортежа, которые соответствуют ключевым атрибутам.

Операция может быть не выполнена по следующим причинам:

  1. Удаляемый кортеж не соответствует схеме отношения r.

  2. Удаляемого кортежа нет в отношении r.

Примеры для отношения Студент, определенного в разделе 3.1:

  1. DEL(Студент; 122454).

  2. DEL(Студент; 555556) – не будет выполнена, так как такого кортежа в отношении Студент нет.

Изменение

Цель операции – заменить значения атрибутов C1,…,Cp кортежа 1,…,dn> отношения r значениями e1,…,ep.

CH(r; A1=d1, …, An=dn; C1=e1, …, Cp=ep).

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

CH(r; <ключ> = ; C1=e1, …, Cp=ep).

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

Примеры для отношения Студент, определенного в разделе 3.1:

  1. CH(Студент; 122453; Стипендия = 70.00).

  2. CH(Студент; 122453; Средний_балл = 4.5) – не будет выполнена, так как атрибут Средний_балл не входит в схему Студент.

3.2.2. Операции над множествами


Два отношения с одной и той же схемой могут быть рассмотрены как два подмножества одного и того же универсума – множества всех возможных кортежей с этой схемой. К таким двум отношениям могут быть применены операции над множествами.
Пересечение

В результате пересечения двух отношений с одной и той же схемой получается новое отношение с той же схемой, содержащее только те кортежи, которые были и в первом отношении, и во втором отношении. Если таковых не оказалось, то результатом будет пустое отношение, т. е. отношение, не содержащее ни одного кортежа.
Объединение

В результате объединения двух отношений с одной и той же схемой получается новое отношение с той же схемой, содержащее все кортежи из первого отношения и все кортежи из второго отношения. Если оба отношения содержали абсолютно совпадающие кортежи, то такие кортежи входят в новое отношение только один раз.
Разность

При выполнении вычитания из одного отношения другого отношения с той же схемой получается новое отношение с той же схемой, содержащее все кортежи из первого отношения, которых нет во втором отношении. Если оба отношения не содержат одинаковых кортежей, то новое отношение будет полностью совпадать с первым отношением.
Для примера возьмем два отношения с одинаковыми схемами: Баскетбол(ФИО, Факультет, Курс) и Самбо(ФИО, Факультет, Курс). Эти отношения содержат информацию о студентах, занимающихся в секции баскетбола и самбо.




Баскетбол










Самбо




ФИО

Факультет

Курс




ФИО

Факультет

Курс

Иванов И. И.

матфак

2




Бочкин К. А.

филфак

1

Петров А. П.

физтех

2




Жуков Е. А.

матфак

3

Яшин В. В.

матфак

3




Иванов И. И.

истфак

2













Макаров В. С.

матфак

1













Петров А. П.

физтех

2

В результате операции объединения отношений Баскетбол и Самбо (Баскетбол Самбо) получим информацию обо всех студентах, занимающихся спортом. В результате пересечения отношений (Баскетбол Самбо) получим информацию о студентах, занимающихся в обеих секциях. В результате операции вычитания из отношения Баскетбол отношения Самбо (Баскетбол – Самбо) получим информацию о студентах, играющих в баскетбол, но при этом не занимающихся самбо, а при вычитании из отношения Самбо отношения Баскетбол (СамбоБаскетбол) получим информацию о студентах, занимающихся самбо, но при этом не играющих в баскетбол.
Отметим, что и в отношении Баскетбол, и в отношении Самбо есть кортеж со значением атрибута ФИО, равным «Иванов И. И.», и значением атрибута Курс, равным «2». Но эти два кортежа различаются значением атрибута Факультет, и, следовательно, считаются различными. Поэтому в объединении отношений есть два кортежа со значением атрибута ФИО, равным «Иванов И. И.», а в пересечение отношений эти кортежи не попали.

Баскетбол Самбо




Баскетбол Самбо

ФИО

Факультет

Курс




ФИО

Факультет

Курс

Бочкин К. А.

филфак

1




Петров А. П.

физтех

2

Жуков Е. А.

матфак

3













Иванов И. И.

истфак

2













Иванов И. И.

матфак

2













Макаров В. С.

матфак

1













Петров А. П.

физтех

2













Яшин В. В.

матфак

3
















Баскетбол – Самбо




Самбо – Баскетбол

ФИО

Факультет

Курс




ФИО

Факультет

Курс

Иванов И. И.

матфак

2




Бочкин К. А.

филфак

1

Яшин В. В.

матфак

3




Жуков Е. А.

матфак

3













Иванов И. И.

истфак

2













Макаров В. С.

матфак

1

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


Проекция

Пусть r отношение со схемой R, A – атрибут, принадлежащий схеме R. Результатом выполнения операции проекции A(r) является новое отношение, схема которого будет состоять только из одного атрибута A. Кортежами этого отношения будут отличные друг от друга значения атрибута A из исходного отношения r:

A(r) = { d dom(A) | t r: t(A) = d }.

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

Например, требуется узнать все года рождения студентов. Для этого достаточно выполнить операцию проекции отношения Студент на атрибут Год_рождения: Год_рождения(Студент). Результатом операции будет новое отношение с одним атрибутом и тремя кортежами.

Год_рождения(Студент)

Год_рождения

1978

1979

1975

Операцию проекции можно выполнять и для нескольких атрибутов. Например, требуется информация о том, в каких годах поступали студенты и на каких курсах они сейчас учатся. Эту информацию можно получить, выполнив операцию проекции отношения Студент на атрибуты Год_поступления и Курс_обучения: Год_поступления, Курс_обучения(Студент). Результатом операции будет отношение с двумя атрибутами и двумя кортежами. (Последний кортеж этого отношения полностью совпадал с предпоследним кортежем, и поэтому был удален.)

Год_поступления, Курс_обучения(Студент)

Год_поступления

Курс_обучения

1994

5

1995

4


Селекция

Пусть r отношение со схемой R, A – атрибут, принадлежащий схеме R, a – значение из домена атрибута A (a dom(A)). Результатом выполнения операции селекции A=a(r) является новое отношение с той же схемой, которое представляет собой подмножество кортежей отношения r, каждый из которых имеет значение a на атрибуте A:

A=a(r) = { t r | t(A)=a }.
Операция селекции – это операция выбора только тех кортежей, которые имеют заданное значение на заданном атрибуте. Пример: найдем тех студентов, которые учатся на 4 курсе. Для этого необходимо выполнить операцию селекции для отношения Студент, при этом условием отбора будет: Курс_обучения = 4: Курс_обучения=4 (Студент). В результате получим новое отношение с двумя кортежами.

Курс_обучения=4 (Студент)

Фамилия

Год_рож-дения

Год_пос-тупления

Номер_билета

Курс_обучения

Стипендия

Иванов

1979

1995

122453

4

0.00

Соколов

1975

1995

122454

4

90.00

В условии отбора операции селекции кроме сравнения на равенство можно использовать и другие операции сравнения. Например, если требуется найти всех студентов, родившихся не ранее 1979 года, то в качестве условия можно записать Год_рождения>1978, тогда будут выбраны кортежи, соответствующие студентам с годом рождения 1979, 1980, 1981 и т. д.

Также можно составить и более сложное условие с использованием логических операций and, or, not для одного или нескольких атрибутов. Например, (Год_рождения > 1978)and(Год_рождения <= 1980)and(Стипендия = 100.50).
Соединение

Эта операция предназначена для соединения двух отношений с разными схемами. Пусть r отношение со схемой R, s отношение со схемой S, T – множество атрибутов, входящих и в схему R, и в схему S (T=R S ). Результатом выполнения операции соединения r(R)  s(S) является новое отношение, схема которого состоит из всех атрибутов схемы R и всех атрибутов схемы S, при этом одинаковые атрибуты не дублируются. Каждый кортеж этого отношения является комбинацией кортежа из отношения r и кортежа из отношения s с равными значениями атрибутов, входящих во множество T:

r(R)  s(S) = { t RS | tr r, ts s, tr=t(R), ts=t(S), tr (R S) = ts(R S)}.

Для примера рассмотрим отношение Материальная помощь с атрибутами Курс_обучения и Сумма.

Материальная помощь

Курс_обучения

Сумма

1

100.00

2

120.00

4

140.00

5

130.00

Требуется для каждого студента определить сумму материальной помощи. Для этого выполним соединение двух отношений Студент и Материальная помощь. Общим атрибутом, входящим и в схему отношения Студент, и в схему отношения Материальная помощь, является атрибут Курс_обучения. По этому атрибуту и будет выполнено соединение. Новое отношение, которое получится в результате операции соединения, будет иметь в своей схеме семь атрибутов и три кортежа.

Студент  Материальная помощь

Фамилия

Год_рож-дения

Год_пос-тупления

Номер_билета

Курс_обучения

Сти-пендия

Сумма

Петров

1978

1994

123456

5

100.00

130.00

Иванов

1979

1995

122453

4

0.00

140.00

Соколов

1975

1995

122454

4

90.00

140.00

Если бы отношение Материальная помощь состояло из следующих кортежей:

Материальная помощь

Курс_обучения

Сумма




4

100.00




4

120.00

,

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

Студент  Материальная помощь

Фамилия

Год_рож-дения

Год_пос-тупления

Номер_ билета

Курс_ обучения

Сти-пендия

Сумма

Иванов

1979

1995

122453

4

0.00

100.00

Иванов

1979

1995

122453

4

0.00

120.00

Соколов

1975

1995

122454

4

90.00

100.00

Соколов

1975

1995

122454

4

90.00

120.00

Если бы отношение Материальная помощь состояло из следующих кортежей:

Материальная помощь

Курс_обучения

Стипендия

Сумма




4

0.00

100.00




5

0.00

120.00

,

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

Студент  Материальная помощь

Фамилия

Год_ рож-дения

Год_пос-тупления

Номер_ билета

Курс_обу-чения

Сти-пендия

Сумма

Иванов

1979

1995

122453

4

0.00

100.00

Эквисоединение

Эта операция предназначена для соединения двух отношений с абсолютно разными схемами. Пусть r – отношение со схемой R, s – отношение со схемой S, R S = , т. е. схемы не содержат одинаковых атрибутов. Пусть A – атрибут схемы R, а B – атрибут схемы S (AR, BS). Эти атрибуты определены на одинаковых доменах dom(A)=dom(B). Результатом выполнения операции эквисоединения r(R) [A=B] s(S) является новое отношение, схема которого состоит из всех атрибутов схемы R и всех атрибутов схемы S. Каждый кортеж этого отношения является комбинацией кортежа из отношения r и кортежа из отношения s с равными значениями атрибутов A и B:

r(R) [A=B] s(S) = { t RS | tr r, ts s : tr=t(R), ts=t(S), tr (A) = ts(B)}.

Операция эквисоединения используется вместо операции соединения, которую также называют естественным соединением, когда атрибуты, по которым необходимо выполнить соединение, имеют разные имена. Например, пусть, отношение Материальная помощь содержит атрибуты Курс (вместо Курс_обучения) и Сумма. В этом случае операцию соединения выполнить нельзя, так как пересечение схем отношений Студент и Материальная помощь пусто. Но атрибуты Курс и Курс_обучения по смыслу содержат одинаковую информацию и формально их домены совпадают, поэтому вместо операции соединения выполняется операция эквисоединения Студент [ Курс_обучения = Курс ] Материальная помощь.

Материальная помощь

Курс

Сумма

1

100.00

2

120.00

4

140.00

5

130.00

Студент [ Курс_обучения = Курс ] Материальная помощь

Фамилия

Год_рож-дения

Год_пос-тупления

Номер_билета

Курс_обучения

Сти-пендия

Курс

Сумма

Петров

1978

1994

123456

5

100.00

5

130.00

Иванов

1979

1995

122453

4

0.00

4

140.00

Соколов

1975

1995

122454

4

90.00

4

140.00

Деление

Пусть, r – отношение со схемой R, s – отношение со схемой S и SR, тогда r, разделенное на s, – это отношение, содержащее такие значения атрибутов R–S кортежей из отношения r, для которых соответствующие значения атрибутов S включают все значения из отношения s:

rs = { t | для ts s tr r : tr( R - S ) = t и tr(S) = ts }.

В качестве примера рассмотрим отношение Зачет(ФИО, Название), содержащее информацию о студентах, сдавших зачеты по различным дисциплинам, и отношение Дисциплины(Название), содержащее некоторый список названий дисциплин. Тогда операция деления отношения Зачет на отношение Дисциплины будет содержать фамилии только тех студентов, которые получили зачеты по всем дисциплинам, перечисленным в отношении Дисциплины.

Зачет

ФИО

Название

Иванов И. И.

Алгебра

Петров В. В.

Алгебра

Иванов И. И.

История

Дубов С. С.

Физика

Петров В. В.

Физика

Иванов И. И.

Физика

Дубов С. С.

Топология

Дисциплины

Название

Алгебра

Физика

ЗачетДисциплины

ФИО

Иванов И. И.

Петров В. В.

Только два студента сдали оба зачета и по Алгебре, и по Физике.
1   2   3   4   5   6

3.3. Ограничения целостности


Отношения реляционной модели данных должны удовлетворять следующим правилам:

  1. Запрещается дублирование кортежей в отношении. Это означает, что каждое отношение имеет, по крайней мере, один ключ, состоящий из всех атрибутов.

  2. Порядок кортежей в отношении не определен. Каждый кортеж идентифицируется значениями ключевых атрибутов.

  3. Порядок атрибутов в отношении не определен. Каждый атрибут имеет уникальное в пределах отношения имя, которое можно использовать для идентификации атрибута.

  4. Два правила целостности:

    1. Целостность по сущностям. Не допускаются неопределенные значения ключевых атрибутов. Это означает, что каждый кортеж обязательно должен содержать значения в атрибутах, входящих в ключ. Соблюдение этого правила должно отслеживаться при выполнении операций обновления отношения (добавление, удаление, изменение).

    2. Целостность по ссылкам. Значения внешних ключей должны либо соответствовать значениям первичных ключей, либо быть неопределенными.

Это правило требует пояснения. Вернемся к отношению Соревнования из раздела 3.1. Согласно правилу целостности по ссылкам, значения атрибута Номер_билета отношения Соревнования должны либо совпадать с каким-нибудь значением атрибута Номер_билета отношения Студент, либо быть неопределенными. Это означает, что участником соревнований может быть только человек, являющийся студентом, т. е. информация о нем должна быть в отношении Студент. Если участник соревнований пока неизвестен или никто из студентов не будет участвовать в этом виде соревнований, тогда это поле остается пустым. Но в этом поле не должно быть значения, которого нет в отношении Студент.

3.4. Нормализация отношений

3.4.1. Аномалии схемы отношения


После того как построена схема отношений, являющаяся моделью данных, при ее использовании могут возникнуть некоторые нежелательные эффекты. Например, мы построили отношение Поставка(Товар, Поставщик, Адрес, Цена, Склад, Объем). Это отношение содержит информацию о наличии различных товаров, поставляемых несколькими поставщиками в некоторый магазин, и размещении их на складах магазина. Для каждого поставщика хранится его адрес, а для каждого склада – его объем. Цена товара зависит от поставщика. Один и тот же товар, поставленный одним поставщиком, целиком хранится на одном складе.