- •Введение
- •1.Постановка задачи
- •2. Проектирование бд
- •3.1 Описание предметной области
- •2.2 Выделение и нормализация сущностей
- •Логическая схема базы данных
- •Обоснование связей между сущностями
- •3. Функциональная декомпозиция системы
- •Сценарий взаимодействия пользователя с системой
- •Спецификация функций
- •Спецификация процедур
- •Спецификация триггеров
- •Представление
- •5. Тестирование системы
- •5.1 Заполнение бд актуальными данными
- •5.2 Тестирование функций
- •5.3 Тестирование процедур
- •Тестирование триггеров
- •Тестирование представлений
- •Заключение
Спецификация функций
Перечислим функции ИС:
1 Функция get_airplane показывает название самолета на котором должен лететь клиент.
SQL – код:
delimiter |
CREATE FUNCTION get_airplane(lstnm VARCHAR(255), nm VARCHAR(255), otch VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
RETURN (SELECT Plane FROM Airplanes WHERE ID IN (SELECT FK_ID_Plane FROM Flying WHERE ID IN (SELECT FK_ID_Flight FROM Orders WHERE lastname = lstnm AND name = nm AND otchestvo = otch)));
END|
2 Функция get_uptime показывает время отлета указанного рейса
SQL – код:
CREATE FUNCTION get_uptime(reys_id INTEGER)
RETURNS TIME
BEGIN
RETURN (SELECT UpTime FROM Flying WHERE ID = reys_id);
END|
3 Функция order_num возвращает номер рейса по фамилии клиента.
SQL – код:
CREATE FUNCTION order_num(client_name VARCHAR(255))
RETURNS INTEGER
BEGIN
RETURN(SELECT `ID` FROM Orders WHERE lastname = client_name ORDER BY FlightDate DESC LIMIT 1);
END|
Спецификация процедур
Перечислим процедуры ИС:
1 Процедура count_orders подсчитывает количество оплаченных или не оплаченных заказов. На вход подается 0 или 1
SQL – код:
CREATE PROCEDURE `count_orders`(IN `str` INT(1))
BEGIN
SELECT COUNT(*) FROM Orders WHERE `Payed` = str;
END //
2 Процедура fly_info выводит время вылета всех рейсов.
SQL – код:
CREATE PROCEDURE fly_info()
BEGIN
SELECT Airplanes.Plane, Flying.ID, Flying.UpTime FROM Airplanes RIGHT JOIN Flying ON Airplanes.ID=Flying.FK_ID_Plane;
END|
3 Процедура change_price, меняющая ставку клиента по id ставки используя курсор.
SQL – код:
create procedure change_price(in id integer,in m2 integer)
begin
declare done integer default 0;
declare money integer;
declare cur cursor for select ID_price from price where ID_price = id;
declare continue handler for sqlstate '02000' set done=1;
open cur;
while done=0 do
fetch cur into money;
update price set Price = m2 where ID_price = money;
end while;
close cur;
end|
4 Процедура add_cl добавляющая клиента, а также его ставку.
SQL – код:
reate procedure add_cl(in fam text,in name text, in fat text, in pr integer,in hor integer)
begin
insert into klients (Family_client,Name_client, Father_name_client) values (fam,name,fat);
select max(ID_client) from klients into @kl;
insert into price (Price, ID_horse, ID_client) values (pr,hor,@kl);
end|
5 Процедура del_cl удаляющая клиента из всех таблиц.
Для работы функции в начале работы с ней нужно прописать:
SET AUTOCOMMIT=0;
SET FOREIGN_KEY_CHECKS=0;
SQL – код:
create procedure del_cl(in id integer)
begin
delete from klients where ID_client=id;
delete from price where ID_client=id;
end|
6 Процедура info_ippodrom показывающая основную информацию об ипподроме, подсчитанную с помощью триггеров.
SQL – код:
create procedure info_ippodrom()
begin
select @summoney as sum_money, @counthorse as count_horse, @countclient as count_client, @countrunner as count_runner;
end
Спецификация триггеров
1 Триггер sum_money срабатывает после добавления в таблицу ставки, подсчитывает сумму всех ставок.
SQL – код:
create trigger sum_money after insert on price
for each row
begin
select sum(Price) from price into @summoney;
end
2 Триггер count_horse срабатывает после добавления в таблицу лошади, подсчитывает количество лошадей.
SQL – код:
create trigger count_horse after insert on horse
for each row
begin
select count(ID_horse) from horse into @counthorse;
end|
3 Триггер count_klients срабатывает после добавления в таблицу клиенты, подсчитывает количество клиентов.
SQL – код:
create trigger count_klients after insert on klients
for each row
begin
select count(ID_client) from klients into @countclient;
end|
4 Триггер count_runners срабатывает после добавления в таблицу наездника, подсчитывает количество наездников.
SQL – код:
reate trigger count_runners after insert on runner
for each row
begin
select count(ID_runner) from runner into @countrunner;
end|
