Содержание

  1. Операторы
    1. Вставка
    2. Обновление
    3. Объединение
    4. Удаление
  2. Целостность данных
    1. Корректность и целостность
    2. Типы ограничений целостности
      1. Типов и атрибутов
      2. Отношений
      3. Баз данных
    3. Компенсирующие действия
  3. Триггеры
  4. Представления
    1. Объявление и применения
    2. Обновление представлений
    3. Материализованные представления
  5. Управление доступом
    1. Схемы управления доступом
    2. Пользователи и группы
    3. Data Control Language
    4. Представления и права

Слайды

HTML

Экзаменационные вопросы

  1. Целостность данных. Триггеры
  2. Представления и их обновление
  3. Управление доступом к данным

Практические навыки

  1. Построение изменяющих запросов на SQL
  2. Задание ограничений целостности
  3. Работа с представлениями
  4. Управление доступом к данным

Библиография

  1. Дейт К. Введение в системы баз данных (главы 9, 10, 17)
  2. Уидом Д., Ульман Д. Основы реляционных баз данных (глава 6)
  3. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 35 – Changing SQL-data)
  4. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 18 – Table and View)
  5. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 20 – SQL Constraint and Assertion)
  6. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 24 – SQL Trigger)
  7. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 15 – SQL Authorization)

Домашнее задание 7. Изменение данных

Изменение данных

