Изменения

Перейти к: навигация, поиск

Исчисление доменов и его реляционная полнота

5547 байт добавлено, 19:44, 4 сентября 2022
м
rollbackEdits.php mass rollback
=Исчисление доменов и его реляционная полнота=
==Исчисление доменов==
{{Определение
|definition=
'''Исчисление доменов''' {{---}} вид реляционного исчисления, в котором значения переменных принадлежат заранее определённым ''доменам''.
}}
 
Домен следует понимать как какое-то именованное множество допустимых значений для переменных. На современном языке, это понятие достаточно близко к понятию типа.
 
Введём синтаксис для указания типов переменных. Также введём предикат, будем называть его ''условием принадлежности'', который для заданного отношения и значений атрибутов проверяет, есть ли совпадающий кортеж в отношении.
 
===Синтаксис===
<font color=red>Переменная</font> :: <font color=red>Тип</font> <font color=green>-- Переменная может принимать значения из какого-то типа. Тип == набор значений
<font color=red>}</font>
===Условие Примеры использования условия принадлежности===ПредикатСледующий предикат будет истинным, значение которого истина тогда, когда если в отношении есть S найдётся кортеж <code>(FirstName = 'Иван', LastName = 'Иванов')</code> или, например (при наличии ещё одного атрибута), <code>(FirstName = 'Иван', LastName = 'Иванов', Email = 'ivan@example.com')</code> и ложным, если ни в одном кортеже не совпали все значения атрибутов с перечисленными  S<font color=red>{</font>FirstName = <font color=green>'Иван'</font>, LastName = <font color=green>'Иванов'</font><font color=red>}</font> Имя атрибута может совпадать с совпадающими значениями атрибутовименем переменной, это может поначалу немного запутывать. Слева от знака равенства стоит имя атрибута, справа - значение, с которым атрибут сравниваем  S<font color=red>{</font>FirstName = FirstName, LastName = LastName<font color=red>}</font> ===Примеры запросов========Идентификаторы всех студентов=====Запишем запрос для получения идентификаторов всех студентов. Можно представлять это так: единственная свободная переменная SId пробегает все возможные значения из домена (все возможные идентификаторы студентов), а в результирующее отношение попадают только те её значения, для которых реально существовал такой студент SId <font color=blue>where</font> S<font color=red>{</font>SId = SId<font color=red>}</font>
Пример: S{FirstName = 'Иван'====Идентификаторы студентов, LastName не сдавших курс с CId=10==== 'Иванов'}`Отношение {Атрибут1 = Значение1,Атрибут2 = Значение2Также как и в исчислении кортежей,.в исчислении доменов можно использовать кванторы.Студент не сдал курс, если у него нет положительных оценок за этот курс.}`
Как мы будем записывать запросы? SId <font color=blue>where</font> ¬∃Points (Points ≥ 60 ∧ Points<font color=red>{</font>SId = SId, Points = Points, CId = 10<font color=red>}</font>)
Опишем переменные==Реляционная полнота исчисления доменов==`{{Утверждение<переменные> where <логическое выражение>|statement=Исчисление доменов реляционно полно`|proof=Выразим базис реляционной алгебры в терминах исчисления доменов:
В логические выражения могут входить условие принадлежности'''Проекция $\pi_{A_1, логические связки..., A_n}(R)$''' Выбираем только такие наборы значений $A_1$...$A_n$, для которых в исходном отношении есть кортеж, в котором атрибуты $A_1$...$A_n$ принимают значения $A_1$...$A_n$. $A_1$, ..., $A_n$ <font color=blue>where</font> $R$<font color=red>{</font>$A_1$ = $A_1$, кванторы и отрицания..., $A_n$ = $A_n$<font color=red>}</font>
Реляционная полнота'''Фильтр $σ_θ(R)$'''--------------------Выбираем только такие наборы значений $A_1$...$A_n$, которые есть в исходном отношении R и удовлетворяют условию θПроекцияA1 $A_1$, ..., An from R $A_n$ <font color=blue>where </font> $R$<font color=red>{A1</font>$A_1$ =A1$A_1$, ..., An $A_n$ = $A_n$<font color= Anred>}</font> ∧ $θ$
Фильтр'''Переименовывание $ε_{A=expr}(R_1)$''' Просто используем специальный синтаксисA1 ..., $expr$ as $A$, ..., An from R <font color=blue>where </font> $R${A1$A_1$ =A1$A_1$, ..., An $A_n$ = An$A_n$} ∧ θ
Переименовывание'''Объединение $R_1 ∪ R_2$'''expr as A from R where R{A1=A1Выбираем только такие наборы значений $A_1$...$A_n$, что хотя бы в одном из отношений есть соответствующий кортеж $A_1$, ..., An $A_n$ <font color=blue>where</font> $R_1$<font color=red>{</font>$A_i$ = $A_i$<font color=red>}</font> ∨ $R_2$<font color=red>{</font>$A_i$ = $A_i$<font color= Anred>}</font>
Объединение'''Разность $R_1 ∖ R_2$'''A1Выбираем только такие наборы значений $A_1$...$A_n$, что соответствующий кортеж есть в $R_1$, но нет в $R_2$ $A_1$, ..., An $A_n$ <font color=blue>where R1</font> $R_1$<font color=red>{Ai</font>$A_i$ =Ai$A_i$<font color=red>} ∨ R2</font> ∧ $¬R_2$<font color=red>{Ai</font>$A_i$ = $A_i$<font color=Aired>}</font>
Разность'''Декартово произведение $R_1 × R_2$'''A1Выбираем наборы значений $A_1$, ..., An $A_n$, $B_1$, ..., $B_m$ такие, что ($A_1$...$A_n$) есть в $R_1$, а ($B_1$...$B_n$) есть в $R_2$ $A_1$, ..., $A_n$, $B_1$, ..., $B_m$ <font color=blue>where R1</font> $R_1$<font color=red>{Ai</font>$A_i$ =Ai$A_i$<font color=red>} </font> ¬R2$R_2$<font color=red>{Ai</font>$B_j$ = $B_j$<font color=Aired>}</font>
Декартово произведение'''Естественное соединение $R_1 ⋈ R_2$''' A1Выбираем такие наборы значений $A_1$, ..., An$A_n$, B1$B_1$, ..., Bm $B_m$, $C_1$, ..., $C_l$, что $B_1$, ..., $B_m$ что ($A_1$, ..., $A_n$, $B_1$, ..., $B_m$) входит в $R_1$, а ($B_1$, ..., $B_m$, $C_1$, ..., $C_l$) в $R_2$. Автоматически получаем соединение по $B_1$, ..., $B_m$. Это можно было бы записать иначе - явной проверкой равенства этих атрибутов (тогда придётся использовать ещё m переменных), но проще сделать так. $A_1$, ..., $A_n$, $B_1$, ..., $B_m$, $C_1$, ..., $C_l$ <font color=blue>where R1</font> $R_1$<font color=red>{Ai</font>$A_i$ = $A_i$, $B_j$ = $B_j$<font color=Aired>} </font> R2$R_2$<font color=red>{Bj</font>$C_k$ = $C_k$, $B_j$ = $B_j$<font color=Bjred>}</font>
Естественное соединениеA1, ..., An, B1, ..., Bm, C1, ..., Cl where<div></div> R1{Ai=Ai, Bj=Bj} ∧ R2{Ck=Ck, Bj=Bj} -> Исчисление доменов реляционно полно
1632
правки

Навигация