Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД.doc
Скачиваний:
1
Добавлен:
25.11.2018
Размер:
183.81 Кб
Скачать

Примеры транзакций

База данных. В контексте ситуации люди описываются следующими атрибутами: фамилия (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: Удалить информацию о студентах данного ВУЗа.

Вариант решения:

  1. Запомнить студентов нужного ВУЗа вместе со ссылками на отцов;

  2. Запомнить отцов, у которых все дети (если есть) учатся в одном ВУЗе;

  3. Удалить информацию об отцах, входящую в первый и второй списки;

  4. Запомнить студентов нужного ВУЗа вместе со ссылками на матерей;

  5. Запомнить матерей, у которых все дети (если есть) учатся в одном ВУЗе;

  6. Удалить информацию о матерях, входящую в первый и второй списки;

  7. Удалить информацию о студентах данного ВУЗа.

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).

20