Реализуйте указанные запросы, представления, проверки и триггеры на языке SQL.

  1. Напишите запросы, удаляющие студентов
    1. Учащихся в группе, заданной идентификатором (GroupId).
    2. Учащихся в группе, заданной названием (GroupName).
    3. Без оценок.
    4. Имеющих 3 и более оценки.
    5. Имеющих 3 и менее оценки.
    6. Студентов, c долгами (здесь и далее — по отсутствию оценки).
    7. Студентов, имеющих 2 и более долга.
    8. Студентов, имеющих не более 2 долгов.
  2. Напишите запросы, обновляющие данные студентов
    1. Изменение имени студента (StudentId, StudentName).
    2. Перевод студента из группы в группу по индентификаторам (StudentId, GroupId, FromGroupId).
    3. Перевод всех студентов из группы в группу по идентификаторам (GroupId, FromGroupId).
    4. Перевод студента из группы в группу по названиям (GroupName, FromGroupName).
    5. Перевод всех студентов из группы в группу, только если целевая группа существует (GroupName, FromGroupName).
  3. Напишите запросы, подсчитывающие статистику по студентам
    1. Число оценок студента (столбец Students.Marks) (StudentId).
    2. Число оценок каждого студента (столбец Students.Marks).
    3. Пересчет числа оценок каждого студента по данным из таблицы NewMarks (столбец Students.Marks).
    4. Число сданных дисциплин каждого студента (столбец Students.Marks).
    5. Число долгов студента (столбец Students.Debts) (StudentId).
    6. Число долгов каждого студента (столбец Students.Debts).
    7. Число долгов каждого студента группы (столбец Students.Debts) (GroupName).
    8. Число оценок и долгов каждого студента (столбцы Students.Marks, Students.Debts).
  4. Напишите запросы, обновляющие оценки, с учетом данных из таблицы NewMarks, имеющей такую же структуру, как таблица Marks
    1. Проставляющий новую оценку только если ранее оценки не было.
    2. Проставляющий новую оценку только если ранее оценка была.
    3. Проставляющий максимум из старой и новой оценки только если ранее оценка была.
    4. Проставляющий максимум из старой и новой оценки (если ранее оценки не было, то новую оценку).
  5. Работа с представлениями
    1. Создайте представление StudentMarks в котором для каждого студента указано число оценок (StudentId, Marks).
    2. Создайте представление AllMarks в котором для каждого студента указано число оценок, включая оценки из таблицы NewMarks (StudentId, Marks).
    3. Создайте представление Debts в котором для каждого студента, имеющего долги указано их число (StudentId, Debts).
    4. Создайте представление StudentDebts в котором для каждого студента указано число долгов (StudentId, Debts).
  6. Целостность данных.

    Обратите внимание, что задания из этого раздела надо посылать в PCMS, но они будут проверяться только вручную после окончания сдачи. То есть в PCMS вы получите + за любое решение.

    В комментарии перед запросом укажите версию использованной СУБД.

    1. Добавьте проверку того, что у студентов есть оценки только по дисциплинам из их плана (NoExtraMarks) (StudentId, CourseId).
    2. Добавьте проверку того, что все студенты каждой группы имею оценку по одному и тому же набору дисциплин (SameMarks). (StudentId).
    3. Создайте триггер PreserveMarks, не позволяющий уменьшить оценку студента по дисциплине. При попытке такого изменения оценка изменяться не должна. (StudentId).
  1. Напишите запросы, удаляющие студентов:
    1. Учащихся в группе :GroupId;
    2. Учащихся в группе :GroupName;
    3. Без оценок;
    4. Имеющих 3 и более оценки;
    5. Имеющих 3 и менее оценки;
    6. Студентов, c долгами (здесь и далее — по отсутствию оценки);
    7. Студентов, имеющих 2 и более долга;
    8. Студентов, имеющих не более 2 долгов.
  2. Напишите запросы, обновляющие данные студентов:
    1. Изменение имени студента :StudentId на :StudentName;
    2. Перевод студента :StudentId из группы :FromGroupId в группу :GroupId;
    3. Перевод всех студентов из группы :FromGroupId в группу :GroupId;
    4. Перевод всех студентов из группы :FromGroupName в группу :GroupName;
    5. Перевод всех студентов из группы :FromGroupName в группу :GroupName только если целевая группа существует;
  3. Напишите запросы, подсчитывающие статистику по студентам:
    1. Число оценок студента :StudentId (столбец Marks);
    2. Число оценок каждого студента (столбец Marks);
    3. Пересчет числа оценок каждого студента по данным из таблицы NewMarks (столбец Marks);
    4. Число сданных дисциплин каждого студента (столбец Marks);
    5. Число долгов студента :StudentId (столбец Debts);
    6. Число долгов каждого студента (столбец Debts);
    7. Число долгов каждого студента группы :GroupName (столбец Debts);
    8. Число оценок и долгов каждого студента (столбцы Marks, Debts);
  4. Напишите запросы, обновляющие оценки, с учетом данных из таблицы NewMarks.
    1. Проставляющий новую оценку только если ранее оценки не было.
    2. Проставляющий новую оценку только если ранее оценка была.
    3. Проставляющий максимум из старой и новой оценки только если ранее оценка была.
    4. Проставляющий максимум из старой и новой оценки (если ранее оценки не было, то новую оценку).
  5. Работа с представлениями
    1. Создайте представление StudentMarks в котором для каждого студента указано число оценок (столбцы StudentId, Marks);
    2. Создайте представление AllMarks в котором для каждого студента указано число оценок, включая оценки из таблицы NewMarks (столбцы StudentId, Marks);
    3. Создайте представление Debts в котором для каждого студента, имеющего долги указано их число (столбцы StudentId, Debts);
    4. Создайте представление StudentDebts в котором для каждого студента указано число долгов (столбцы StudentId, Debts);
  6. Целостность данных.

    Обратите внимание, что задания из этого раздела надо посылать в PCMS, но они будут проверяться только вручную после окончания сдачи. То есть в PCMS вы получите + за любое решение.

    В комментарии перед запросом укажите версию использованной СУБД.

    1. Добавьте проверку того, что у студентов есть оценки только по дисциплинам из их плана (NoExtraMarks).
    2. Добавьте проверку того, что все студенты каждой группы имею оценку по одному и тому же набору дисциплин (SameMarks).
    3. Создайте триггер PreserveMarks, не позволяющий уменьшить оценку студента по дисциплине. При попытке такого изменения оценка изменяться не должна.

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

  1. Определите модифицирующие запросы, необходимые для работоспособности проекта.
  2. Запишите эти запросы на языке SQL.