Автор работы: Пользователь скрыл имя, 26 Марта 2013 в 14:52, курсовая работа
Магазин занимается продажей компьютерных дисков с играми через интернет с помощью платежной системы «WebMoney» с возможностью доставки покупателю наземной почтой, курьером или авиапочтой (каждый вид доставки имеет свою стоимость и скидки). Каждый покупатель имеет собственный аккаунт, где хранятся его ФИО, логин, пароль, адрес электронной почты, полный домашний адрес, номер счета WebMoney», размер накопительной скидки и контактный телефон. У каждого покупателя есть счета (номера счетов), которые содержат информацию о способе, стоимости и дате отправки купленного покупателем товара, а также скидку на доставку. У каждой продажи есть свой уникальный номер
1. Цель выполнения курсового проекта. 4
2. Анализ предметной области. 4
2.1 Описание предметной области. 4
2.2 Ограничения, присутствующие в предметной области. 5
2.3 Основные задачи, решаемые в предметной области. 5
3. Проектирование инфологической модели данных. 5
3.1 Первая нормальная форма. 6
3.2 Вторая нормальная форма. 6
3.3 Третья нормальная форма. 8
3.4 Четвертая нормальная форма. 9
3.5 Описание основных сущностей и их атрибутов. 10
3.6 Выявление связей между сущностями 13
3.7 Инфологическая модель данных в нотации Чена. 13
4. Концептуальная модель 15
4.1 Логический уровень модели данных. 15
4.2 Физический уровень модели данных. 16
4.3 Сгенерированный в ERwin SQL код таблиц. 20
5. Проектирование представлений, последовательностей, триггеров, хранимых процедур. 23
5.1 Последовательности. 23
5.2 Триггеры. 23
5.3 Представления. 25
5.4 Хранимые процедуры. 26
6. Реализация базы данных в среде серверной СУБД PostgreSQL 8.4. 28
6.1 Представления. 28
6.2 Триггеры. 29
6.3 Хранимые процедуры. 33
7. Разработка клиент-серверного приложения. 42
7.1 Руководство пользователя. 43
7.1.1 Регистрация. 43
7.1.2 Поиск. 43
7.1.3 Авторизация и деавторизация. 44
7.1.4 Возможности для покупателей. 44
7.1.5 Возможности для продавцов. 46
7.1.6 Возможности для администратора. 47
7.2 Листинг программы. 48
7.2.1 Регистрация нового покупателя. 48
7.2.2 Редактирование профиля покупателя. 49
7.2.3 Вывод на экран истории заказов клиента. 50
8. Заключение. 52
9. Список литературы. 53
В ходе проектирования физического уровня была получена модель, представленная на рисунке 4.2.
Рисунок 4.2 – Модель данных на физическом уровне в нотации IDEF1x
Соответствия между объектами логического и физического уровня показаны в следующих таблицах:
Сущность |
Таблица |
Название |
Название |
Партии товара |
Accounts |
Персонал магазина |
Buyers |
Покупатели |
Consignment |
Поставщики |
Goods |
Продажа |
Reteil |
Счета |
Shop_Staff |
Товар |
Vendor |
Attribute(s) of "Партии товара" Entity |
Column(s) of "Consignment" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер партии |
Consignment_ID |
NUMERIC |
Yes |
No |
Дата |
Consignment_date |
DATE |
No |
No |
Номер поставщика |
Vendor_ID |
NUMERIC |
No |
Yes |
Количество товара в партии |
Goods_count |
INTEGER |
No |
No |
Цена поставки |
Delivery_price |
DOUBLE PRECISION |
No |
No |
Номер товара |
Goods_ID |
NUMERIC |
No |
Yes |
Attribute(s) of "Сотрудники" Entity |
Column(s) of "Shop_Staff" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер сотрудника |
Employee_ID |
NUMERIC |
Yes |
No |
Фамилия |
Last_Name |
VARCHAR(20) |
No |
No |
Имя |
First_Name |
VARCHAR(20) |
No |
No |
Отчество |
Third_Name |
VARCHAR(20) |
No |
No |
Логин |
Login |
VARCHAR(20) |
No |
No |
Пароль |
Password |
VARCHAR(20) |
No |
No |
Должность |
Post |
VARCHAR(20) |
No |
No |
VARCHAR(20) |
No |
No | ||
Номер счета WebMoney |
WebMoney_account_number |
VARCHAR(20) |
No |
No |
Домашний адрес |
Home_address |
VARCHAR(100) |
No |
No |
Контактный телефон |
Phone |
VARCHAR(12) |
No |
No |
Ставка от продажи, % |
Wage_rate |
NUMERIC |
No |
No |
Оклад, руб |
Salary |
DOUBLE PRECISION |
No |
No |
Attribute(s) of "Покупатели" Entity |
Column(s) of "Buyers" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер покупателя |
Buyer_ID |
NUMERIC |
Yes |
No |
Фамилия |
Last_Name |
VARCHAR(20) |
No |
No |
Имя |
First_Name |
VARCHAR(20) |
No |
No |
Отчество |
Third_Name |
VARCHAR(20) |
No |
No |
Логин |
Login |
VARCHAR(20) |
No |
No |
Пароль |
Password |
VARCHAR(20) |
No |
No |
VARCHAR(20) |
No |
No | ||
Номер счета WebMoney |
WebMoney_account_number |
VARCHAR(20) |
No |
No |
Домашний адрес |
Home_address |
VARCHAR(100) |
No |
No |
Контактный телефон |
Phone |
VARCHAR(12) |
No |
No |
Накопительная скидка, % |
Summ_Discount |
INTEGER |
No |
No |
Attribute(s) of "Поставщики" Entity |
Column(s) of "Vendor" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер поставщика |
Vendor_ID |
NUMERIC |
Yes |
No |
Название |
Vendor_Name |
VARCHAR(30) |
No |
No |
Адрес |
Address |
VARCHAR(100) |
No |
No |
VARCHAR(20) |
No |
No | ||
Номер счета WebMoney |
WebMoney_account_number |
VARCHAR(20) |
No |
No |
Телефон |
Phone |
VARCHAR(12) |
No |
No |
Attribute(s) of "Продажа" Entity |
Column(s) of "Reteil" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер продажи |
Reteil_ID |
NUMERIC |
Yes |
No |
Номер счета |
Account_ID |
NUMERIC |
No |
Yes |
Количество |
Reteil_count |
INTEGER |
No |
No |
Скидка, % |
Discount |
INTEGER |
No |
No |
Номер товара |
Goods_ID |
NUMERIC |
No |
Yes |
Дата продажи |
Date_of_reteil |
DATE |
No |
No |
Attribute(s) of "Счета" Entity |
Column(s) of "Accounts" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер счета |
Account_ID |
NUMERIC |
Yes |
No |
Номер покупателя |
Buyer_ID |
NUMERIC |
No |
Yes |
Дата отправки товара |
Date_of_sending |
DATE |
No |
No |
Скидка на доставку, % |
Discount_on_ shipping |
INTEGER |
No |
No |
Номер сотрудника |
Employee_ID |
NUMERIC |
No |
Yes |
Способ доставки |
Type_of_shipping |
VARCHAR(30) |
No |
No |
Стоимость доставки |
Price_of_shipping |
DOUBLE PRECISION |
No |
No |
Attribute(s) of "Товар" Entity |
Column(s) of "Goods" Table | |||
Название |
Name |
Datatype |
Is PK |
Is FK |
Номер товара |
Goods_ID |
NUMERIC |
Yes |
No |
Разработчик |
Developer |
VARCHAR(25) |
No |
No |
Название |
Name |
VARCHAR(25) |
No |
No |
Издатель |
Publisher |
VARCHAR(25) |
No |
No |
Описание |
Description |
TEXT |
No |
No |
Дата выпуска |
Date_of_release |
DATE |
No |
No |
Процент увеличения цены |
Percent_of_price_ increasing |
INTEGER |
No |
No |
Количество на складе |
Count_at_storehouse |
NUMERIC |
No |
No |
Цена последней поставки |
Price_of_last_ delivery |
DOUBLE PRECISION |
No |
No |
Изображение |
Image |
VARCHAR(50) |
No |
No |
4.3 Сгенерированный в ERwin SQL код таблиц.
CREATE TABLE Vendor
(
Vendor_ID NUMERIC NOT NULL,
Vendor_Name VARCHAR(30),
Address VARCHAR(100),
Phone VARCHAR(12),
email VARCHAR(20),
WebMoney_account_number VARCHAR(20),
PRIMARY KEY (Vendor_ID)
);
CREATE TABLE Goods
(
Goods_ID NUMERIC NOT NULL,
Developer VARCHAR(25),
Name VARCHAR(25),
Publisher VARCHAR(25),
Description TEXT,
Percent_of_price_increasing INTEGER,
Count_at_storehouse NUMERIC,
Price_of_last_delivery DOUBLE PRECISION,
Date_of_release DATE,
Image VARCHAR(50),
PRIMARY KEY (Goods_ID)
);
CREATE TABLE Consignment
(
Consignment_ID NUMERIC NOT NULL,
Consignment_date DATE,
Vendor_ID NUMERIC NOT NULL,
Goods_count INTEGER,
Delivery_price DOUBLE PRECISION,
Goods_ID NUMERIC NOT NULL,
PRIMARY KEY (Consignment_ID),
(Vendor_ID) REFERENCES Vendor (Vendor_ID),
(Goods_ID) REFERENCES Goods (Goods_ID)
);
CREATE TABLE Buyers
(
Buyer_ID NUMERIC NOT NULL,
Last_Name VARCHAR(20),
First_Name VARCHAR(20),
Third_Name VARCHAR(20),
Login VARCHAR(20),
Password VARCHAR(20),
email VARCHAR(20),
WebMoney_account_number VARCHAR(20),
Home_address VARCHAR(100),
Phone VARCHAR(12),
Summ_Discount INTEGER,
PRIMARY KEY (Buyer_ID)
);
CREATE TABLE Shop_Staff
(
Employee_ID NUMERIC NOT NULL,
Last_Name VARCHAR(20),
First_Name VARCHAR(20),
Third_Name VARCHAR(20),
Login VARCHAR(20),
Password VARCHAR(20),
Post VARCHAR(20),
email VARCHAR(20),
WebMoney_account_number VARCHAR(20),
Home_address VARCHAR(100),
Phone VARCHAR(12),
Wage_rate NUMERIC,
Salary DOUBLE PRECISION,
PRIMARY KEY (Employee_ID)
);
CREATE TABLE Accounts
(
Account_ID NUMERIC NOT NULL,
Buyer_ID NUMERIC NOT NULL,
Date_of_sending DATE,
Discount_on_shipping INTEGER,
Employee_ID NUMERIC NOT NULL,
Type_of_shipping VARCHAR(30),
Price_of_shipping DOUBLE PRECISION,
PRIMARY KEY (Account_ID),
(Buyer_ID) REFERENCES Buyers (Buyer_ID),
(Employee_ID) REFERENCES Shop_Staff (Employee_ID)
);
CREATE TABLE Reteil
(
Reteil_ID NUMERIC NOT NULL,
Account_ID NUMERIC NOT NULL,
Reteil_count INTEGER,
Discount INTEGER,
Goods_ID NUMERIC NOT NULL,
Date_of_reteil DATE,
PRIMARY KEY (Reteil_ID),
(Account_ID) REFERENCES Accounts (Account_ID),
(Goods_ID) REFERENCES Goods (Goods_ID)
);
5. Проектирование представлений, последовательностей, триггеров, хранимых процедур.
5.1 Последовательности.
При использовании суррогатных ключей не следует озадачивать пользователя вводом значений, которые не несут для него никакой информации. Эти поля в среде СУБД PostgreSQL заполняются автоматически с помощью, так называемых последовательностей (Sequences).
Список последовательностей:
id_accounts – последовательность для суррогатного ключа таблицы Accounts
id_vendor - последовательность для суррогатного ключа таблицы Vendor
id_goods - последовательность для суррогатного ключа таблицы Goods
id_reteil - последовательность для суррогатного ключа таблицы Reteil
id_buyers - последовательность для суррогатного ключа таблицы Buyers
id_staff - последовательность для суррогатного ключа таблицы Shop_Staff
id_consignment - последовательность для суррогатного ключа таблицы Consignment
5.2 Триггеры.
Триггер — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено наступлением определенного события (действием) — по сути добавлением INSERT или удалением DELETE строки в заданной таблице, или модификации UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера [4].
В среде PostgreSQL код триггера содержит только событие для срабатывания и вызов триггерной функции, в которой содержится вся логика триггера.
Разработанные триггеры представлены в таблице 5.1.
Таблица 5.1. Описание разработанных триггеров.
Название триггера |
Соответствующая триггерная функция |
Событие для срабатывания триггера |
Описание |
consigment_datе_check |
cons_datе_check |
До вставки или до изменения |
Триггер для таблицы Сonsigment. Проверка даты поставки партии (она должна быть меньше или равна текущей) |
goods_date_ check |
goods_datecheck |
До вставки или до изменения |
Триггер для таблицы Goods. Проверка даты выхода игры (она должна быть меньше или равна текущей) |
reteil_date_check |
ret_date_check |
До вставки или до изменения |
Триггер для таблицы Reteil. Проверка даты продажи (она должна быть меньше или равна текущей) |
goods_update_from_consig |
goods_works |
После вставки |
Триггер для таблицы Goods. Автоматическое добавление в поле «Количество на складе» таблицы «Товары» количества товара, указанного при осуществлении поставки, а также заполнение поля «Цена последней поставки» |
reteil_ dateSending |
dateSending |
После вставки |
Триггер для таблицы Reteil. Автоматическая установка даты отправки товара (дата покупки + 5 дней) |
reteil_update_ count |
reteil_works |
До вставки |
Триггер для таблицы Reteil. При осуществлении продажи – автоматическое уменьшение числа товара на складе на количество проданного товара, а также вывод на экран ошибки в случае, когда количество на продажу больше, чем количество товара на складе |
user_summ_ discount |
user_sum_discount |
После вставки |
Триггер для таблицы Reteil. Подсчет накопительной скидки для покупателя при осуществлении новой покупки |
5.3 Представления.
В отличие от обычных таблиц реляционной БД, представление не является самостоятельной частью набора данных, хранящегося в базе. Содержимое представления динамически вычисляется на основании данных, находящихся в реальных таблицах. Изменение данных в реальной таблице БД немедленно отражается в содержимом всех представлений, построенных на основании этой таблицы.
Разработанные
представления описаны в
Таблица 5.2. Описание разработанных представлений.
Информация о работе Проектирование и реализация базы данных «On-line магазин»