Содержание
- Операторы
- Вставка
- Обновление
- Объединение
- Удаление
- Целостность данных
- Корректность и целостность
- Типы ограничений целостности
- Типов и атрибутов
- Отношений
- Баз данных
- Компенсирующие действия
- Триггеры
- Представления
- Объявление и применения
- Обновление представлений
- Материализованные представления
- Управление доступом
- Схемы управления доступом
- Пользователи и группы
- Data Control Language
- Представления и права
Экзаменационные вопросы
- Целостность данных. Триггеры
- Представления и их обновление
- Управление доступом к данным
Практические навыки
- Построение изменяющих запросов на SQL
- Задание ограничений целостности
- Работа с представлениями
- Управление доступом к данным
Библиография
- Дейт К. Введение в системы баз данных (главы 9, 10, 17)
- Уидом Д., Ульман Д. Основы реляционных баз данных (глава 6)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 35 – Changing SQL-data)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 18 – Table and View)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 20 – SQL Constraint and Assertion)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 24 – SQL Trigger)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 15 – SQL Authorization)
Домашнее задание 7. Изменение данных
Реализуйте указанные запросы, представления, проверки и триггеры на языке SQL.
-
Напишите запросы, удаляющие студентов
- Учащихся в группе, заданной идентификатором (GroupId).
- Учащихся в группе, заданной названием (GroupName).
- Учащихся на факультете (FacultyName).
- Без оценок.
- Имеющих 3 и более оценки.
- Имеющих 3 и менее оценки.
-
Напишите запросы, удаляющие должников (здесь и далее, долг определяется по отсутствию оценки)
- Студентов, c долгами.
- Студентов, имеющих 2 и более долга.
- Студентов, имеющих 2 и более долга, учащихся на факультете (FacultyName).
- Студентов, имеющих не более 3 долгов.
-
Напишите запросы, обновляющие данные студентов
- Изменение имени студента (StudentId, StudentName).
- Перевод студента из группы в группу по индентификаторам (StudentId, GroupId, FromGroupId).
- Перевод всех студентов из группы в группу по идентификаторам (GroupId, FromGroupId).
- Изменение имени всех студентов группы (GroupName, StudentName).
- Перевод всех студентов из группы в группу по названиям (GroupName, FromGroupName).
- Перевод всех студентов из группы в группу, только если целевая группа существует (GroupName, FromGroupName).
-
Напишите запросы, подсчитывающие статистику по оценкам
- Число оценок студента (столбец Students.Marks) (StudentId).
- Число оценок каждого студента (столбец Students.Marks).
- Число оценок каждого студента факультета (столбец Students.Marks) (FacultyName).
- Пересчет числа оценок каждого студента, с учётом новых оценок из таблицы NewMarks, структура которой такая же как у таблицы Marks (столбец Students.Marks).
-
Напишите запросы, подсчитывающие статистику по студентам
- Число сданных дисциплин каждого студента (столбец Students.Marks).
- Число долгов студента (столбец Students.Debts) (StudentId).
- Число долгов каждого студента (столбец Students.Debts).
- Число долгов каждого студента группы (столбец Students.Debts) (GroupName).
- Число долгов каждого студента у деканов (столбец Students.Debts) (GroupName).
- Число оценок и долгов каждого студента (столбцы Students.Marks, Students.Debts).
-
Напишите запросы, обновляющие оценки,
с учетом данных из таблицы NewMarks,
имеющей такую же структуру, как таблица Marks
- Проставляющий новую оценку только если ранее оценки не было.
- Проставляющий новую оценку только если ранее оценка была.
- Проставляющий максимум из старой и новой оценки только если ранее оценка была.
- Проставляющий максимум из старой и новой оценки (если ранее оценки не было, то новую оценку).
-
Работа с представлениями
- Создайте представление StudentMarks в котором для каждого студента указано число оценок (StudentId, Marks).
- Создайте представление AllMarks в котором для каждого студента указано число оценок, включая оценки из таблицы NewMarks (StudentId, Marks).
- Создайте представление Debts в котором для каждого студента, имеющего долги указано их число (StudentId, Debts).
- Создайте представление StudentDebts в котором для каждого студента указано число долгов (StudentId, Debts).
Целостность данных.
Обратите внимание, что задания из этого раздела надо посылать в PCMS, но они будут проверяться только вручную после окончания сдачи. То есть в PCMS вы получите + за любое решение.
В комментарии перед каждым запросом укажите название и версию использованной СУБД.
- Добавьте проверку того, что у студентов есть оценки только по дисциплинам из их плана (NoExtraMarks).
- Добавьте проверку того, что все студенты каждой группы имеют оценку по одному и тому же набору дисциплин (SameMarks).
- Создайте триггер PreserveMarks, не позволяющий уменьшить оценку студента по дисциплине. При попытке такого изменения оценка изменяться не должна.
Примечания
- Некоторые базы данных не понимают, что * join ... using (Column) должен оставлять один экземпляр Column и не требовать указывать для него таблицу.
В рамках проекта:
- Определите модифицирующие запросы, необходимые для работоспособности проекта.
- Запишите эти запросы на языке SQL.
- Определите представления, необходимые для работоспособности проекта.
- Запишите эти представления на языке SQL.