Тема  6. Реляционное исчисление

Содержание

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

Примечания

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

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

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