Домашнее задание 1

  1. Установите систему управления реляционными базами данных.
  2. Узнайте, как в вашей СУБД исполнять SQL в интерактивном режиме.
  3. Узнайте, как в вашей СУБД исполнять SQL в пакетном режиме.
  4. Разберитесь, как в вашей СУБД осуществляется поддержка русского языка.
  5. Создайте базу данных и наполните ее в соответствии с разобранным примерами.

Домашнее задание 2

Спроектируйте базу данных «Деканат», позволяющую хранить информацию о студентах, группах, преподавателях, предметах, оценках.
  1. Составьте модель сущность-связь.
  2. Преобразуйте модель сущность-связь в физическую модель.
  3. Запишите физическую модель на языке SQL. Модель должна включать объявления ограничений.
  4. Создайте базу данных по спроектированной модели.
  5. Запишите операторы SQL, заполняющие базу тестовыми данными.

Домашнее задание 3

Дано отношение с атрибутами StudentId, StudentName, GroupId, GroupName, CourseId, CourseName, LecturerId, LecturerName, Mark.
  1. Найдите функциональные зависимости в данном отношении.
  2. Найдите ключи данного отношения.
  3. Найдите неприводимое множество функциональных зависимостей для данного отношения.

Домашнее задание 4

Дано отношение с атрибутами StudentId, StudentName, GroupId, GroupName, CourseId, CourseName, LecturerId, LecturerName, Mark.
  1. Инкрементально приведите данное отношение в 5 нормальную форму.
  2. Постройте соответствующую модель сущность-связь.
  3. Постройте соответствующую физическую модель.
  4. Реализуйте SQL-скрипты, создающие схему базы данных.
  5. Создайте базу данных по спроектированной модели.
  6. Заполните базу тестовыми данными.

Домашнее задание 5

Структура базы данных «Деканат»:

  • Students(StudentId, StudentName, GroupId)
  • Groups(GroupId, GroupName)
  • Courses(CourseId, CourseName)
  • Lecturers(LecturerId, LecturerName)
  • Plan(GroupId, CourseId, LecturerId)
  • Marks(StudentId, CourseId, Mark)

Составьте выражения реляционной алгебры и соответствующие SQL-запросы, позволяющие получать:

  1. Информацию о студентах, с заданной оценкой по предмету «Базы данных».
  2. Информацию о студентах не имеющих оценки по предмету «Базы данных»:
    • среди всех студентов
    • среди студентов, у которых есть этот предмет
  3. Информацию о студентах, имеющих хотя бы одну оценку у заданного лектора.
  4. Идентификаторы студентов, не имеющих ни одной оценки у заданного лектора.
  5. Студентов, имеющих оценки по всем предметам заданного лектора.
  6. Для каждого студента имя и предметы, которые он должен посещать.
  7. По лектору всех студентов, у которых он хоть что-нибудь преподавал.
  8. Пары студентов, такие, что все сданные первым студентом предметы сдал и второй студент.
  9. Такие группы и предметы, что все студенты группы сдали предмет.
  10. Средний балл студента.
    • по идентификатору
    • для каждого студента
  11. Средний балл средних баллов студентов каждой группы.
  12. Для каждого студента число предметов, которые у него были, число сданных предметов и число несданных предметов.
При выполнении задания укажите его формулировку, запросы в терминах реляционной алгебры и SQL подряд.

Домашнее задание 6

Составьте запросы в терминах исчисления кортежей и языков Datalog и SQL для базы данных «Деканат», позволяющие получать:
  1. Информацию о студентах, с заданной оценкой по предмету «Базы данных».
  2. Информацию о студентах не имеющих оценки по предмету «Базы данных»:
    • среди всех студентов
    • среди студентов, у которых есть этот предмет
  3. Информацию о студентах, имеющих хотя бы одну оценку у заданного лектора.
  4. Идентификаторы студентов, не имеющих ни одной оценки у заданного лектора.
  5. Студентов, имеющих оценки по всем предметам заданного лектора.
  6. Для каждого студента имя и предметы, которые он должен посещать.
  7. По лектору всех студентов, у которых он хоть что-нибудь преподавал.
  8. Пары студентов, такие, что все сданные первым студентом предметы сдал и второй студент.
  9. Такие группы и предметы, что все студенты группы сдали предмет.
При выполнении задания укажите его формулировку, запросы в терминах исчисления кортежей, на Datalog и SQL подряд.

Домашнее задание 7

Будем считать, что у студента долг по предмету, если он изучает этот предмет и имеет по нему менее 60 баллов.
  1. Напишите запрос, удаляющий всех студентов, не имеющих долгов.
  2. Напишите запрос, удаляющий всех студентов, имеющих 3 и более долгов.
  3. Напишите запрос, удаляющий все группы, в которых нет студентов.
  4. Создайте view Losers в котором для каждого студента, имеющего долги указано их количество.
  5. Создайте таблицу LoserT, в которой содержится та же информация, что во view Losers. Эта таблица должна автоматически обновляться при изменении таблицы с баллами.
  6. Отключите автоматическое обновление таблицы LoserT.
  7. Напишите запрос (один), которой обновляет таблицу LoserT, используя данные из таблицы NewPoints, в которой содержится информация о баллах, проставленных за последний день.
  8. Добавьте проверку того, что все студенты одной группы изучают один и тот же набор курсов.
  9. Создайте триггер, не позволяющий уменьшить баллы студента по предмету. При попытке такого изменения, баллы изменяться не должны.

Домашнее задание 8

В базе данных Airline информация о рейсах самолётов задана в виде таблиц Flights(FlightId, FligtTime, PlaneId), Seats(PlaneId, SeatNo).

Дополните эту базу данных, так что бы она поддерживала бронирование и покупку мест. При этом, бронь должна автоматически сниматься по таймауту. При этом, должны поддерживаться следующие свойства:

  1. Одно место не может быть продано или забронировано более чем один раз (в том числе, продано и забронировано одновременно).
  2. Бронь можно обновить, после чего она будет действительна ещё одни сутки.
  3. Бронь автоматически снимается через сутки после последнего обновления, но не позже, чем за сутки, до вылета рейса.
  4. Бронирование автоматически закрывается за сутки до времени рейса.
  5. Продажи автоматически закрываются не позднее двух часов до вылета рейса, либо при распродаже всех мест либо по запросу администратора.

Спроектируйте соответствующую базу данных, и напишите запросы:

  1. По номеру рейса — список мест, доступных для продажи и бронирования.
  2. Бронирование места.
  3. Продление брони.
  4. Покупка места.
  5. Покупка места по брони.
  6. Закрытие продаж на рейс по запросу администратора.
  7. Статистика по рейсам: возможность бронирования и покупки, число свободных, забронированных и проданных мест.