
- •Содержание
- •Задание
- •2. Аннотация к отчету.
- •3. Описание базы данных
- •4. Er модель
- •5. Модель ansi-sparc
- •6. Описание структуры таблиц
- •7. Функциональные зависимости
- •8. Начальное заполнение таблиц
- •9. Запросы
- •10. Пользовательские представления
- •11. Хранимые процедуры и функции.
- •12 . Триггеры.
- •13. Заключение
- •14 . Список литературы
- •15 . Приложение a.
13. Заключение
В результате выполнения курсовой работы была разработана реляционная база данных, реализуемая на СУРБД MySQL 5.1. База данных хранит информацию о заказах и клиентах полиграфического предприятия. Структура базы данных нормализована согласно 3 формы нормализации.
База данных протестирована на тестовых значениях. Результаты проверки представлены в отчете. База данных содержит 3 триггера, 1 хранимую процедуру, 2 функции и 2 пользовательских представления.
База данных удовлетворяет модели ANSI_SPARC.
14 . Список литературы
Базы данных: проектирование, реализация, сопровождение. Второе издание. Т. Коннели, К. Берг, 2005 г.
Системы баз данных. Г. Гарсия – Молина, 2003 г.
Методические указания по выполнению курсовой работы, Лазутченко О. В. 2007 г.
Практическое введение в базы данных, часть 1-3. А. А. Марков, Москва 2004 г.
15 . Приложение a.
Листинг 1. Исходный код создания таблиц.
drop database if exists exams_work;
create database exams_work character set 'utf8' collate 'utf8_general_ci';
use exams_work;
drop table if exists clients;
create table clients
(
name char(20) not null,
patronymic char(20) not null,
surname char(20) not null,
phone char(10) not null,
e_mail char(40) not null primary key,
password char(20) not null
);
drop table if exists publishing;
create table publishing
(
id int auto_increment primary key,
name char(20) not null,
city char(20) not null
);
drop table if exists orders;
create table orders
(
ID int unsigned not null auto_increment primary key,
cost float unsigned not null,
time float unsigned not null,
dateoforder date not null,
recordofmaked bool,
accept bool
);
drop table if exists product;
create table product
(
PID int unsigned auto_increment not null primary key,
type char(40) not null,
run int unsigned not null,
pages int not null,
format char(2) not null,
timeofmaking int unsigned not null,
priceofone float unsigned not null
);
drop table if exists sub2prod;
create table sub2prod
(
productID int unsigned not null,
type char(15) not null,
strength float unsigned not null,
primary key(type,strength,productID)
);
drop table if exists substrate;
create table substrate
(
type char(50) not null,
strength float unsigned not null,
price float unsigned not null,
primary key(type,strength)
);
drop table if exists plate2prod;
create table plate2prod
(
productID int unsigned not null,
type char(20) not null,
primary key(productID, type)
);
drop table if exists plate;
create table plate
(
type char(20) not null primary key,
timeofmaking float unsigned not null,
price float unsigned not null
);
drop table if exists stitching;
create table stitching
(
type char(20) not null primary key,
price float unsigned not null
);
drop table if exists stitch2prod;
create table stitch2prod
(
productID int unsigned not null primary key,
type char(20) not null
);
drop table if exists inks;
create table inks
(
color char(20) not null primary key,
price float unsigned not null,
on1kpages int unsigned not null,
varnishing float unsigned not null
);
drop table if exists ink2prod;
create table ink2prod
(
productID int unsigned not null,
color char(20) not null,
primary key(productID,color)
);
drop table if exists clts2pub;
create table clts2pub
(
e_mail char(40) not null,
ID int unsigned not null,
primary key (e_mail, ID)
);
drop table if exists clts2Ord;
create table clts2Ord
(
e_mail char(40) not null,
OID int unsigned not null,
primary key (e_mail, OID)
);
drop table if exists ord2prod;
create table ord2prod
(
OID int unsigned not null,
PID int unsigned not null,
primary key (OID,PID)
);
Листинг 2. Исходный код занесения данных
insert into inks values
("purple",0.96,190,0.6),
("yellow",0.96,300,0.6),
("blue",0.96,250,0.6),
("black",0.80,140,0.5),
("pantone",1.00,200,0.7);
insert into substrate values
("coated",90,0.070),
("coated",105,0.075),
("coated",115,0.080),
("coated",130,0.090),
("coated",150,0.095),
("stamping",100,0.11),
("stamping",200,0.12),
("glue",80,0.12),
("glossy",90,0.11),
("glossy",105,0.12),
("glossy",120,0.115),
("newspapers",35,0.025),
("newspapers",45,0.027),
("newspapers",65,0.029),
("design",80,0.11),
("design",90,0.115),
("design",105,0.12),
("design",115,0.125),
("design",120,0.13),
("design",130,0.135),
("design",140,0.14),
("design",150,0.145),
("offset",90,0.08),
("offset",105,0.085),
("offset",115,0.09);
insert into stitching values
("spring",80),
("glue",300),
("staple",10);
insert into plate values
("offset",0.3,360.0);
insert into orders values
(1,20000,48,"2010-01-22",1,1),
(2,25000,56,"2010-02-13",1,1),
(3,12000,24,"2010-03-12",1,0),
(4,50000,36,"2010-05-20",0,1),
(5,100000,120,"2010-05-25",0,1);
insert into product values
(1,"book",100,50,"A5",200),
(2,"book",200,30,"A5",125),
(3,"magazine",1000,10,"A4",12),
(4,"newspaper",5000,5,"A2",10),
(5,"book",10000,100,"A5",100);
insert into clients values
("Nemcev","Vladislav","Vladimirovich","9032769341","fetboy@mail.ru","fet"),
("Danilov","Alesander","Michailovich","9090120203","sanek@mail.ru","qwerty"),
("Danilov","Semen","Vladimirovich","9168812345","monster@mail.ru","asdfg"),
("Nemcev","Vladislav","Vladimirivich","1234567890","client@mail.ru","zxcvbn");
insert into publishing values
(1,"Buka","Moscow"),
(2,"Timer","London"),
(3,"Booker","Moscow");
insert into clts2pub values
("fetboy@mail.ru",1),
("sanek@mail.ru",2),
("monster@mail.ru",3),
("client@mail.ru",3);
insert into clts2Ord values
("fetboy@mail.ru",1),
("sanek@mail.ru",2),
("monster@mail.ru",3),
("monster@mail.ru",4),
("client@mail.ru",5);
insert into ord2prod values
(1,1),
(2,2),
(3,3),
(4,4),
(5,5);
insert into ink2prod values
(1,"black"),
(2,"black"),
(2,"purple"),
(3,"yellow"),
(3,"black"),
(3,"pantone"),
(4,"black"),
(5,"blue");
insert into sub2prod values
(1,"offset",90),
(2,"offset",105),
(3,"newspapers",45),
(4,"offset",90),
(5,"coated",105);
insert into stitch2prod values
(1,"glue"),
(2,"glue"),
(3,"staple"),
(4,"staple"),
(5,"glue");
insert into plate2prod values
(1,"offset"),
(2,"offset"),
(3,"offset"),
(4,"offset"),
(5,"offset");
Листинг 3. Исходный код запросов.
SELECT e_mail, ID, cost, time, recordofmaked
FROM clts2Ord JOIN orders ON ID=OID
WHERE e_mail="client@mail.ru";
SELECT *
FROM orders
WHERE accept=1
GROUP BY dataoforder;
SELECT ID, cost, time, dateoforder, product.type, run, pages, format, sub2prod.type, strength, stitch2prod.type
FROM orders
JOIN product ON PID= (SELECT PID FROM ord2prod WHERE OID=2)
JOIN sub2prod ON sub2prod.productID= (SELECT PID FROM ord2prod WHERE OID=2)
JOIN stitch2prod ON stitch2prod.productID= (SELECT PID FROM ord2prod WHERE OID=2)
WHERE ID=2;
SELECT color
FROM ink2prod
WHERE productID=(SELECT PID FROM ord2prod WHERE OID=3);
SELECT *
FROM clients
JOIN publishing ON ID=(SELECT ID FROM clts2pub WHERE clts2pub.e_mail=clients.e_mail)
WHERE e_mail="client@mail.ru";
UPDATE stitching
SET price=305
WHERE type="glue";
DELETE FROM substrate WHERE type='design' AND strength=140;
UPDATE inks
SET on1kpages=290
WHERE color='yellow';
DELETE FROM orders WHERE accept=0;
Листинг 4. Исходные коды представлений
CREATE VIEW FullOrder AS
SELECT ID, ord2prod.PID, product.type, run, pages, sub2prod.type AS paper, strength, stitch2prod.type AS stitching, cost, time
FROM orders, product, ord2prod, sub2prod, stitch2prod
WHERE ord2prod.OID=orders.ID AND sub2prod.productID=(SELECT PID FROM ord2prod WHERE ord2prod.OID=orders.ID)
AND stitch2prod.productID=(SELECT PID FROM ord2prod WHERE ord2prod.OID=orders.ID)
AND ord2prod.PID=product.PID;
CREATE VIEW inkOrder AS
SELECT ID, PID, color, varnishing cost, time
FROM orders, ord2prod, ink2prod, inks
WHERE ink2prod.productID=ord2prod.PID AND OID=ID AND ink2prod.color=inks.color
GROUP BY ID;
Листинг 5. Исходные коды хранимых процедур и функций
DELIMITER |
create function qtyOrder()
returns int
begin
DECLARE qty int;
SELECT count(ID) INTO qty FROM orders WHERE accept=1;
RETURN qty;
end
|
DELIMITER;
DELIMITER |
CREATE FUNCTION profit()
RETURNS real
BEGIN
DECLARE prof real;
SELECT sum(cost) INTO prof FROM orders WHERE accept=1;
RETURN prof;
END
|
DELIMITER;
DELIMITER |
CREATE PROCEDURE paper()
BEGIN SELECT *
FROM substrate
WHERE 1;
END;
|
DELIMITER;
Листинг 6. Исходный код создания триггеров.
DELIMITER |
create trigger delorder AFTER DELETE
ON orders
FOR EACH ROW
BEGIN
DElETE FROM ink2prod WHERE ink2prod.productID=(SELECT PID FROM ord2prod WHERE OID=old.ID);
DELETE FROM sub2prod WHERE sub2prod.productID=(SELECT PID FROM ord2prod WHERE OID=old.ID);
DELETE FROM stitch2prod WHERE stitch2prod.productID=(SELECT PID FROM ord2prod WHERE OID=old.ID);
DELETE FROM plate2prod WHERE plate2prod.productID=(SELECT PID FROM ord2prod WHERE OID=old.ID);
DELETE FROM product WHERE product.PID=(SELECT PID FROM ord2prod WHERE OID=old.ID);
DELETE FROM ord2prod WHERE OID=old.ID;
END
|
DELIMITER;
delimiter |
CREATE TRIGGER delclient AFTER DELETE
ON clients
FOR EACH ROW BEGIN
DELETE FROM clts2pub WHERE e_mail=old.e_mail;
END
|
delimiter;
delimiter |
CREATE TRIGGER clntord BEFORE DELETE
ON clients
FOR EACH ROW BEGIN
DELETE FROM orders WHERE ID=(SELECT OID FROM clts2Ord WHERE e_mail=old.e_mail);
DELETE FROM clts2Ord WHERE e_mail=old.e_mail;
END
|
delimiter;