Тема  7. Изменение данных

Содержание

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

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

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

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

Примечания

  1. Некоторые базы данных не понимают, что * join ... using (Column) должен оставлять один экземпляр Column и не требовать указывать для него таблицу.

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

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