|
|
(не показаны 2 промежуточные версии 2 участников) |
Строка 1: |
Строка 1: |
− | В этом разделе будет рассмотрен один из видов [[Реляционное исчисление | реляционного исчисления]] {{---}} исчисление кортежей.
| |
| | | |
− | == Переменные-кортежи ==
| |
− | Каждая переменная-кортеж имеет тип.
| |
− |
| |
− | === Тип кортежа ===
| |
− | * Имена и типы атрибутов;
| |
− | * Набор значений.
| |
− | Комбинация из имен и типов атрибутов и набора значений в данной модели называется отношением. Из этого следует, что каждая кортежная переменная пробегает некоторое отношение.
| |
− |
| |
− | === Синтаксис ===
| |
− | <font color = red>Переменная <font color = grey>::</font> Отношение</font>
| |
− |
| |
− | === Примеры ===
| |
− | S <font color = grey>::</font> Students
| |
− | G <font color = grey>::</font> Groups
| |
− | 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>'M34371'</font> <font color = blue>∨</font>
| |
− | Name <font color = grey>=</font> <font color = green>'M34391'</font>
| |
− | Последний пример демонстрирует, что для отношения можно указать ограничивающее его условие.
| |
− |
| |
− | == Операции с отношениями ==
| |
− | === Ограничение ===
| |
− | Можно ограничить отношение, выбрав те кортежи, которые удовлетворяют требуемым условиям.
| |
− | <font color = red>Отношения</font> <font color = blue>where</font> <font color = red>Условие</font>
| |
− |
| |
− | === Объединение ===
| |
− | Для объединения используется синтаксис перечисления необходимых отношений через запятую.
| |
− | <font color = red>Отношение1<font color = grey>,</font> Отношение2</font>
| |
− |
| |
− | === Примеры ===
| |
− | Groups <font color = blue>where</font> Name <font color = grey>=</font> <font color = green>'M34371'</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>'M34391'</font>
| |
− |
| |
− | == Условия ==
| |
− | === Простые условия ===
| |
− | Сравнение атрибутов с константами:
| |
− | S<font color = grey>.</font>Name <font color = grey>=</font> <font color = green>'Иван'</font>
| |
− |
| |
− | S<font color = grey>.</font>Id <font color = grey><</font> <font color = #056967>5</font>
| |
− |
| |
− | Сравнение атрибутов между собой (в том числе и на неравенство):
| |
− | S<font color = grey>.</font>Id <font color = blue>$\geq$</font> G<font color = grey>.</font>Id
| |
− |
| |
− | Сравнение с применением формул:
| |
− | 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>
| |
− | Можно использовать любые формулы, зависящие от значений кортежных переменных.
| |
− |
| |
− | === Составные условия ===
| |
− | Из простых условий можно строить логические формулы с помощью стандартных связок: <font color = blue>$\land$</font>, <font color = blue>$\lor$</font>, <font color = blue>$\lnot$</font>.
| |
− |
| |
− | G <font color = blue>where</font> Name <font color = gray>=</font> <font color = green>'M34371'</font> <font color = blue>∨</font> Name <font color =
| |
− | gray>=</font> <font color = green>'M34391'</font>
| |
− |
| |
− | S <font color = blue>where</font> FirstName <font color = gray>=</font> <font color = green>'Иван'</font> <font color = blue>∧</font> LastName <font color = gray><></font> <font color = green>'Иванов'</font>
| |
− |
| |
− | === Условия с кванторами ===
| |
− | Поверх логических формул можно навешивать кванторы:
| |
− | * Всеобщности <font color = blue>$\forall$</font>;
| |
− | * Существования <font color = blue>$\exists$</font>.
| |
− |
| |
− | ==== Синтаксис ====
| |
− | <font color = red>Квантор Переменная <font color = grey>(</font>Условие<font color = grey>)</font></font>
| |
− |
| |
− | ==== Примеры ====
| |
− | G <font color = blue>where</font> <font color = blue>$\exists$</font>S <font color = gray>(</font>S<font color = gray>.</font>FirstName <font color = gray>=</font> <font color = green>'Иван'</font> <font color = blue>∧</font> S<font color = gray>.</font>GId <font color = gray>=</font> G<font color = gray>.</font>GId<font color = gray>)</font>
| |
− |
| |
− | G <font color = blue>where</font> <font color = blue>$\forall$</font>S <font color = gray>(</font>S<font color = gray>.</font>FirstName <font color = gray>=</font> <font color = green>'Иван'</font> <font color = blue>∨</font> S<font color = gray>.</font>GId <font color = gray><></font> G<font color = gray>.</font>GId<font color = gray>)</font>
| |
− |
| |
− | Про каждую переменную известно, из какого она отношения, поэтому при подстановке в квантор рассматриваются только значения переменных из соответствующих отношений.
| |
− |
| |
− | == Примеры ==
| |
− | Переменные:
| |
− | S <font color = grey>::</font> Students<font color = grey>;</font> G <font color = grey>::</font> Groups<font color = grey>;</font> C <font color = grey>::</font> Courses<font color = grey>;</font> P <font color = grey>::</font> Point<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 = blue>∨</font>
| |
− | Name <font color = grey>=</font> <font color = green>'M34371'</font> <font color = blue>∨</font> Name <font color = grey>=</font> <font color = green>'M34391'</font>
| |
− |
| |
− | Полностью аттестованные группы:
| |
− | <font color = blue>select</font> G<font color = grey>.</font>GId <font color = blue>from</font> G <font color = blue>where</font> <font color = blue>$\forall$</font>S <font color = grey>(</font><font color = blue>$\forall$</font>C <font color = grey>(</font><font color = blue>$\exists$</font>P
| |
− | <font color = grey>(</font>S<font color = grey>.</font>SId <font color = grey>=</font> P<font color = grey>.</font>SId <font color = blue>$\land$</font> C<font color = grey>.</font>CId <font color = grey>=</font> P<font color = grey>.</font>CId <font color = blue>$\land$</font> P<font color = grey>.</font>Points <font color = blue>≥</font> 60<font color = grey>)))</font>
| |
− |
| |
− | Несколько отношений:
| |
− | <font color = blue>select</font> S<font color = grey>.</font>FirstName<font color = grey>,</font> S<font color = grey>.</font>LastName<font color = grey>,</font> G<font color = grey>.</font>Name
| |
− | <font color = blue>from</font> S<font color = grey>,</font> G
| |
− | <font color = blue>where</font> S<font color = grey>.</font>GId <font color = grey>=</font> G<font color = grey>.</font>GId
| |