Содержание

  1. Реляционное исчисление
    1. Типы реляционного исчисления
    2. Структура запроса
  2. Исчисление кортежей
    1. Реляционные переменные
    2. Условия
      1. Простые
      2. С кванторами
  3. Связь реляционной алгебры и реляционного исчисления
    1. Выражение алгебры через исчисление
    2. Выражение исчисления через алгебру
    3. Реляционная полнота
  4. Исчисление доменов
    1. Доменные переменные
    2. Условие принадлежности
  5. Язык Datalog
    1. Определение отношений
    2. Реляционная полнота
    3. Рекурсия
  6. Реляционное исчисление и SQL
    1. Структура запроса
    2. Подзапросы
      1. Существования
      2. Вхождения
      3. Условные
      4. Скалярные
    3. Рекурсия

Слайды

HTML

Экзаменационные вопросы

  1. Исчисление кортежей и его реляционная полнота
  2. Исчисление доменов и его реляционная полнота
  3. Datalog и рекурсия

Практические навыки

  1. Построение запросов в терминах исчисления кортежей
  2. Построение запросов в терминах исчисления доменов
  3. Перевод запросов из терминов реляционного исчисления в SQL и обратно
  4. Построение запросов на SQL (с подзапросами)

Библиография

  1. Дейт К. Введение в системы баз данных (глава 8)
  2. Уидом Д., Ульман Д. Основы реляционных баз данных (главы 4 и 5)
  3. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 31 – Searching with Subqueries)
  4. Codd E.F. A relational model of data for large shared data banks
  5. Codd E.F. Relational completeness of data base sublanguages

Домашнее задание 6. Реляционное исчисление

Реляционное исчисление

Составьте запросы в терминах языков Datalog и SQL для базы данных «Университет», позволяющие получать:

  1. Информацию о студентах (StudentId, StudentName, GroupId)
    1. С заданным ФИО (:StudentName);
    2. Учащихся в заданной группе (:GroupName);
    3. C заданной оценкой (:Mark) по дисциплине (:CourseId);
    4. C заданной оценкой (:Mark) по дисциплине (:CourseName).
  2. Полную информацию о студентах (StudentId, StudentName, GroupName)
    1. Для всех студентов;
    2. Студентов, не имеющих оценки по дисциплине :CourseId;
    3. Студентов, не имеющих оценки по дисциплине :CourseName;
    4. Студентов, не имеющих оценки по дисциплине :CourseId, у которых есть эта дисциплина.
    5. Студентов, не имеющих оценки по дисциплине :CourseName, у которых есть эта дисциплина.
  3. Студенты и дисциплины, такие что у студента была дисциплина (по плану или есть оценка)
    1. Идентификаторы (StudentId, CourseId);
    2. Имя и название (StudentName, CourseName).
  4. Студенты и дисциплины (StudentName, CourseName), такие что дисциплина есть в его плане и у студента долг по этой дисциплине:
    1. Долгом считается отсутствие оценки;
    2. Долгом считается оценка не выше 2;
    3. Долгом считается и отсутствие оценки и оценка не выше 2;
  5. Идентификаторы студентов по преподавателю (:LecturerName)
    1. Имеющих хотя бы одну оценку у преподавателя;
    2. Не имеющих ни одной оценки у преподавателя;
    3. Имеющих оценки по всем дисциплинам преподавателя;
    4. Имеющих оценки по всем дисциплинам преподавателя, которые он вёл у этого студента.
  6. Группы и дисциплины, такие что все студенты группы сдали дисциплину.
    1. Идентификаторы (GroupId, CourseId);
    2. Названия (GroupName, CourseName).

Примечания

  1. В Datalog итоговым считается последнее объявленное отношение.
  2. Текущая реализация Datalog не поддерживает рекурсивные определения.
  3. В SQL-запросах нельзя использовать * join.

В рамках проекта:

  1. Определите запросы (в том числе, агрегирующие), необходимые для работы проекта.
  2. Реализуйте запросы на языке SQL.