Исчисление кортежей

Материал из Викиконспекты
Перейти к: навигация, поиск

В этом разделе будет рассмотрен один из видов реляционного исчисления — исчисление кортежей.

Переменные-кортежи

У каждой переменной-кортежа есть тип — набор атрибутов, для каждого из которых есть домен, а так же набор значений. Такая комбинация в данной модели называется отношением. Из этого следует, что каждая кортежная переменная пробегает некоторое отношение.

Синтаксис

Для каждой переменной берем ее значение из тела соответствующего отношения:

Переменная :: Отношение

Примеры

Мжно задать переменная S, которая пробегает по всем студентам, и переменную G, которая пробегает по всем группам:

S :: Students
G :: Groups

Можно записать группы четвертого курса, то есть группы, которые имеют название M34351, M34371 или M34391:

G4 :: Groups where
    Name = 'M34351' 
    Name = 'M34371' 
    Name = 'M34391'

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

Операции с отношениями

Ограничение

Можно ограничить отношение, выбрав те кортежи, которые удовлетворяют требуемым условиям. Это делается с помощью ключевого слова where:

Отношения where Условие

Объединение

Для объединения используется синтаксис перечисления объединяемых отношений через запятую:

Отношение1, Отношение2

Примеры

Рассмотрим примеры. Можно задать отношение — группы, имеющие название M34371:

Groups where Name = 'M34371'

Помимо способа, предложенного в предыдущей секции, можно задать группы 4 курса по-другому. Это такие группы, у которых название M34351, еще такие группы, у которых название M34371, и такие группы, у которых название M34391.

G4 :: Groups where Name = 'M34351',
        Groups where Name = 'M34371',
        Groups where Name = 'M34391'

Условия

Простые условия

Сравнение атрибутов с константами:

S.Name = 'Иван'
S.Id < 5

Сравнение атрибутов между собой (в том числе и на неравенство):

S.Id $\geq$ G.Id

Сравнение с применением формул:

length(S.FirstName) = length(S.LastName) + 3

Можно использовать любые формулы, зависящие от значений кортежных переменных.

Составные условия

Из простых условий можно строить логические формулы с помощью стандартных связок: $\land$, $\lor$, $\lnot$.

G where Name = 'M34371'  Name = 'M34391'
S where FirstName = 'Иван'  LastName <> 'Иванов'

Условия с кванторами

Поверх логических формул можно навешивать кванторы:

  • Всеобщности $\forall$;
  • Существования $\exists$.

Синтаксис

Квантор Переменная (Условие)

Примеры

G where $\exists$S (S.FirstName = 'Иван'  S.GId = G.GId)
G where $\forall$S (S.FirstName = 'Иван'  S.GId <> G.GId)

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

Примеры

Переменные:

S :: Students; G :: Groups; C :: Courses; P :: Point;
G4 :: Groups where Name = 'M34351' 
    Name = 'M34371'  Name = 'M34391'

Полностью аттестованные группы:

select G.GId from G where $\forall$S ($\forall$C ($\exists$P
    (S.SId = P.SId $\land$ C.CId = P.CId $\land$ P.Points  60)))

Несколько отношений:

select S.FirstName, S.LastName, G.Name
from S, G
where S.GId = G.GId