Автор: Пользователь скрыл имя, 19 Декабря 2010 в 23:01, курсовая работа
В ходе выполнения курсового проекта была разработана база данных «СКЛАД». В базе данных учтены данные об сущностях, которые описывают иерархию товара, покупателя (продавца), приходных (расходных) накладных, место на складе. В основе создания базы данных лежит задание, полученное на кафедре «Информатика и интеллектуальная собственность».
1. Вступление. 2
2. Индивидуальное задание. 3
3. Построение инфологической модели данных. 4
4. Построение концептуальной модели данных. 6
5. Построение физической модели и создание базы данных. 7
6. Создание процедурных ограничений целостности. 10
7. Создание типичных запросов к базе данных. 11
7.1. Примеры операторов, которые записывают данные в таблицы 11
7.2. Примеры операторов на выборку данных из базы данных 13
7.3. Проверка ограничений целостности 15
Приложение А. SQL-скрипты создания таблиц базы данных 16
Приложение Б. SQL-скрипты создания триггеров 20
Приложение В. Полные выборки таблиц. 21
Содержание
1. Вступление.
В ходе выполнения курсового проекта была разработана база данных «СКЛАД». В базе данных учтены данные об сущностях, которые описывают иерархию товара, покупателя (продавца), приходных (расходных) накладных, место на складе. В основе создания базы данных лежит задание, полученное на кафедре «Информатика и интеллектуальная собственность».
2. Индивидуальное задание.
Задание для курсового проекта:
3. Построение инфологической модели.
Склад имеет следующую структуру. Покупатель(Поставщик) товара заключает со складом договор о покупке(продаже) некоторого товара. По договору формируется расходная(приходная) накладная в ней прописывается дата её оформления и код договора, потом формируется расходная(приходная) накладная на товар в которой прописывается код товара и его количество, а после этого в таблицах Изъятие(Размещение) товара со(на) склада(е) проверяется есть ли данного товара столько сколько в накладной (проверяется есть ли место на складе для размещения товара).
В
результате получим следующую ER-
Рис.
1 ER-диаграмма.
4. Построение концептуальной
модели базы данных.
Пользуясь построенной ER-диаграммой, разработаем концептуальную модель данных.
В результате имеем 15 таблиц. Определим для них первичные ключи.
Практически все таблицы за исключением Bye,Spendon, Maxonplace, Saleones, Incash, Incashon имеют первичные ключи, имя которых было образовано путем добавления к имени сущности выражения “ID”. Ключи имеют тип INTEGER ввиду того, что объем данных, которые могут содержаться в них, будет очень велик.
В результате имеем следующую концептуальную модель:
Рис.2 Концептуальная модель.
В разрабатываемой базе данных содержится 15 таблиц. Приведем описание каждой таблицы базы данных. Скрипты создания базы данных содержатся в приложении.
Название столбца | Тип данных | Ограничение | Комментарии | ||||||||
Customer(Покупатель) | |||||||||||
1 | customer_id | integer NOT NULL | Первичный ключ | ||||||||
2 | NAME | VARCHAR (250) NOT NULL | ФИО | ||||||||
3 | address | VARCHAR(100) NOT NULL | Адрес | ||||||||
4 | phone_number | integer not null | телефон | ||||||||
Customer_order(Договор продажа) | |||||||||||
1 | cusorder_id | Integer not null | Первичный ключ | ||||||||
2 | customer_id | integer NOT NULL | ссылка на customer | ||||||||
3 | date_1 | DATE NOT NULL | Дата заключения | ||||||||
4 | date_2 | DATE NOT NULL | Дата поставки | ||||||||
5 | success | VARCHAR (4) | Выполнение (да/нет) | ||||||||
Product(Товар) | |||||||||||
1 | product_id | Integer not null | Первичный ключ | ||||||||
2 | product_name | Varchar(100) | Наименование | ||||||||
3 | quantity | integer not null | Количество | ||||||||
4 | cover | varchar(100) | Упаковка | ||||||||
5 | comments | VARCHAR (250) NOT NULL | Коментарии | ||||||||
Salesman (Продавец) | |||||||||||
1 | salesman_id | INTEGER NOT NULL | Первичный ключ | ||||||||
2 | NAME | VARCHAR (100) NOT NULL | ФИО | ||||||||
3 | address | VARCHAR (100) NOT NULL | Адрес | ||||||||
4 | phone_number | integer not null | телефон | ||||||||
Sale_order(Договор о покупке) | |||||||||||
1 | saleorder_id | INTEGER NOT NULL | Первичный ключ | ||||||||
2 | salesman_id | INTEGER NOT NULL | ссылка на salesman | ||||||||
3 | date_1 | DATE NOT NULL | Дата заключения | ||||||||
4 | date_2 | DATE NOT NULL | Дата поставки | ||||||||
5 | success | VARCHAR (4) | Выполнение (да/нет) | ||||||||
Place(Место на складе) | |||||||||||
1 | place_id | INTEGER NOT NULL | Первичный ключ | ||||||||
2 | product_id | INTEGER NOT NULL | Ссылка на product | ||||||||
3 | size | decimal(5,2) | размеры места(M^2) | ||||||||
4 | quantity | integer not null | Количество | ||||||||
Maxonplace(Максимальное количество товара на месте) | |||||||||||
1 | place_id | INTEGER NOT NULL | Первичный ключ | ||||||||
2 | MAX | INTEGER NOT NULL | max количество на место | ||||||||
Bye(Продажа) | |||||||||||
1 | cusorder_id | Integer not null | Первичный ключ | ||||||||
2 | product_id | INTEGER NOT NULL | Первичный ключ | ||||||||
Spend(Расходная накладная) | |||||||||||
1 | spend_id | Integer not null | Первичный ключ | ||||||||
2 | cusorder_id | Integer not null | ссылка на customer_order | ||||||||
3 | date | DATE NOT NULL | Дата | ||||||||
Spendon(Расходная накладная на товар) | |||||||||||
1 | spend_id | Integer not null | Первичный ключ | ||||||||
2 | product_id | Integer not null | Первичный ключ | ||||||||
3 | quantity | integer not null | Количество | ||||||||
Take(Изъятие товара со склада) | |||||||||||
1 | place_id | INTEGER NOT NULL | ссылка на place | ||||||||
2 | spend_id | Integer not null | Первичный ключ | ||||||||
3 | product_id | Integer not null | Первичный ключ | ||||||||
Saleones(Покупка товара по договору) | |||||||||||
1 | product_id | Integer not null | Первичный ключ | ||||||||
2 | saleorder_id | INTEGER NOT NULL | Первичный ключ | ||||||||
3 | quantity | integer not null | Количество | ||||||||
Incash(Приходная накладная) | |||||||||||
1 | come_id | Integer not null | Первичный ключ | ||||||||
2 | saleorder_id | INTEGER NOT NULL | ссылка на sale_order | ||||||||
3 | date | DATE NOT NULL | Дата | ||||||||
Incashon(Приходная накладная на товар) | |||||||||||
1 | product_id | Integer not null | Первичный ключ | ||||||||
2 | come_id | Integer not null | Первичный ключ | ||||||||
3 | quantity | integer not null | Количество | ||||||||
Placing_incash (Размещение товара на складе в соответствии с накладной) | |||||||||||
1 | come_id | Integer not null | Первичный ключ | ||||||||
2 | product_id | Integer not null | Первичный ключ | ||||||||
3 | place_id | INTEGER NOT NULL | ссылка на place | ||||||||
4 | quantity | integer not null | Количество |
6. Создание процедурных ограничений целостности.
При анализе структуры данных и предметной области было установлено, что структура базы данных обеспечивает целостность данных. В большинстве случаев данные, которые хранятся, не противоречат друг другу.
Хотя может возникнуть ситуация, когда в таблице Расходной накладной можно внести значение количества товара, превышающее количество на складе, что изначально не является верным. Одним из возможных выходов из такой ситуации является создание триггера.
Назначим код ошибки 75000 и текст сообщения 'Изъятого товара не может быть больше чем на складе'.
Текст на создание триггера находится в приложении.
7. Создание типичных запросов к базе данных.
7.1. Примеры операторов, которые записывают данные в таблицы.
Для каждой таблицы приведем примеры запросов.
Таблица Сustomer:
insert into db2admin.customer values(1, 'Василий Иванович Кабысдохов', 'Харьков,Ленина 14,кв.23', 5678934);
insert into db2admin.customer values(2, 'Кабанов Михаил Владиславович', 'Донецк,Ленина 14,кв.3', 9878934);
insert into db2admin.customer values(3, 'Иванов Иван Иванович', 'Киев,Богд. Хмель. 54,кв.56', 8008934);
Таблица Сustomer_order:
insert into db2admin.customer_order values(1,3, '11.12.2008', '12.12.2008', 'yes');
insert into db2admin.customer_order values(2,2, '19.01.2009', '21.01.2009', 'no');
insert into db2admin.customer_order values(3,1, '21.01.2009', '23.01.2009', 'yes');
insert into db2admin.customer_order values(4,2, '24.01.2009', '26.01.2009', 'no');
insert into db2admin.customer_order values(5,1, '04.01.2009', '06.01.2009', 'yes');
Таблица Product:
insert into db2admin.product values(1, 'Колбаса', 20000, 'качалка', 'вес = 500 гр. длинна 35 см, диаметр = 5 см');
insert into db2admin.product
values(2,'Пшеница',15,'нет','
insert into db2admin.product
values(3,'Консервы',2000,'
insert into db2admin.product
values(4,'Автомобиль',4,'нет',
insert into db2admin.product
values(5,'Телефон',500,'
Таблица Bye:
insert into db2admin.bye values(5,5);
insert into db2admin.bye values(3,4);
insert into db2admin.bye values(1,4);
insert into db2admin.bye values(2,3);
insert into db2admin.bye values(1,5);
insert into db2admin.bye values(2,2);
Таблица Salesman:
insert into db2admin.salesman values(1, 'Королёв Игорь Владимирович', 'Харьков,Сумская 143,кв.45', 5548924);
insert into db2admin.salesman values(2, 'Горюшкин Эрнест Вадимович', 'Львов,Киевская 53,кв.25', 3448924);
insert into db2admin.salesman values(3, 'Шевченко Вячеслав Павлович', 'Харьков,Блюхера 32,кв.17', 548924);
Таблица Spend:
insert into db2admin.spend values(1, 2, '25.01.2009');
insert into db2admin.spend values(2, 1, '20.12.2008');
insert into db2admin.spend values(3, 5, '08.01.2009');
insert into db2admin.spend values(4, 4, '28.01.2009');
insert into db2admin.spend values(5, 3, '22.01.2009');
Таблица Place:
insert into db2admin.place values(1,1,45.2,15000);
insert into db2admin.place values(2,2,65.5,15);
insert into db2admin.place values(3,3,99.9,2000);
insert into db2admin.place values(4,1,45.2,5000);
insert into db2admin.place values(5,4,65.5,4);
insert into db2admin.place values(6,5,45.2,500);
Таблица Spendon:
insert into db2admin.spendon values(1,3,1000);
insert into db2admin.spendon values(2,5,100);
insert into db2admin.spendon values(3,2,5);
insert into db2admin.spendon values(2,4,1);
Таблица Maxonplace:
insert into db2admin.maxonplace values(1,1,1000);
insert into db2admin.maxonplace values(1,2,5000);
insert into db2admin.maxonplace values(2,3,5);
insert into db2admin.maxonplace values(3,2,1000);
insert into db2admin.maxonplace values(4,3,1);
insert into db2admin.maxonplace values(5,1,500);
Таблица Take:
insert into db2admin.take values(1,2,1);
insert into db2admin.take values(2,1,2);
Таблица Sale_order:
insert into db2admin.sale_order values(1,1, '31.12.2008', '02.01.2009', 'yes');
insert into db2admin.sale_order values(2,2, '31.01.2009', '02.02.2009', 'yes');
insert into db2admin.sale_order values(3,3, '21.01.2009', '22.02.2009', 'yes');
insert into db2admin.sale_order values(4,4, '21.02.2009', '22.02.2009', 'yes');
Таблица Saleones:
insert into db2admin.saleones values(1,1,300);
insert into db2admin.saleones values(2,2,10);
insert into db2admin.saleones values(3,3,1000);
insert into db2admin.saleones values(4,4,10);
Таблица Incash:
insert into db2admin.incash values(3, 3, '4.02.2009');
insert into db2admin.incash values(2, 2, '9.03.2009');
Таблица Incashon:
insert into db2admin.incashon values(1, 3, 500);
insert into db2admin.incashon values(3, 2, 3);
Таблица Placing_incash:
insert into db2admin.placing_incash values(2,3,3,1);
insert into db2admin.placing_incash
values(3,2,3,5);
7.2. Примеры операторов на выборку данных из базы данных.
1.Посчитать сумму всех товаров на местах.
select sum(quantity), product_id
from db2admin.place
group by product_id
Результат выборки:
20000 | 1 |
15 | 2 |
2000 | 3 |
4 | 4 |
5000 | 5 |
2. Список товаров и их количество, которое подлежат поставке на заданную дату 4.02.2009.
select product_name,saleones.quantity
from product,saleones,incash
where product.product_id=saleones.
Результат выборки:
3. Список товаров и их количество, которое проданы на заданную дату 20.12.2008.
select product_name,spendon.quantity
from product,spendon,spend
where product.product_id=spendon.
and date='20.12.2008'
Результат выборки:
4. Список договоров по покупке, которые не выполнены на заданную дату 19.01.2009.
select cusorder_id,r.customer_id,name
from customer_order c,customer r
where c.customer_id=r.customer_id