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

Домашнее задание 1. Установка и использование СУБД

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

Ожидаемая структура проекта

  1. Текстовая часть
    1. Описание предметной области с кратким описанием неочевидных сущностей и атрибутов.
    2. Предварительное разбиение на отношения (может отсутствовать).
    3. Для каждого отношения: определение функциональных зависимостей, нормализация до 5НФ, денормализация (при необходимости).
    4. Модель сущность-связь.
    5. Физическая модель (должна соответствовать ERM) с указанием типов для доменов.
  2. Часть на SQL
    • ddl.sql – описание таблиц и индексов.
    • insert.sql – добавление тестовых данных.
    • select.sql – запросы на получение данных и представления.
    • update.sql – запросы на изменение данных, хранимые процедуры и триггеры.

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

Домашнее задание 2. Моделирование БД «Университет»

Спроектируйте базу данных «Университет», позволяющую хранить информацию о факультетах, студентах, группах, преподавателях, дисциплинах и оценках.

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

Примечания

  1. Не требуется поддержка:
    • нескольких университетов;
    • дисциплин по выбору;
    • дисциплин с необычным распределением по группам (таких как физическая культура и иностранный язык);
    • переводов между группами;
    • исторических данных;
    • нескольких оценок по одной дисциплине.
  2. Многосеместровые дисциплины считаются по семестрам, например:
    • Математический анализ (семестр 1);
    • Математический анализ (семестр 2).

Форма для сдачи ДЗ. Проверка проводится в полуавтоматическом режиме, поэтому строго соблюдайте указанные форматы.

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

Домашнее задание 3. Функциональные зависимости в БД «Университет»

Дано отношение с атрибутами StudentId, StudentName, GroupId, GroupName, GroupFacultyId, CourseId, CourseName, LecturerId, LecturerName, LecturerFacultyId, Mark, FacultyId, FacultyName, FacultyDeanId.

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

Примечания

  1. Не требуется поддержка:
    • нескольких университетов;
    • дисциплин по выбору;
    • дисциплин с необычным распределением по группам (таких как физическая культура и иностранный язык);
    • переводов между группами;
    • нескольких оценок по одной дисциплине.
  2. Многосеместровые дисциплины считаются по семестрам, например: Математический анализ (семестр 1), Математический анализ (семестр 2).

Форма для сдачи ДЗ. Проверка проводится в полуавтоматическом режиме, поэтому строго соблюдайте указанные форматы.

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

  1. Определите набор атрибутов, необходимых для проекта, и определите отношения на них.
  2. Найдите функциональные зависимости полученных отношений.
  3. Найдите все ключи полученных отношений.
  4. Найдите неприводимые множества функциональных зависимостей для полученных отношений.

Домашнее задание 4. Нормализация БД «Университет»

Дано отношение с атрибутами StudentId, StudentName, GroupId, GroupName, GroupFacultyId, GroupFacultyName, GroupFacultyDeanId; CourseId, CourseName, LecturerId, LecturerName, LecturerFacultyId, LecturerFacultyName, LecturerFacultyDeanId, Mark. и функциональными зависимостями:

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

Форма для сдачи ДЗ

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

  1. Приведите схему базы в пятую нормальную форму.
  2. Если итоговая схема не будет в НФ-5, то обоснуйте принятое решение.
  3. Запишите определения таблиц на языке SQL.
  4. Запишите на языке SQL наполнение таблиц тестовым данными.

Домашнее задание 5. Реляционная алгебра

Структура базы данных «Университет»:

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

  1. Информацию о студентах
    1. С заданным идентификатором (StudentId, StudentName, GroupId по :StudentId).
    2. С заданным ФИО (StudentId, StudentName, GroupId по :StudentName).
  2. Полную информацию о студентах
    1. С заданным идентификатором (StudentId, StudentName, GroupName по :StudentId).
    2. С заданным ФИО (StudentId, StudentName, GroupName по :StudentName).
    3. Из заданной группы (StudentId, StudentName, GroupName по :GroupName).
    4. C заданного факультета (StudentId, StudentName, GroupName по :FacultyName).
    5. C факультета, заданного деканом (StudentId, StudentName, GroupName по :LecturerName).
  3. Информацию о студентах с заданной оценкой по дисциплине
    1. С заданным идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId).
    2. С заданным названием (StudentId, StudentName, GroupId по :Mark, :CourseName).
    3. Которую у него вёл лектор заданный идентификатором (StudentId, StudentName, GroupId по :Mark, :LecturerId).
    4. Которую у них вёл лектор, заданный ФИО (StudentId, StudentName, GroupId по :Mark, :LecturerName).
    5. Которую вёл лектор, заданный идентификатором (StudentId, StudentName, GroupId по :Mark, :LecturerId).
    6. Которую вёл лектор, заданный ФИО (StudentId, StudentName, GroupId по :Mark, :LecturerName).
  4. Информацию о студентах не имеющих оценки по дисциплине
    1. Среди всех студентов (StudentId, StudentName, GroupId по :CourseName).
    2. Тут был дубль задачи, пункт оставлен для сохранения нумерации.
    3. Среди студентов факультета (StudentId, StudentName, GroupId по :CourseName, :FacultyName).
    4. Среди студентов, у которых есть эта дисциплина (StudentId, StudentName, GroupId по :CourseName).
  5. Для каждого студента ФИО и названия дисциплин
    1. Которые у него есть по плану (StudentName, CourseName).
    2. Есть, но у него нет оценки (StudentName, CourseName).
    3. Есть, но у него не 4 или 5 (StudentName, CourseName).
    4. Вёл преподаватель (StudentName, CourseName по :LecturerName).
    5. Вёл преподаватель с :FacultyName (StudentName, CourseName по :FacultyName).
    6. Вёл преподаватель другого факультета (StudentName, CourseName).
    7. Вёл декан (StudentName, CourseName).
  6. Идентификаторы студентов по преподавателю
    1. Имеющих хотя бы одну оценку у преподавателя (StudentId по :LecturerName).
    2. Не имеющих ни одной оценки у преподавателя (StudentId по :LecturerName).
    3. Имеющих оценки по всем дисциплинам преподавателя (StudentId по :LecturerName).
    4. Имеющих оценки по всем дисциплинам преподавателя, которые он вёл у этого студента (StudentId по :LecturerName).
  7. Группы и дисциплины, такие что все студенты группы имеют оценку по этой дисциплине
    1. Идентификаторы (GroupId, CourseId).
    2. Названия (GroupName, CourseName).

Составьте SQL-запросы, позволяющие получать

  1. Суммарный балл
    1. Одного студента (SumMark по :StudentId).
    2. Каждого студента (StudentName, SumMark).
    3. Каждой группы (GroupName, SumMark).
  2. Средний балл
    1. Одного студента (AvgMark по :StudentId).
    2. Каждого студента (StudentName, AvgMark).
    3. Каждой группы (GroupName, AvgMark).
    4. Средний балл средних баллов студентов каждой группы (GroupName, AvgAvgMark).
  3. Для каждого студента: число дисциплин, которые у него были, число сданных дисциплин и число несданных дисциплин (StudentId, Total, Passed, Failed).
Тестовый полигон

Технические особенности проверки.