Реляционное исчисление — различия между версиями
Sashapff (обсуждение | вклад) (Новая страница: «В этом разделе рассматривается такой подход к формированию запросов, как реляционное ис…») |
м (rollbackEdits.php mass rollback) |
||
(не показаны 23 промежуточные версии 4 участников) | |||
Строка 1: | Строка 1: | ||
− | В этом разделе | + | В этом разделе будет рассмотрен подход к формированию запросов, основанный на описании данных, которые необходимо получить. |
== Реляционное исчисление == | == Реляционное исчисление == | ||
Строка 5: | Строка 5: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Реляционное исчисление''' {{---}} декларативный язык для работы с отношениями, описывающий | + | '''Реляционное исчисление''' {{---}} декларативный язык для работы с отношениями, описывающий какими свойствами должен обладать требуемый результат. |
}} | }} | ||
+ | В отличие от [[Реляционная алгебра | реляционной алгебры]] не описываем, как будет получен результат. | ||
Выделяют две разновидности реляционного исчисления: | Выделяют две разновидности реляционного исчисления: | ||
− | * Исчисление кортежей; | + | * Исчисление кортежей {{---}} переменные принимают значения кортежа целиком; |
− | * Исчисление доменов. | + | * Исчисление доменов {{---}} каждая переменная принимает одно атомарное значение из какого-то домена. |
+ | |||
+ | == Структура запросов == | ||
+ | Запросы в обоих видах исчислений устроены одинаково: сначала определяем переменные, с которыми будем работать, а затем определяем атрибуты результата из наборов переменных и свойства, которым они должны удовлетворять. Для реализации описанного поведения в реляционном исчисление используется стандартная конструкция select-from-where, как и в [[Реляционная алгебра|реляционной алгебре]]. В секции select указываются интересующие атрибуты, в секции from указываются переменные, из которых берутся соответствующие атрибуты, а в секции where ограничивающие условия. С точки зрения синтаксиса запрос выглядит так: | ||
+ | <font color = red>Определения переменных</font> | ||
+ | <font color = blue>select</font> <font color = red>СписокАтрибутов</font> | ||
+ | <font color = blue>from</font> <font color = red>Переменные</font> | ||
+ | <font color = blue>where</font> <font color = red>Условие</font> | ||
+ | |||
+ | == Отличия от реляционной алгебры == | ||
+ | Рассмотрим разницу между [[Реляционная алгебра | реляционной алгеброй]] и реляционным исчислением на примере: получить идентификаторы студентов, обучающихся в группе M34371. | ||
+ | |||
+ | Запрос в реляционной алгебре состоит из естественного соединения студентов с номерами групп, затем фильтрации по номеру группы и получения идентификаторов студентов: | ||
+ | <tex>\pi_{SId}(\sigma_{Name=M34371}(Students \bowtie Groups))</tex>. По шагам описали, что необходимо сделать. | ||
+ | |||
+ | Соответсвующий запрос в терминах исчисления кортежей (S {{---}} Students, G {{---}} Groups): | ||
+ | <font color = blue>select</font> S<font color = grey>.</font>SId <font color = blue>from</font> S | ||
+ | <font color = blue>where $\exists$</font>G <font color = grey>(</font>S<font color = grey>.</font>GId <font color = grey>=</font> G<font color = grey>.</font>GId <font color = blue>∧</font> G<font color = grey>.</font>Name <font color = grey>=</font> <font color = green>'M34371'</font><font color = grey>)</font> | ||
+ | То есть, не указываем, как конкретно собираемся исполнять запрос, а описали, какие студенты нас интересуют. |
Текущая версия на 19:36, 4 сентября 2022
В этом разделе будет рассмотрен подход к формированию запросов, основанный на описании данных, которые необходимо получить.
Реляционное исчисление
Определение: |
Реляционное исчисление — декларативный язык для работы с отношениями, описывающий какими свойствами должен обладать требуемый результат. |
В отличие от реляционной алгебры не описываем, как будет получен результат.
Выделяют две разновидности реляционного исчисления:
- Исчисление кортежей — переменные принимают значения кортежа целиком;
- Исчисление доменов — каждая переменная принимает одно атомарное значение из какого-то домена.
Структура запросов
Запросы в обоих видах исчислений устроены одинаково: сначала определяем переменные, с которыми будем работать, а затем определяем атрибуты результата из наборов переменных и свойства, которым они должны удовлетворять. Для реализации описанного поведения в реляционном исчисление используется стандартная конструкция select-from-where, как и в реляционной алгебре. В секции select указываются интересующие атрибуты, в секции from указываются переменные, из которых берутся соответствующие атрибуты, а в секции where ограничивающие условия. С точки зрения синтаксиса запрос выглядит так:
Определения переменных select СписокАтрибутов from Переменные where Условие
Отличия от реляционной алгебры
Рассмотрим разницу между реляционной алгеброй и реляционным исчислением на примере: получить идентификаторы студентов, обучающихся в группе M34371.
Запрос в реляционной алгебре состоит из естественного соединения студентов с номерами групп, затем фильтрации по номеру группы и получения идентификаторов студентов:
. По шагам описали, что необходимо сделать.Соответсвующий запрос в терминах исчисления кортежей (S — Students, G — Groups):
select S.SId from S where $\exists$G (S.GId = G.GId ∧ G.Name = 'M34371')
То есть, не указываем, как конкретно собираемся исполнять запрос, а описали, какие студенты нас интересуют.