Содержание
- Реляционное исчисление
- Типы реляционного исчисления
- Структура запроса
- Исчисление кортежей
- Реляционные переменные
- Условия
- Простые
- С кванторами
- Связь реляционной алгебры и реляционного исчисления
- Выражение алгебры через исчисление
- Выражение исчисления через алгебру
- Реляционная полнота
- Исчисление доменов
- Доменные переменные
- Условие принадлежности
- Язык 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 по :ClubName).
C заданной оценкой по дисциплине, заданной идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId).
C заданной оценкой по дисциплине, заданной названием (StudentId, StudentName, GroupId по :Mark, :CourseName).
Полную информацию о студентах
Для всех студентов (StudentId, StudentName, GroupName).
Участниках клуба (StudentId, StudentName, GroupName по :ClubName).
Участниках клуба по руководителю (StudentId, StudentName, GroupName по :StudentName).
Студентов, не имеющих оценки по дисциплине, заданной идентификатором (StudentId, StudentName, GroupName по :CourseId).
Студентов, не имеющих оценки по дисциплине, заданной названием (StudentId, StudentName, GroupName по :CourseName).
Студентов, не имеющих оценки по дисциплине, у которых есть эта дисциплина (StudentId, StudentName, GroupName по :CourseId).
Студентов, не имеющих оценки по дисциплине, у которых есть эта дисциплина (StudentId, StudentName, GroupName по :CourseName).
Студенты и дисциплины, такие что у студента была дисциплина (по плану или есть оценка)
Идентификаторы (StudentId, CourseId).
Имя и название (StudentName, CourseName).
Имя и название по клубу (StudentName, CourseName по :ClubName).
Соклубников, изучавших один предмет (StudentName1, StudentName2, 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.