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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Исчисление доменов)
(Исчисление доменов)
Строка 1: Строка 1:
 
==Исчисление доменов==
 
==Исчисление доменов==
В отличие от исчисления кортежей, где областью знацения переменных были отношения, в исчислении доменов, значения переменных лежат в заренее заданых доменах (мы будем называть их также типами). Введём синтаксис для указания типов переменных. Также введём предикат, который для заданного отношения и значений атрибутов проверяет, есть ли совпадающий кортеж в отношении.
+
В отличие от исчисления кортежей, где областью значения переменных были отношения, в исчислении доменов, значения переменных лежат в заренее заданых доменах (мы будем называть их также типами). Введём синтаксис для указания типов переменных. Также введём предикат, который для заданного отношения и значений атрибутов проверяет, есть ли совпадающий кортеж в отношении.
 
===Синтаксис===
 
===Синтаксис===
 
  <font color=red>Переменная</font> :: <font color=red>Тип</font> <font color=green>-- Переменная может принимать значения из какого-то типа. Тип == набор значений
 
  <font color=red>Переменная</font> :: <font color=red>Тип</font> <font color=green>-- Переменная может принимать значения из какого-то типа. Тип == набор значений
Строка 12: Строка 12:
  
 
===Условие принадлежности===
 
===Условие принадлежности===
Предикат, значение которого истина тогда, когда в отношении есть кортеж с совпадающими значениями атрибутов.
+
Предикат, значение которого истина тогда и только тогда, когда в отношении есть кортеж с совпадающими значениями атрибутов.
 +
 
 +
Например:
  
 
  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 = <font color=green>'Иван'</font>, LastName = <font color=green>'Иванов'</font><font color=red>}</font>
 +
 +
Будет истинным, если в отношении будет кортеж <code>(FirstName = 'Иван', LastName = 'Иванов')</code> или <code>(FirstName = 'Иван', LastName = 'Иванов', Email = 'ivan@example.com')</code> и ложным, если хотя бы какой-нибудь атрибут не совпадёт.
  
 
===Примеры запросов===
 
===Примеры запросов===

Версия 16:05, 19 декабря 2021

Исчисление доменов

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

Синтаксис

Переменная :: Тип -- Переменная может принимать значения из какого-то типа. Тип == набор значений

 -- Условие принадлежности отношению
Отношение {
  Атрибут1 = Значение1,
  Атрибут2 = Значение2,
  ...
}

Условие принадлежности

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

Например:

S{FirstName = 'Иван', LastName = 'Иванов'}

Будет истинным, если в отношении будет кортеж (FirstName = 'Иван', LastName = 'Иванов') или (FirstName = 'Иван', LastName = 'Иванов', Email = 'ivan@example.com') и ложным, если хотя бы какой-нибудь атрибут не совпадёт.

Примеры запросов

Идентификаторы всех студентов
SId where S{SId = SId}
Идентификаторы студентов, не сдавших курс с CId=10
SId where ¬∃Points (Points ≥ 60 ∧ Points{SId = SId, Points = Points, CId = 10})

Реляционная полнота исчисления доменов

Проекция $\pi_{A_1, ..., A_n}(R)$

$A_1$, ..., $A_n$ from $R$ where $R${$A_1$ = $A_1$, ..., $A_n$ = $A_n$}

Фильтр $σ_θ(R)$

$A_1$, ..., $A_n$ from $R$ where $R${$A_1$ = $A_1$, ..., $A_n$ = $A_n$} ∧ $θ$

Переименовывание $ε_{A=expr}(R_1)$

expr as A from $R$ where $R${$A_1$ = $A_1$, ..., $A_n$ = $A_n$}

Объединение $R_1 ∪ R_2$

$A_1$, ..., $A_n$ where $R_1${$A_i$ = $A_i$} ∨ $R_2${$A_i$ = $A_i$}

Разность $R_1 ∖ R_2$

$A_1$, ..., $A_n$ where $R_1${$A_i$ = $A_i$} ∧ $¬R_2${$A_i$ = $A_i$}

Декартово произведение $R_1 × R_2$

$A_1$, ..., $A_n$, $B_1$, ..., $B_m$ where $R_1${$A_i$ = $A_i$} ∧ $R_2${$B_j$ = $B_j$}

Естественное соединение $R_1 ⋈ R_2$

$A_1$, ..., $A_n$, $B_1$, ..., $B_m$, $C_1$, ..., $C_l$ where $R_1${$A_i$ = $A_i$, $B_j$ = $B_j$} ∧ $R_2${$C_k$ = $C_k$, $B_j$ = $B_j$}