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