З а д а н и е № 5. Домашнее задание: ( 18 баллов) 1) Пусть есть база со следующими отношениями: (4 балла) Клиент (Кл_номер, Кл_название_фирмы, Кл_лимит_кредита, Кл_номер_служащего) П р и м е ч а н и е: кл_номер_служащего – это номер служащего, который обслуживает данную компанию, т.е. заключает с ней сделки. Заказ (Зк_номер, Зк_клиент, Зк_название_продукта, Зк_количество, Зк_стоимость, Зк_дата) Служащий (Сл_номер, Сл_имя, Сл_офис, Сл_план_продаж, Сл_факт_объем_продаж) Офис (Оф_номер, Оф_город, Оф_регион, Оф_план_продаж, Оф_факт_объем_продаж) Напишите команды определения структуры базы данных на языке SQL, предусмотрев в ней следующие ограничения: a) Номера клиента, заказа, офиса являются уникальными для отношений Клиент, Заказ, Служащий и Офис соответственно. b) Имя служащего, название фирмы клиента - уникальны. c) Значения атрибутов лимит кредита, план продаж и объем продаж не могут принимать отрицательных значений. Причем лимит кредита клиента должен принимать значение по умолчанию равное $10000. d) Значение атрибута название продукта не может быть пустым, т.е. этот атрибут должен всегда иметь значение. e) Значение атрибута офис для отношения Служащий может принимать значения, которые присутствуют в качестве значений атрибута номер отношения Офис, или не принимать никакого значения. f) Значение атрибута клиент для отношения Заказ может принимать только значения, которые присутствуют в качестве значений атрибута номер клиента для отношения Клиент; аналогичное правило распространяется на значение атрибута номер служащего для отношения Клиент. g) Клиентам не разрешается размещать заказы на сумму, превышающую их лимит кредита. h) Если клиенту назначается лимит кредита, превышающий $50000, то об этом должен быть уведомлен вице-президент компании по продажам (подумайте, как это можно сделать). i) Заказы хранятся в книгах в течение шести месяцев, затем они аннулируются. j) Каждый раз, когда принимается новый заказ, значения атрибутов объем продаж для служащего, принявшего этот заказ, и для офиса, в котором работает этот служащий, должны быть увеличены на сумму заказа; удаление заказа или изменение его суммы также должно сопровождаться изменениями атрибутов объем продаж для отношений Служащий и Офис. k) Для поддержания ссылочной целостности предусмотрите каскадирование. 2) Напишите команды модификации, используя базу данных из задания 1: (3 балла) Удалить все заказы, принятые Сью Смит. Удалить все данных о клиентах, которые не делали заказов с 10 ноября 2000 г. Закрепить за служащим с номером 105 клиентов, обслуживаемых служащими, чей объем продаж меньше, чем на 80 процентов их личного плана Поднять на $5000 лимит кредита для тех клиентов, кто разместил заказ на сумму более $25000. 3) (3 балла) Используя структуру базы данных в задании 1, напишите на языке PL/SQL процедуру для вставки нового клиента в отношение Клиент. Процедура, в качестве входных параметров принимает 2 значения – название фирмы и имя служащего, который будет работать с этой фирмой. П р и м е ч а н и е: Значение атрибута лимит кредита принимается по умолчанию, а значение атрибута номер клиента ваша процедура должна каким-либо образом получить на основе имеющейся в базе информации. Если это необходимо, то схему базы данных можно изменить. 4) Пусть есть отношение Flights(passenger, airline, flightNum, miles). (3 балла) (a) Напишите триггер, который удваивает мили для пассажиров авиалиний, имеющих более 100,000 миль. (b) Напишите триггер, который сбрасывает мили на 500 для любого пассажирского полета, для которого имеется попытка изменить(заменить) мили на значение меньше чем 500 или увеличить их больше чем в 10 раз. 5) Пусть есть база данных со следующими отношениями (описание см. задание №4) (3 балла). Эта база данных хранит информацию о кораблях, участвующих в первой мировой войне. Корабли в «классах» построены по одному и тому же проекту, и классу обычно приписывается название первого корабля этого класса. Отношение Classes содержит имя корабля, тип (bb для боевого корабля bc для боевого крейсера), страну, в которой построен корабль, число главных орудий, калибр орудий (диаметр ствола орудия в дюймах) и водоизмещение (вес в тоннах). В отношении Ships записаны имя корабля, имя его класса и год спуска на воду. В отношение Battles включены название и дата битвы, в которой участвовали корабли, а в отношение Outcomes – результат участия данного корабля в битве (потоплен, поврежден или остался невредимым). Classes (class, type, country, numGuns, bore, displacement) Ships (name, class, launched) Battles (name, date) Outcomes (ship, battle, result) Напишите команды модификации структуры и данных: 1. Сформулируйте команду изменения схемы отношения Ships с целью добавления атрибута yard для хранения верфи, на которой был построен корабль. 2. В отношении Classes преобразовать значения калибра орудий в сантиметры (1 дюйм=2,54см), а значения водоизмещения – в метрические тонны (1метр.тонна=1,1 «малой» тонны). 3. Удалить информацию обо всех классах, насчитывающих в своем составе менее трех судов. 4. Удалить из отношения Ships сведения о кораблях, потопленных в морских сражениях. 6) (2 балла) Для базы данных из 5) напишите на языке PL/SQL процедуру, которая для заданного названия корабля определяла бы, существует ли в базе данных ошибочная информация о том, что судно принимало участие в сражениях прежде, чем оно было спущено на воду. При положительном результате поиска заменяла бы соответствующие даты сражений и завершения строительства судна значениями 0