Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы по дисциплине БД и СУБД к ГЭК.doc
Скачиваний:
7
Добавлен:
22.11.2019
Размер:
1.19 Mб
Скачать

37. Реляционная модель. Отношения. Терминология, ключи, реляционная алгебра. Реляционная целостность.

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

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

Отношение – плоская таблица, состоящая из столбцов и строк.

Атрибут – именованный столбец отношения.

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

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

Кортеж – строка отношения. Элементами отношения являются кортежи, или строки, таблицы.

Степень отношения – количество атрибутов, которые оно содержит.

Кардинальность – количество кортежей, которые содержатся в отношении.

Отношение обладает следующими характеристиками:

  • Отношение имеет имя, которое отличается от имен всех других отношений в реляционной схеме.

  • Каждая ячейка отношения содержит только одно элементарное (неделимое) значение.

  • Каждый атрибут имеет уникальное имя.

  • Значения атрибута берутся из одного и того же домена.

  • Каждый кортеж является уникальным, т.е. дубликатов кортежей быть не может (в современных СУБД данное требование, как правило, не учитывается).

  • Порядок следования атрибутов не имеет значения.

  • Порядок следования кортежей в отношении не имеет значения.

Суперключ (superkey) – атрибут или множество атрибутов, которое единственным образом идентифицирует кортеж данного отношения.

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

Первичный ключ – потенциальный ключ, который выбран для уникальной идентификации кортежей внутри отношения.

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

Реляционная целостность. Модель данных содержит набор ограничений целостности, которые гарантируют корректность данных.

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

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

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

  • Корпоративные ограничения целостности. Дополнительные правила поддержки целостности данных, определяемые пользователями или администраторами базы данных.

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

а) Выборка.

Операция выборки (унарная операция) применяется к одному отношению R и определяет результирующее отношение, которое содержит только те кортежи (строки) из отношения R, которые удовлетворяют заданному условию (предикату).

Пример: составьте список всех сотрудников с зарплатой, превышающей 10000 фунтов стерлингов.

На языке SQL был бы написан запрос select * from Staff where salary > 1000

Более сложные предикаты могут быть созданы с помощью логических операций AND, OR, NOT.

б) Проекция.

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

Пример: создайте ведомость зарплаты всех сотрудников компании с указанием только атрибутов staffNo, fName, lName, salary.

SQL: select staffNo, fName, lName, salary from Staff

г) Объединение.

Объединение двух отношений R и S определяет новое отношение, которое включает все кортежи, содержащиеся только в R, только в S, одновременно в R и S, причем все дубликаты кортежей исключены. При этом отношения R и S должны быть совместимыми по объединению.

Пример: cоздайте список всех городов, в которых имеется отделение компании или объект недвижимости.

SQL:

(select city

from Branch)

UNION

(select city

from PropertyForRent)

д) Пересечение.

Операция пересечения определяет отношение, которое содержит кортежи, присутствующие как в отношении R, так и в отношении S. Отношения R и S должны быть совместимыми по объединению.

Пример: Создайте список всех городов, в которых есть отделение компании, а также по меньшей мере один объект недвижимости, сдаваемый в аренду.

SQL:

(select city

from Branch)

INTERSECT

(select city

from PropertyForRent)

е) Разность множеств.

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

Пример: создайте список всех городов, в которых есть отделение компании, но нет объектов недвижимости, сдаваемых в аренду.

SQL:

(select city

from Branch)

EXCEPT

(select city

from PropertyForRent)

в) Декартово произведение.

Операция декартова произведения определяет новое отношение, которое является результатом конкатенации (т.е. сцепления) каждого кортежа из отношения R с каждым кортежем из отношения S.

Пример: создайте список всевозможных пар арендаторов и сделанных комментариев (независимо от того, кем сделаны данные комментарии).

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c, Viewning v

Результат:

Client.clientNo

fName

lName

Viewing.clientNo

propertyNo

comment

1

John

Kay

1

1

Too small

1

John

Kay

2

2

Too remote

2

Aline

Stewart

1

1

Too small

2

Aline

Stewart

2

2

Too remote

