Содержание
- Операторы
- Вставка
- Обновление
- Объединение
- Удаление
- Целостность данных
- Корректность и целостность
- Типы ограничений целостности
- Типов и атрибутов
- Отношений
- Баз данных
- Компенсирующие действия
- Триггеры
- Представления
- Объявление и применения
- Обновление представлений
- Материализованные представления
- Управление доступом
- Схемы управления доступом
- Пользователи и группы
- 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).
Участников клуба (ClubName).
Без оценок.
Имеющих 3 и более оценки.
Имеющих 3 и менее оценки.
Напишите запросы, удаляющие должников (здесь и далее, долг определяется по отсутствию оценки)
Студентов, c долгами.
Студентов, имеющих 2 и более долга.
Участников клуба, имеющих 2 и более долга (ClubName).
Студентов, имеющих не более 3 долгов.
Напишите запросы, обновляющие данные студентов
Изменение имени студента (StudentId, StudentName).
Перевод студента из группы в группу по индентификаторам (StudentId, GroupId, FromGroupId).
Перевод всех студентов из группы в группу по идентификаторам (GroupId, FromGroupId).
Изменение имени всех студентов группы (GroupName, StudentName).
Перевод всех студентов из группы в группу по названиям (GroupName, FromGroupName).
Перевод всех студентов из группы в группу, только если целевая группа существует (GroupName, FromGroupName).
Напишите запросы, подсчитывающие статистику по оценкам
Число оценок студента (столбец Students.Marks) (StudentId).
Число оценок каждого студента (столбец Students.Marks).
Число оценок каждого участника :ClubName (столбец Students.Marks) (ClubName).
Пересчет числа оценок каждого студента, с учётом новых оценок из таблицы 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) (StudentId, CourseId).
Добавьте проверку того, что все студенты каждой группы имеют оценку по одному и тому же набору дисциплин (SameMarks). (StudentId).
Создайте триггер PreserveMarks, не позволяющий уменьшить оценку студента по дисциплине. При попытке такого изменения оценка изменяться не должна. (StudentId).
Примечания
- Некоторые базы данных не понимают, что * join ... using (Column) должен оставлять один экземпляр Column и не требовать указывать для него таблицу.
В рамках проекта:
- Определите представления, необходимые для работоспособности проекта.
- Запишите эти представления на языке SQL.
- Определите модифицирующие запросы, необходимые для работоспособности проекта.
- Запишите эти запросы на языке SQL.