Реляционное исчисление — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Реляционное исчисление)
м (rollbackEdits.php mass rollback)
 
(не показаны 22 промежуточные версии 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.

Запрос в реляционной алгебре состоит из естественного соединения студентов с номерами групп, затем фильтрации по номеру группы и получения идентификаторов студентов: [math]\pi_{SId}(\sigma_{Name=M34371}(Students \bowtie Groups))[/math]. По шагам описали, что необходимо сделать.

Соответсвующий запрос в терминах исчисления кортежей (S — Students, G — Groups):

select S.SId from S
where $\exists$G (S.GId = G.GId  G.Name = 'M34371')

То есть, не указываем, как конкретно собираемся исполнять запрос, а описали, какие студенты нас интересуют.