Обратите внимание, что в результирующую таблицу попали все возможные комбинации записей независимо; для клиента отображаются даже комментарии, сделанные другими клиентами (те записи, где различаются значения в полях Client.clientNo и Viewing.clientNo). Для того, чтобы оставить только комментарии самих клиентов, необходимо добавить выборку:

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c, Viewning v

where c.ClientNo = v.ClientNo

Комбинация декартова произведения и выборки может быть сведена к одной операции соединения (см. ниже).

ж) Тета-соединение

Операция тета-соединения определяет отношение, которое содержит кортежи из декартова произведения отношений R и S, удовлетворяющие предикату F. Предикат имеет вида , где вместо  может быть указана одна из операций сравнения (<, <=, >, >=, = или ~=).

Обозначение тета-соединения можно переписать на основе базовых операций выборки и декартова произведения:

Пример: создайте список арендаторов и сделанных ими комментариев.

Помимо указанного выше способа с помощью тета-соединения можно записать так:

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c join Viewning v

on c.ClientNo = v.ClientNo

з) Соединение по эквивалентности.

Если предикат F тета-соединения содержит только операцию сравнения по равенству (=), то соединение называется соединением по эквивалентности (equi-join). Приведенный выше пример как раз является примером соединения по эквивалентности.

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

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

Пример: создайте список арендаторов и сделанных ими комментариев.

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c natural join Viewning v

Получилось похоже на пример, указанный в описании для тета-соединения, с той разницей, что, раз соединение производится по одноименным полям, условие можно не указывать. Результат различается тем, что в данном примере (с естественным соединением) поле clintNo будет только один раз, а в случае с тета-соединением дважды.

к) Внешнее соединение.

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

Пример: создайте полный список арендаторов и сделанных ими комментариев.

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c left join Viewning v

on c.ClientNo = v.ClientNo

Client.clientNo

fName

lName

Viewing.clientNo

propertyNo

comment

1

John

Kay

1

1

Too small

2

Aline

Stewart

2

2

Too remote

3

Mike

Andrews

NULL

NULL

NULL

В результате был выдан также клиент номер 3, не сделавший ни просмотра; в поля, которые должны были быть заполнены из таблицы Viewing, был проставлен NULL.

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

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c right join Viewning v

on c.ClientNo = v.ClientNo

Еще один вариант – полное внешнее соединение ( ), когда в результат включаются все записи как отношения R, так и отношения S, даже если для них нет соответствующих записей в другом отношении.

SQL:

select c.clientNo, fName, lName, v.clientNo, propertyNo, comment

from Client c full join Viewning v

on c.clientNo = v.clientNo

л) Полусоединение.

Операция полусоединения определяет отношение, содержащее те кортежи отношения R, которые входят в соединение отношений R и S.

Пример: создайте отчет, содержащий полную информацию обо всех сотрудниках, работающих в отделении компании, расположенном в городе Glasgow.

SQL:

select c.clientNo, fName, lName

from Client c join Branch b

on c.branchNo = b.branchNo

where b.branchNo=’Glasgow’

м) Операция деления.

Схематично результат деления представлен ниже:

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

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

Рассмотрим на примере, показанном на рисунке справа. Отношение V содержит 2 атрибута (A и B), отношение W содержит 1 атрибут B. Множество атрибутов отношения W является подмножеством атрибутов отношения V. Соответственно, результатом деления V на W будет отношение, содержащее единственный атрибут A из отношения V, которого нет в W.

Далее, в V у атрибута A есть 3 значения: a, b и c. В W у атрибута B есть 2 значения: 1 и 2. Столбец A из V и столбец B из W дают 6 комбинаций: a,1; a,2; b,1; b,2; c,1; c,2. Все комбинации, которые возможны для значения a, есть в отношении V, поэтому a оказалось в результате деления V на W; аналогично в V есть все комбинации для b, поэтому b оказалось в результате. Для c в V не хватает одной комбинации, поэтому c в результате нет.

Операция деления может быть определена через другие операции:

( – операция присваивания)

Пример: создайте список всех арендаторов, которые осмотрели все объекты недвижимости с тремя комнатами.

SQL (возможны варианты):

select distinct clientNo from Viewing v1

where not exists

(select propertyNo from PropertyForRent p

where not exists

(select * from Viewng v2

where v2.clientNo = v1.clientNo = and v2.propertyNo = p.propertyNo)