Исчисление кортежей — различия между версиями
Sashapff (обсуждение | вклад) (→Переменные-кортежи) |
(→Cравнение атрибутов с применением формул) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
== Переменные-кортежи == | == Переменные-кортежи == | ||
− | + | У каждой переменной-кортежа есть тип {{---}} набор атрибутов, для каждого из которых есть домен, а так же набор значений. Такая комбинация в данной модели называется отношением. Из этого следует, что каждая кортежная переменная пробегает некоторое отношение. | |
=== Синтаксис === | === Синтаксис === | ||
+ | Для каждой переменной берем ее значение из тела соответствующего отношения: | ||
<font color = red>Переменная <font color = grey>::</font> Отношение</font> | <font color = red>Переменная <font color = grey>::</font> Отношение</font> | ||
=== Примеры === | === Примеры === | ||
+ | Мжно задать переменная S, которая пробегает по всем студентам, и переменную G, которая пробегает по всем группам: | ||
S <font color = grey>::</font> Students | S <font color = grey>::</font> Students | ||
G <font color = grey>::</font> Groups | G <font color = grey>::</font> Groups | ||
+ | Можно записать группы четвертого курса, то есть группы, которые имеют название M34351, M34371 или M34391: | ||
G4 <font color = grey>::</font> Groups <font color = blue>where</font> | G4 <font color = grey>::</font> Groups <font color = blue>where</font> | ||
Name <font color = grey>=</font> <font color = green>'M34351'</font> <font color = blue>∨</font> | Name <font color = grey>=</font> <font color = green>'M34351'</font> <font color = blue>∨</font> | ||
Строка 18: | Строка 21: | ||
== Операции с отношениями == | == Операции с отношениями == | ||
=== Ограничение === | === Ограничение === | ||
− | Можно ограничить отношение, выбрав те кортежи, которые удовлетворяют требуемым условиям. | + | Можно ограничить отношение, выбрав те кортежи, которые удовлетворяют требуемым условиям. Это делается с помощью ключевого слова where: |
<font color = red>Отношения</font> <font color = blue>where</font> <font color = red>Условие</font> | <font color = red>Отношения</font> <font color = blue>where</font> <font color = red>Условие</font> | ||
=== Объединение === | === Объединение === | ||
− | Для объединения используется синтаксис перечисления | + | Для объединения используется синтаксис перечисления объединяемых отношений через запятую: |
<font color = red>Отношение1<font color = grey>,</font> Отношение2</font> | <font color = red>Отношение1<font color = grey>,</font> Отношение2</font> | ||
=== Примеры === | === Примеры === | ||
+ | Рассмотрим примеры. Можно задать отношение {{---}} группы, имеющие название M34371: | ||
Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34371'</font> | Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34371'</font> | ||
− | + | Помимо способа, предложенного в предыдущей секции, можно задать группы 4 курса по-другому. Это такие группы, у которых название M34351, еще такие группы, у которых название M34371, и такие группы, у которых название M34391. | |
G4 <font color = grey>::</font> Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34351'</font><font color = grey>,</font> | G4 <font color = grey>::</font> Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34351'</font><font color = grey>,</font> | ||
Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34371'</font><font color = grey>,</font> | Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34371'</font><font color = grey>,</font> | ||
Строка 33: | Строка 37: | ||
== Условия == | == Условия == | ||
+ | Разделяют три вида условий: простые, составные и условия с кванторами. | ||
=== Простые условия === | === Простые условия === | ||
− | + | ==== Cравнение атрибутов с константами ==== | |
+ | К простым условиям относится сравнение атрибутов с константами. Например, можно найти студентов с именем Иван: | ||
S<font color = grey>.</font>Name <font color = grey>=</font> <font color = green>'Иван'</font> | S<font color = grey>.</font>Name <font color = grey>=</font> <font color = green>'Иван'</font> | ||
− | + | Или выделить студентов с идентификатором меньше 5: | |
S<font color = grey>.</font>Id <font color = grey><</font> <font color = #056967>5</font> | S<font color = grey>.</font>Id <font color = grey><</font> <font color = #056967>5</font> | ||
− | + | ==== Cравнение атрибутов между собой ==== | |
+ | Также можно сравнивать атрибуты между собой, в том числе и на неравенство. Например найти студентов, имеющих идентификатор не меньше, чем идентификатор их группы: | ||
S<font color = grey>.</font>Id <font color = blue>$\geq$</font> G<font color = grey>.</font>Id | S<font color = grey>.</font>Id <font color = blue>$\geq$</font> G<font color = grey>.</font>Id | ||
− | + | ==== Cравнение атрибутов с применением формул ==== | |
+ | В качестве расширения можно использовать произвольные формулы ровно так же, как были устроены расширения в [[Реляционная алгебра|реляционной алгебре]]. Можно использовать любые формулы, зависящие от значений кортежных переменных. Например, можно найти студентов, у которых имя на 3 символа длиннее фамилии: | ||
length<font color = grey>(</font>S<font color = grey>.</font>FirstName<font color = grey>)</font> <font color = grey>=</font> length<font color = grey>(</font>S<font color = grey>.</font>LastName<font color = grey>)</font> <font color = grey>+</font> <font color = #056967>3</font> | length<font color = grey>(</font>S<font color = grey>.</font>FirstName<font color = grey>)</font> <font color = grey>=</font> length<font color = grey>(</font>S<font color = grey>.</font>LastName<font color = grey>)</font> <font color = grey>+</font> <font color = #056967>3</font> | ||
− | |||
=== Составные условия === | === Составные условия === |
Версия 23:59, 26 декабря 2021
В этом разделе будет рассмотрен один из видов реляционного исчисления — исчисление кортежей.
Переменные-кортежи
У каждой переменной-кортежа есть тип — набор атрибутов, для каждого из которых есть домен, а так же набор значений. Такая комбинация в данной модели называется отношением. Из этого следует, что каждая кортежная переменная пробегает некоторое отношение.
Синтаксис
Для каждой переменной берем ее значение из тела соответствующего отношения:
Переменная :: Отношение
Примеры
Мжно задать переменная 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'
Условия
Разделяют три вида условий: простые, составные и условия с кванторами.
Простые условия
Cравнение атрибутов с константами
К простым условиям относится сравнение атрибутов с константами. Например, можно найти студентов с именем Иван:
S.Name = 'Иван'
Или выделить студентов с идентификатором меньше 5:
S.Id < 5
Cравнение атрибутов между собой
Также можно сравнивать атрибуты между собой, в том числе и на неравенство. Например найти студентов, имеющих идентификатор не меньше, чем идентификатор их группы:
S.Id $\geq$ G.Id
Cравнение атрибутов с применением формул
В качестве расширения можно использовать произвольные формулы ровно так же, как были устроены расширения в реляционной алгебре. Можно использовать любые формулы, зависящие от значений кортежных переменных. Например, можно найти студентов, у которых имя на 3 символа длиннее фамилии:
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