Содержание
- Реляционное исчисление
- Типы реляционного исчисления
- Структура запроса
- Исчисление кортежей
- Реляционные переменные
- Условия
- Простые
- С кванторами
- Связь реляционной алгебры и реляционного исчисления
- Выражение алгебры через исчисление
- Выражение исчисления через алгебру
- Реляционная полнота
- Исчисление доменов
- Доменные переменные
- Условие принадлежности
- Язык Datalog
- Определение отношений
- Реляционная полнота
- Рекурсия
- Реляционное исчисление и SQL
- Структура запроса
- Подзапросы
- Существования
- Вхождения
- Условные
- Скалярные
- Рекурсия
Экзаменационные вопросы
- Исчисление кортежей и его реляционная полнота
- Исчисление доменов и его реляционная полнота
- Datalog и рекурсия
Практические навыки
- Построение запросов в терминах исчисления кортежей
- Построение запросов в терминах исчисления доменов
- Перевод запросов из терминов реляционного исчисления в SQL и обратно
- Построение запросов на SQL (с подзапросами)
Библиография
- Дейт К. Введение в системы баз данных (глава 8)
- Уидом Д., Ульман Д. Основы реляционных баз данных (главы 4 и 5)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 31 – Searching with Subqueries)
- Codd E.F. A relational model of data for large shared data banks
- Codd E.F. Relational completeness of data base sublanguages
Домашнее задание 6. Реляционное исчисление
Составьте запросы в терминах языков Datalog и SQL для базы данных «Университет», позволяющие получать
-
Информацию о студентах
- С заданным ФИО (StudentId, StudentName, GroupId по :StudentName).
- Учащихся в заданной группе (StudentId, StudentName, GroupId по :GroupName).
- Учащихся на заданном факультете (StudentId, StudentName, GroupId по :FacultyName).
- C заданной оценкой по дисциплине, заданной идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId).
- C заданной оценкой по дисциплине, заданной названием (StudentId, StudentName, GroupId по :Mark, :CourseName).
-
Полную информацию о студентах
- Для всех студентов (StudentId, StudentName, GroupName).
- Учащихся на заданном факультете (StudentId, StudentName, GroupName по :FacultyName).
- C факультета, заданного деканом (StudentId, StudentName, GroupName по :LecturerName).
- Студентов, не имеющих оценки по дисциплине, заданной идентификатором (StudentId, StudentName, GroupName по :CourseId).
- Студентов, не имеющих оценки по дисциплине, заданной названием (StudentId, StudentName, GroupName по :CourseName).
- Студентов, не имеющих оценки по дисциплине, у которых есть эта дисциплина (StudentId, StudentName, GroupName по :CourseId).
- Студентов, не имеющих оценки по дисциплине, у которых есть эта дисциплина (StudentId, StudentName, GroupName по :CourseName).
-
Студенты и дисциплины, такие что у студента была дисциплина
(по плану или есть оценка)
- Идентификаторы (StudentId, CourseId).
- Имя и название (StudentName, CourseName).
- Имя и название, преподаватель того же факультета (StudentName, CourseName).
- Имя и название, преподаватель другого факультета (StudentName, CourseName).
-
Студенты и дисциплины, такие что
дисциплина есть в его плане,
и у студента долг по этой дисциплине
- Долгом считается отсутствие оценки (StudentName, CourseName).
- Долгом считается оценка не выше 2 (StudentName, CourseName).
- Долгом считается отсутствие оценки или оценка не выше 2 (StudentName, CourseName).
-
Идентификаторы студентов по преподавателю
- Имеющих хотя бы одну оценку у преподавателя (StudentId по :LecturerName).
- Не имеющих ни одной оценки у преподавателя (StudentId по :LecturerName).
- Имеющих оценки по всем дисциплинам преподавателя (StudentId по :LecturerName).
- Имеющих оценки по всем дисциплинам преподавателя, которые он вёл у этого студента (StudentId по :LecturerName).
-
Группы и дисциплины, такие что
все студенты группы имеют оценку по предмету
- Идентификаторы (GroupId, CourseId).
- Названия (GroupName, CourseName).
Примечания
- В Datalog итоговым считается последнее объявленное отношение.
- Текущая реализация Datalog не поддерживает рекурсивные определения.
- В SQL-запросах нельзя использовать
* join
. - SQL проверяется четырьмя тестами на фазу — с разными СУБД. Первая СУБД — SQLite, как на тестовом полигоне.
В рамках проекта:
- Определите запросы (в том числе, агрегирующие), необходимые для работы проекта.
- Реализуйте запросы на языке SQL.