4.4. Реляционная целостность
Определитель Null |
Указывает, что значение атрибута не определено. |
Целостность сущностей |
В базовом отношении ни один атрибут первичного ключа не может содержать Null |
Ссылочная целостность |
Если в отношении существует внешний ключ, то значение внешнего ключа должно соответствовать значению потенциального ключа в базовом отношении, либо быть не определенным (Null) |
4.5. Реляционная алгебра
Реляционная алгебра (РА) |
Теоретический язык операций, который на основе одного или нескольких отношений позволяют создавать другое отношение без изменения самих исходных отношений |
Результат операции, может использоваться в качестве операнда для другой операции, что позволяет создавать вложенные выражения (замкнутость РА).
Реляционная алгебра является языком, в котором все кортежи обрабатываются одной командой.
Пять основных операций:
выборка,
проекция,
декартово произведение,
объединение,
разность.
На основе этих операций могут быть получены другие:
соединения,
пересечения,
деления.
Выборка
предикат(R) |
Определяет отношение, которое содержит только те кортежи отношения R, которые удовлетворяют заданному условию (предикату). |
В предикате могут использоваться знаки логических операций (And), (Or), ~ (Not).
Пример. Получить список всех сотрудников с окладом более 300
ZP>300(S)
KodS |
Lname |
Fname |
Pol |
DR |
Dol |
ZP |
KodB |
S21 |
Иванов |
Иван |
М |
01.02.70 |
Руководитель |
500 |
B5 |
S14 |
Сидоров |
Стеман |
М |
06.05.68 |
Менеджер |
400 |
B3 |
S41 |
Петров |
Игорь |
М |
02.02.68 |
Менеджер |
450 |
B5 |
Проекция
Патр1,…,атрn(R) |
Определяет отношение, атрибутами которого являются атр1, … атрn и содержащее только уникальные кортежи. |
Пример. Получить список всех городов, в которых имеются отделения.
ПCity(B)
ПИ 26/09/2012
Декартово произведение
RS |
Определяет новое отношение, которое получается в результате конкатенации (т.е. сцепления) каждого кортежа из отношения R с каждым кортежем из отношения S |
Отношение |
Атрибутов |
Кортежей |
R |
I |
K |
S |
J |
L |
RS |
I+J |
K*L |
Пример. Получить список всех арендаторов (код, Фамилия), осмотревших объекты недвижимости с информацией о сделанном заключении.
R.KodR = V.KodR((ПKodR,Name(R)) (ПKodR,KodP,Comment(V)))
Результат этих операций:
R.KodR |
Name |
V.KodR |
KodP |
Comment |
R76 |
Саблев Иван |
R76 |
P04 |
Далеко |
R56 |
Рубин Степан |
R56 |
P14 |
Мала |
R56 |
Рубин Степан |
R56 |
P04 |
|
R56 |
Рубин Степан |
R56 |
P36 |
|
R62 |
Зимина Елена |
R62 |
P14 |
Дорого |
Объединение
RS |
Определяет новое отношение, в которое включены все кортежи из R и S, с удалением дублирующих кортежей. При этом отношения R и S должны быть совместимы по объединению – имеют одинаковые атрибуты с совпадающими доменами |
Пример. Получить список городов, в которых у агентства имеются отделения или объекты недвижимости.
ПCity(B) ПCity(P)
Разность
R-S |
Определяет новое отношение, в которое включены кортежи из R, которые отсутствуют в отношении S. При этом отношения R и S должны быть совместимы по объединению |
Пример. Получить список городов, в которых у агентства имеются объекты недвижимости, но нет отделений.
ПCity(P) - ПCity(B)
Результат:
City |
Сургут |
Операции соединения
Тета-соединение.
R |><| F S |
Операция тета-соединение определяет отношение, которое содержит кортежи из их декартового произведения, удовлетворяющие предикату F. Предикат F имеет вид R.AiS.Bi, где Ai и Bi – имена атрибутов, - один из знаков < | <= | >= | > | = | ~=. Если предикат F содержит только операцию =, то соединение называется соединением по эквивалентности. |
На основе базовых операций:
R |><| FS = F(RS)
Пример. Получить список всех арендаторов, осмотревших объекты недвижимости
(ПKodR,Name(R)) |><| R.KodR= V.KodR (ПKodR,KodP,Comment(V))
Естественное соединение.
R|><|S |
Операция естественного соединения – операция соединения по эквивалентности, выполненная по всем общим атрибутам, из результатов которого исключаются по одному экземпляру каждого общего атрибута |
Пример. Получить список всех арендаторов, осмотревших объекты недвижимости
(ПKodR, Name(R)) |><| (ПKodR, KodP, Comment(V))
Результат:
KodR |
Name |
KodP |
Comment |
R76 |
Саблев Иван |
P04 |
Далеко |
R56 |
Рубин Степан |
P14 |
Мала |
R56 |
Рубин Степан |
P04 |
|
R56 |
Рубин Степан |
P36 |
|
R62 |
Зимина Елена |
P14 |
Дорого |
Внешнее соединение
R <| S |
Левое внешнее соединение – естественное соединение, при котором кортежи отношения R, не имеющие совпадающих значений общих атрибутов в отношении S, также включаются в результирующее отношение. Для отсутствующих значений используется Null. |
Т.о. при левом внешнем соединении сохраняется вся исходная информация из отношения R.
Аналогично можно определить также правое внешнее соединение и полное внешнее соединение.
Пример. Создать отчет о проведении осмотров объектов недвижимости.
ПKodP, City (P) <| (V)
Результат:
KodP |
City |
KodR |
Date |
Comment |
P14 |
Тюмень |
R56 |
24.05.01 |
Мала |
P14 |
Тюмень |
R62 |
14.05.01 |
Дорого |
P94 |
Нижневартовск |
Null |
Null |
Null |
P04 |
Тюмень |
R76 |
20.04.01 |
Далеко |
P04 |
Тюмень |
R56 |
26.05.01 |
|
P36 |
Ишим |
R56 |
28.04.01 |
|
P21 |
Надым |
Null |
Null |
Null |
P16 |
Сургут |
Null |
Null |
Null |
Если применить операцию естественного соединения
ПKodP, City (P) |><| (V)
Результат:
KodP |
City |
KodR |
Date |
Comment |
P14 |
Тюмень |
R56 |
24.05.01 |
Мала |
P14 |
Тюмень |
R62 |
14.05.01 |
Дорого |
P04 |
Тюмень |
R76 |
20.04.01 |
Далеко |
P04 |
Тюмень |
R56 |
26.05.01 |
|
P36 |
Ишим |
R56 |
28.04.01 |
|
B P
KodB |
Bcity |
|
KodB |
Bcity |
B3 |
Надым |
|
P14 |
Сургут |
B4 |
Ишим |
|
P94 |
Тюмень |
B2 |
Тюмень |
|
P04 |
Надым |
KodB |
B.Bcity |
KodP |
P.Bcity |
B3 |
Надым |
P04 |
Надым |
B4 |
Ишим |
Null |
Null |
B2 |
Тюмень |
P94 |
Тюмень |
Null |
Null |
P14 |
Сургут |
B
Полусоединение
R |> F S |
Определяет отношение, которое содержит те кортежи отношения R, которые входят в тета-соединение отношений R и S |
Операцию полусоединения можно определить с помощью операторов проекции и соединения:
R |> F S = ПA (R |><|F S),
где A – набор всех атрибутов в отношении R.
Пример. Создать отчет, содержащий полную информацию о всех сотрудниках, работающих в отделениях, расположенных в г. Тюмени.
S |> S.KodB = B.KodB and B.City=’Тюмень’ B
Результат:
KodS (код) |
Lname (фамилия) |
Fname (имя) |
Pol (пол) |
DR (дата р.) |
Dol (должность) |
ZP (Оклад) |
KodO (код отд.) |
S21 |
Иванов |
Иван |
М |
01.02.70 |
Руководитель |
500 |
B5 |
S37 |
Петрова |
Татьяна |
Ж |
12.11.72 |
Агент |
250 |
B3 |
S14 |
Сидоров |
Стеман |
М |
06.05.68 |
Менеджер |
400 |
B3 |
S05 |
Степанова |
Елена |
Ж |
16.07.71 |
Секретарь |
200 |
B3 |
S41 |
Петров |
Игорь |
М |
02.02.68 |
Менеджер |
450 |
B5 |
Пересечение
R S |
Операция пересечения определяет отношение, которое содержит кортежи, присутствующие как в отношении R, так и в отношении S. Отношения R и S должны быть совместимы по объединению. |
Операцию пересечения можно записать через базовые операции:
R S=R-(R-S)
ПCity(B) ∩ ПCity(P)
Деление
Пусть R(A1,A2,…,An, B1,B2,…,Bm), S(B1,B2,…,Bm), причем атрибуты B1,B2,…,Bm – общие.
R S |
Операция определяет отношение с атрибутами A1,A2,…,An, которое содержит множество кортежей (x1,x2,…xn), таких, что для всех кортежей (y1,y2,…ym) из S в отношении R найдется кортеж (x1,x2,…xn,y1,y2,…ym). |
T1=ПC( R ), T2=ПC ((ST1)-R), R S=T1-T2
Пример. Создать список арендаторов, осмотревших объекты недвижимости с 4 комнатами.
(ПkodR,KodP (V)) (ПkodP ( Rooms=4 (P)))
Результат
KodR |
KodP |
R76 |
P04 |
R56 |
P04 |
