Содержание
- Реляционное исчисление
- Типы реляционного исчисления
- Структура запроса
- Исчисление кортежей
- Реляционные переменные
- Условия
- Простые
- С кванторами
- Связь реляционной алгебры и реляционного исчисления
- Выражение алгебры через исчисление
- Выражение исчисления через алгебру
- Реляционная полнота
- Исчисление доменов
- Доменные переменные
- Условие принадлежности
- Язык 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 по :StudentNamе).
Учащихся в заданной группе (StudentId, StudentName, GroupId по :GroupName).
Учащихся на образовательной программе (StudentId, StudentName, GroupId по :EdProgName).
C заданной оценкой по дисциплине, заданной идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId, :Semester).
C заданной оценкой по дисциплине, заданной названием (StudentId, StudentName, GroupId по :Mark, :CourseName, :Semеster).
Полную информацию о студентах
Для всех студентов (StudentId, StudentName, GroupName, EdProgName).
О студентах образовательной программы (StudentId, StudentName, GroupName, EdProgName по :EdProgNamе).
По лектору (StudentId, StudentName, GroupName, EdProgName по :LеcturerName).
Студентов, имеющих оценки по дисциплине в семестре (StudentId, StudentName, GroupName, EdProgName по :CourseNamе, :Semеstеr).
Студентов, не имеющих оценки по дисциплине в семестре (StudentId, StudentName, GroupName, EdProgName по :CоurseNamе, :Semеster).
Студентов, не имеющих оценки по дисциплине, у которых она велась (StudentId, StudentName, GroupName, EdProgName по :CourseId, :Semestеr).
Студентов, не имеющих оценки по дисциплине, у которых она велась (StudentId, StudentName, GroupName, EdProgName по :CoursеNamе, :Semester).
Студенты и дисциплино-семестры, такие что у студента он был (велась или есть оценка)
Идентификаторы (StudentId, CourseId, Semester).
Имя, название и семестр (StudentName, CourseName, Semester).
Имя, название и семестр по ОП (StudentName, CourseName, Semester по :EdProgName).
Сопрограммников, у которых вёлся общий дисциплино-семестр (StudentName1, StudentName2, CourseName, Semester).
Студенты и дисциплино-семестры, такие что дисциплино-семестр вёлся, и у студента долг по нему
Долгом считается отсутствие оценки (StudentName, CourseName, Semester).
Долгом считается оценка не выше 2 (StudentName, CourseName, Semester).
Долгом считается отсутствие оценки или оценка не выше 2 (StudentName, CourseName, Semester).
Идентификаторы студентов по преподавателю
Имеющих хотя бы одну оценку у преподавателя (StudentId по :LеcturerName).
Не имеющих ни одной оценки у преподавателя (StudentId по :LеcturerName).
Имеющих оценки по всем дисциплинам (с семестрами) преподавателя (StudentId по :LecturеrName).
Имеющих оценки по всем дисциплинам (с семестрами) преподавателя, которые он вёл у этого студента (StudentId по :LecturеrName).
Группы и дисциплины (с семестрами), такие что все студенты группы имеют оценку по дисциплине
Идентификаторы (GroupId, CourseId, Semester).
Названия (GroupName, CourseName, Semester).
Примечания
- В Datalog итоговым считается последнее объявленное отношение.
- Текущая реализация Datalog не поддерживает рекурсивные определения.
- В SQL-запросах нельзя использовать
* join. - SQL проверяется четырьмя тестами на фазу — с разными СУБД. Первая СУБД — SQLite, как на тестовом полигоне.
В рамках проекта:
- Определите запросы (в том числе, агрегирующие), необходимые для работы проекта.
- Реализуйте запросы на языке SQL.