- •Курс за третий семестр. Введение в субд. Базы данных как аппарат моделирования.
- •Базы данных
- •Классификация бинарных отношений
- •Реляционные базы данных
- •Сжатие избыточной информации
- •Нормализация баз данных
- •Моделирование бд. Нарушение целостности
- •К эволюции сетевых бд (этапы)
- •Определение бд в рамках архитектуры «клиент-сервер»
- •Язык sql (Structured Query Language)
- •Структура sql
- •Ограничение ссылочной целостности
- •Команды dml
- •Предикаты в sql
- •Выборка из нескольких таблиц
- •Опции group by и having Группировка и групповые вычисления
- •Опции order by и union
- •Предикаты, использующие выборку Вложенные подзапросы
- •Создание представлений
- •Проблемы модификации представлений
- •Проблема исчезающих значений
- •Транзакции
- •Примеры транзакций
Примеры транзакций
База данных. В контексте ситуации люди описываются следующими атрибутами: фамилия (name), паспорт (Id), паспорт матери (mum), паспорт отца (dad), день рождения (birthday), доход (income), город (city), налог (tax, %). Кроме того, в информацию о студентах дополнительно включаются сведения: institute, sex {‘м’,’ж’}.
tax, % 0..100
name char(30)
Id numeric
mum numeric
dad numeric
birthday date
income currency
city char(30)
БД включает в себя три таблицы: студенты (Students), отцы (Dads) и матери (Mums).
Задача 1: снизить на 5% налог с родителей, имеющих более трёх детей-студентов, обучающихся в Казани.
Вариант решения:
1) Отобрать в таблице Students ссылки на тех родителей, у которых больше трёх детей-студентов из Казани;
2) Изменить записи об отобранных мамах;
3) Изменить записи об отобранных отцах.
select mum, dad
from Students
group by mum, dad
having count(*)>=3
where city=’Казань’
into cursor temp;
Задача 2: Повысить на 200 рублей стипендию студентов (доход), у которых нет хотя бы одного из родителей, либо совокупный доход родителей не превышает 1529 рублей.
Вариант решения:
1) Подсчитать доход всех родителей и запомнить тех, у которых этот доход не превышает заданной суммы;
2) Изменить информацию о студентах, у которых ссылки на родителей либо пустые, либо попали в предыдущий список.
create view Parents as
select distinct mum, dad
from Students, Mums, Dads
where (Mums.income+Dads.income<=1529) and (Students.mum=Mums.Id)
and (Students.dad=Dads.Id)
update Students set income=income+200
where (is null(mum) or is null(dad)) and mum in (select mum from Parents)
and dad in (select dad from Parents));
Замечание. Согласно стандарту ANSI в опции where команд модификации запрещается делать запросы к модифицируемым таблицам.
Задача 3: Удалить информацию о студентах данного ВУЗа.
Вариант решения:
-
Запомнить студентов нужного ВУЗа вместе со ссылками на отцов;
-
Запомнить отцов, у которых все дети (если есть) учатся в одном ВУЗе;
-
Удалить информацию об отцах, входящую в первый и второй списки;
-
Запомнить студентов нужного ВУЗа вместе со ссылками на матерей;
-
Запомнить матерей, у которых все дети (если есть) учатся в одном ВУЗе;
-
Удалить информацию о матерях, входящую в первый и второй списки;
-
Удалить информацию о студентах данного ВУЗа.
create view КХТИ1 as
select Id, dad from Students
where institute=’КХТИ’
create view Dad1 as
select Id from Dads
where not exists(select Id from Students where institute<>’КХТИ’
and Dads.Id=Students.dad)
delete from Dads
where Id in (select dad from КХТИ1) and Id in (select Id from Dad1)
create view КХТИ2 as
select Id, mum from Students
where institute=’КХТИ’
create view Mum1 as
select Id from Mums
where not exists(select Id from Students where institute<>’КХТИ’
and Mums.Id=Students.mum)
delete from Mums
where Id in (select mum from КХТИ2) and Id in (select Id from Mum1)
delete from Students
where institute=’КХТИ’;
Лекции читал: Бухараев Н.Р.
Набрал: Иванов Нияз (гр. 9109).