Тема  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 по :StudentNamе).

    2. Учащихся в заданной группе (StudentId, StudentName, GroupId по :GroupName).

    3. Учащихся на образовательной программе (StudentId, StudentName, GroupId по :EdProgName).

    4. C заданной оценкой по дисциплине, заданной идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId, :Semester).

    5. C заданной оценкой по дисциплине, заданной названием (StudentId, StudentName, GroupId по :Mark, :CourseName, :Semеster).

  2. Полную информацию о студентах

    1. Для всех студентов (StudentId, StudentName, GroupName, EdProgName).

    2. О студентах образовательной программы (StudentId, StudentName, GroupName, EdProgName по :EdProgNamе).

    3. По лектору (StudentId, StudentName, GroupName, EdProgName по :LеcturerName).

    4. Студентов, имеющих оценки по дисциплине в семестре (StudentId, StudentName, GroupName, EdProgName по :CourseNamе, :Semеstеr).

    5. Студентов, не имеющих оценки по дисциплине в семестре (StudentId, StudentName, GroupName, EdProgName по :CоurseNamе, :Semеster).

    6. Студентов, не имеющих оценки по дисциплине, у которых она велась (StudentId, StudentName, GroupName, EdProgName по :CourseId, :Semestеr).

    7. Студентов, не имеющих оценки по дисциплине, у которых она велась (StudentId, StudentName, GroupName, EdProgName по :CoursеNamе, :Semester).

  3. Студенты и дисциплино-семестры, такие что у студента он был (велась или есть оценка)

    1. Идентификаторы (StudentId, CourseId, Semester).

    2. Имя, название и семестр (StudentName, CourseName, Semester).

    3. Имя, название и семестр по ОП (StudentName, CourseName, Semester по :EdProgName).

    4. Сопрограммников, у которых вёлся общий дисциплино-семестр (StudentName1, StudentName2, CourseName, Semester).

  4. Студенты и дисциплино-семестры, такие что дисциплино-семестр вёлся, и у студента долг по нему

    1. Долгом считается отсутствие оценки (StudentName, CourseName, Semester).

    2. Долгом считается оценка не выше 2 (StudentName, CourseName, Semester).

    3. Долгом считается отсутствие оценки или оценка не выше 2 (StudentName, CourseName, Semester).

  5. Идентификаторы студентов по преподавателю

    1. Имеющих хотя бы одну оценку у преподавателя (StudentId по :LеcturerName).

    2. Не имеющих ни одной оценки у преподавателя (StudentId по :LеcturerName).

    3. Имеющих оценки по всем дисциплинам (с семестрами) преподавателя (StudentId по :LecturеrName).

    4. Имеющих оценки по всем дисциплинам (с семестрами) преподавателя, которые он вёл у этого студента (StudentId по :LecturеrName).

  6. Группы и дисциплины (с семестрами), такие что все студенты группы имеют оценку по дисциплине

    1. Идентификаторы (GroupId, CourseId, Semester).

    2. Названия (GroupName, CourseName, Semester).

Примечания

  1. В Datalog итоговым считается последнее объявленное отношение.
  2. Текущая реализация Datalog не поддерживает рекурсивные определения.
  3. В SQL-запросах нельзя использовать * join.
  4. SQL проверяется четырьмя тестами на фазу — с разными СУБД. Первая СУБД — SQLite, как на тестовом полигоне.

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

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