Uploaded by oksi-oksana

Метод проектирования и реализации базы данных

advertisement
Оглавление
Оглавление ................................................................................................................................................... 2
Обозначения и сокращения ........................................................................................................................ 3
Введение ...................................................................................................................................................... 4
1.
Описание предметной области .......................................................................................................... 5
2.
Описание проектируемой базы данных ............................................................................................ 7
2.1
Описание сущностей и хранимых данных ................................................................................ 7
2.2
Описание необходимых сущностей в формате: «Сущность – свойство – тип данных для
хранения в базе данных» ......................................................................................................................... 8
2.3 Функционал базы данных.................................................................................................................. 9
2.4 Модели базы данных ....................................................................................................................... 10
2.5 Список основных таблиц и описание хранимой в них информации ........................................... 11
3. Создание набора запросов к базе данных ........................................................................................... 14
4. Создание приложения для управления базой данных ....................................................................... 15
Заключение............................................................................................................................................... 19
Приложение А ........................................................................................................................................... 20
Приложение Б ............................................................................................................................................ 25
Обозначения и сокращения
БД – база данных;
СУБД – система управления базами данных;
SQL – Structured Query Language;
ЭВМ – Электронная вычислительная машина.
3
Введение
На сегодняшний день одной из важнейших отраслей экономики как
системы поддержания порядка во всех сферах общественной жизни является
вид хозяйственной деятельности, обозначаемый «торговля».
С
увеличением
структуры
которых
разнообразной
количества
является
потребительской
коммерческих
торговля,
организаций,
увеличивается
продукции,
а
также
и
основой
количество
увеличивается
количество потенциальных и уже существующих потребителей.
Для
наиболее
эффективного
с
точки
зрения
удовлетворения
потребностей клиента осуществления торговой деятельности торговым
учреждениям необходимо практически постоянно вести учёт имеющихся в
распоряжении
ресурсов
и
производить
переоценку
качества
предоставляемых услуг. Соответственно, количества товаров и услуг,
предоставляемых организациями, исчисляется в десятках тысяч, иногда даже
в миллионах единиц. Обработка всей имеющейся информации потребует
огромных затрат человеческих ресурсов.
Для таких случаев был применён метод проектирования и реализации
базы данных, содержащей в себе множество различных значений и связей
между ними. База данных позволяет хранить достаточно объемный набор
различного типа значений и предоставлять их оператору при выполнении
определённых запросов.
Цель работы – разработка базы данных, позволяющей вести учет товара
(возможных операций с ним), учет работы с клиентами организации,
создание возможностей более оптимального сбыта товаров (например,
акции). Реализация соответствующих таблиц для хранения свойств объектов,
установка связей между ними. Формирование и представление отчетов по
совершенным операциям.
Применение:
данная
база
данных
может
быть
применена
в
организациях, занимающихся коммерческой деятельностью, построенной на
4
системе реализации товаров. Примером организации, которая может
использовать в своей структуре подобную технологию может выступить
практически любая торговая организация, использующая в процессе
реализации товаров средства ЭВМ.
Предметная область: коммерческая деятельность, а именно «торговля и
оказание услуг».
1. Описание предметной области
В процессе выполнения работы была спроектирована и реализована база
данных. В ней будут храниться записи о работе с товарами. Каждый товар
может либо присутствовать на складе, либо ожидать, пока его на склад
доставят. Товары делятся на определённые группы. Также осуществляется
возврат товара покупателем. По истечении срока годности товара, его
необходимо
списать.
В
определенных
промежутках
времени
будет
производиться переучет имеющихся товаров. При этом будет формироваться
соответствующий отчет. Наличие групп товаров удобно для проведения
различных акций.
В
организации
учитываться
присутствуют
только
непосредственно
с
сотрудники.
количество
товарами,
В
данном
сотрудников,
т.е.
продают,
случае
которые
списывают.
будет
работают
Каждая
произведенная операция будет фиксироваться, и отображаться в отчетах.
Указываются даты и статусы выполнения. В организации предусмотрены
различные акции и скидки на отдельные группы товаров и для отдельных
групп покупателей. Это также будет отображено в процессе проведения
операции и внесено в отчёт. Акции имеют начальную и конечную даты, а
также наборы товаров и группы покупателей, на которые распространяются.
Рассмотрим работу с покупателями. Покупатели могут принадлежать к
какой-либо определенной группе (например, инвалиды, пенсионеры и т.п.).
5
К некоторым группам покупателей применяются особые «скидочные»
системы.
В итоге, в процессе работы будет создана исчерпывающая база данных,
которая будет очень полезна для облегчения работы торговой организации.
Данная работа представляет собой проектирование и реализацию
упрощенной базы данных, которую можно использовать в торговых
учреждениях для оптимизации процесса реализации товара. В качестве
сервера используется Microsoft SQL Server 2008, в качестве языка для
написания приложения, взаимодействующего с базой - C#.
6
2. Описание проектируемой базы данных
2.1
Описание сущностей и хранимых данных
Допустим, база данных будет использоваться в магазинах. В базе
предусмотрены варианты свойств для хранения соответствующих значений:
О предоставляемых организацией товарах:
 Наименование – название товара
 Количество товара на складе
 Стоимость товара – количество денежных единиц, отображающее
номинальную стоимость данного товара
 Краткая информация о товаре – информация о габаритах, физических
особенностях, условиях эксплуатации
 Производитель
 Тип товара
 Группа товара
 Срок годности
О продавцах
 Имя продавца
Об операциях
 Дата операции
 Тип операции – например, покупка, продажа, списание, возврат
 Статус выполнения – например, «в процессе выполнения»
 Выполнивший – определение сотрудника, производившего операцию
Об акциях
 Дата начала
 Дата окончания
 Размер скидки – процент вычета от цены товара, участвующего в
акции
 Группа товаров
О покупателях
 Наименование
 Группа
7
2.2
Описание необходимых сущностей в формате: «Сущность –
свойство – тип данных для хранения в базе данных»
Сущность «Товар»
- идентификтор (integer)
- количество на складе (integer)
- стоимость (integer)
- производитель (varchar)
- дата производства (datetime)
- краткая информация (varchar)
- срок годности (datetime)
Сущность «Продавец»
- идентификтор (integer)
- имя (varchar)
Сущность «Покупатель»
- идентификтор (integer)
- имя (varchar)
- группа (integer)
- сумма скидки (integer)
Сущность «акция»
- дата начала (datetime)
- дата окончания (datetime)
- сумма скидки (integer)
- группа товаров (integer)
Сущность «операция»
- идентификатор операции (integer)
- тип операции (integer)
- статус выполнения (integer)
- покупатель (integer)
- продавец (integer)
- товар (integer)
8
2.3 Функционал базы данных
Среди функционала системы можно выделить:
 возможность добавления товара в базу;
 поиск и просмотр имеющихся товаров;
 изменение свойств товара;
 регистрация покупателей;
 работа с группами покупателей;
 назначение статуса выполнения операций;
 вывод содержимого склада в форме отчета;
 работа с акциями;
 просмотр групп товаров и пользователей, на которых
распространяются акции;
 добавление новых типов товаров;
 добавление новых продавцов;
 добавление групп товаров;
 добавление групп покупателей;
 установление скидок на группы товаров.
 установление первоначальных скидок индивидуальным покупателям и
группам покупателей
9
2.4 Модели базы данных
«ER» и реляционная модели проектируемой базы данных представлены на
рис. 1 и 2 соответственно.
рис.1 ER-модель
рис. 2 Реляционная модель
10
2.5 Список основных таблиц и описание хранимой в них информации
Таблица «Product»
Содержит основную информацию о товаре, о его свойствах,
принадлежности к определенным группам и типам, сроке годности и цене без
учета различных скидок.
Поле «id» - идентификатор товара
Поле «type» - тип товара (связь с таблицей ptype)
Поле «groupproduct» - группа товара (связь с таблицей pgroup)
Поле «name» - Наименование товара
Поле «countsklad» - количество товара на складе
Поле «producer» - производитель
Поле «dateexpir» - срок годности
Поле «price» - начальная цена
Таблица «Operation»
Содержит основную информацию о производимых операциях: дате
совершения, статусе, покупателе и продавце товара, количестве, продкуте, с
которым производится операция.
Поле «id» - идентификатор операции
Поле «dateoperation» - дата совершения операции
Поле «type» - тип операции
Поле «status» - статус выполнения операции
Поле «ex1» - покупатель (связь с таблицей Buyer)
Поле «size» - количество товаров
Поле «ex2» - продавец (связь с таблицей seller)
Поле «product» - продукт (связь с таблицей Product)
Таблица «Buyer»
Содержит информацию о покупателе. Определяет принадлежность к
определённым группам покупателей и группам товаров, если на них имеется
скидка для определённой группы покупателей.
11
Поле «id» - идентификатор покупателя
Поле «groupproduct» - группа продуктов (связь с pgroup)
Поле «groupbuyer» - группа покупателей (связь с bgroup)
Поле «name» - название группы покупателей
Таблица «Seller»
Содержит информацию о продавце. Так как от статуса, принадлежности
к группам и условия проводимых акций не зависит цена, или объем
реализации товара, то здесь хранится только ФИО продавца для дальнейшего
анализа оператором в определённых случаях.
Поле «id» - идентификатор продавца
Поле «name» - название продавца
Таблица «otype»
Содержит информацию о типах операций. Имеющиеся типы: Продажа
(продажа товара покупателю), покупка (закупка товара со складов и внесение
их в перечень товаров организации для дальнейшей реализации), возврат
товара (случай, когда по каким-либо причинам товар возвращается в
собственность организации), списание (случай, когда товар списывается со
счёта организации по истечении срока годности).
Поле «id» - идентификатор типа операции
Поле «name» - название типа операции
Таблица «ptype»
Содержит информацию о типах товаров. В данном случае, учитывается
только название типа для дальнейшего наглядного отображения оператору
или другим задействованным в этом процессе фигурам.
Поле «id» - идентификатор типа товара
Поле «name» - название типа товаров
Таблица «pgroup»
Содержит информацию о группах товаров. Некоторые группы товаров
могут иметь начальную скидку к цене. Например, при приближении к
истечению срока годности, можно установить скидку на определенную
группу товаров с целью наиболее быстрого сбыта.
12
Поле «id» - идентификатор группы товара
Поле «discount» - скидка в % на тип товаров
Таблица «discount»
Содержит информацию о проводимых акциях. Указываются даты начала
и окончания акции, образующие временной интервал, во время которого
будет действовать определённая скидка на некоторые группы товаров или
для определённых покупателей. Например, в период новогодних праздников
выгодно было бы установить скидку на товары, относящиеся к тематике
празднования Нового Года с определённой скидкой с целью наиболее
быстрой реализации товаров этой группы.
Поле «id» - идентификатор акции
Поле «bdate» - дата начала акции
Поле «edate» - дата окончания акции
Поле «size» - размер скидки в %
Поле «pgroup» - группа товаров, на которые распространяется акция
Таблица «bgroup»
Содержит информацию о группах покупателей. В данном случае,
учитывается только название группы для дальнейшего наглядного
отображения оператору.
Поле «id» - идентификатор группы покупателей
Поле «dicount» - размер скидки в %
Поле «name» - наименование группы
13
3. Создание набора запросов к базе данных
База данных, согласно одному из определений, является совокупностью
самостоятельных данных или наборов данных, структурированных таким
образом, чтобы эти данные могли быть найдены и обработаны средствами
ЭВМ. Соответственно, для получения одного или нескольких определённых
значений,
нужно
каким-либо
образом
передать
базе
данных
соответствующий запрос.
Запрос строится на основе одной или нескольких взаимосвязанных
таблиц, находящихся в структуре базы данных, позволяя комбинировать
содержащуюся в них информацию. При этом могут использоваться как
таблицы базы данных, так и сохраненные таблицы, полученные в результате
выполнения других запросов.
Запрос позволяет выбрать необходимые данные из одной или
нескольких взаимосвязанных таблиц, произвести вычисления и получить
результат в виде виртуальной таблицы. Полученная таблица может
использоваться в качестве источника данных в следующих запросах, формах,
отчётах. Через запрос можно производить обновление данных в таблицах,
добавление и удаление записей.
В процессе выполнения работы был разработан набор запросов к
спроектированной базе данных. Он включает в себя следующие запросы:
 Запросы на создание таблиц базы данных;
 Запросы на добавление значений в поля таблиц;
 Запросы на создание триггеров, хранимых процедур, курсоров,
индексов, функций, представлений.
Тексты скриптов запросов к спроектированной базе данных представлены в
Приложении А.
14
4. Создание приложения для управления базой данных
Для
управления
базой
данных
была
разработана
программная
реализация соответствующего приложения.
Приложение разработано в среде Microsoft Visual Studio Professional
2013 на языке программирования C#.
Приложение
предназначено
для
использования
представителем
соответствующей организации – сотрудником.
Основу функционала программной реализации составляет возможность
добавления соответствующей структуре спроектированной базы данных
информации, а именно:
 информации о имеющихся в распоряжении организации товарах;
 информации о сотрудниках организации;
 информации о клиентах организации;
 информации об акциях;
 информации о принадлежности товаров и клиентов определённым
группам и типам;
 информации
для формирования отчётов по выполненным операциям.
Интерфейс разработанного приложения представлен на рисунках 3, 4, 5,
6, 7, 8.
Рассмотрим интерфейс разработанного приложения:
Перед использованием приложения необходимо удостовериться, что в
базе данных уже имеется некоторый набор значений, соответствующий уже
существующим товарам, их группам и типам (рис. 3), продавцам (рис. 4),
покупателям (рис. 5), акциям (рис. 6), операциям (рис. 7), информации для
вывода в качестве отчёта (рис. 8).
15
Рис. 3. Вкладка «добавить товар»
Рис. 4. Вкладка «добавить продавца»
16
Рис. 5. Вкладка «добавить покупателя»
Рис. 6. Вкладка «добавить акцию»
17
Рис. 7. Вкладка «добавить операцию»
Рис. 8. Вкладка «Отчёт»
18
Заключение
Организация деятельности торговых учреждений с применением
различного рода баз данных для хранения информации о различных ресурсах
организации является достаточно эффективным методом оптимизации
торгового процесса и удовлетворения потребностей клиентов, которыми,
зачастую являются отдельные покупатели, а не организации.
Внедрение баз данных в структуру торгового процесса уже несколько
лет
показывает
высокий
уровень
эффективности
удовлетворения
потребностей и увеличивает уровень лояльности со стороны клиентов.
В процессе выполнения работы была спроектирована и реализована база
данных, позволяющая хранить данные, касающиеся:
 учёта товарных единиц организации
 системы эффективного сбыта продукции
 учёта человеческих ресурсов организации
 организации торгового процесса
 анализа эффективности торговой деятельности организации
Таким образом, была разработана возможность обработки необходимой
для данного типа организаций информации средствами ЭВМ с помощью
проектирования и реализации различных типов баз данных.
19
Приложение А
Тексты скриптов запросов к базе данных
Запросы на создание таблиц базы данных
Создание таблицы «Тип товара»
create table ptype
(id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
name varchar(50) not null);
Создание таблицы «Группа товара»
create table pgroup
(id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
discount int not null);
Создание таблицы «Товар»
create table product
(id int identity(1,1) primary key not null,
type int FOREIGN KEY REFERENCES ptype(id),
groupproduct int FOREIGN KEY REFERENCES pgroup(id),
name varchar(50) not null,
countsklad int not null,
producer varchar(50),
dateexpir date not null,
price int not null);
Создание таблицы «Продавец»
create table seller
(id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
name varchar(50) not null);
Создание таблицы «Группа покупателей»
create table bgroup
(id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
discount int not null,
name varchar(50) not null);
20
Создание таблицы «Акция»
create table discount
(id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
bdate date not null,
edate date not null,
size int not null,
pgroup int not null,);
Создание таблицы «Покупатели»
create table buyer
(id int identity(1,1) primary key not null,
groupbuyer int FOREIGN KEY REFERENCES bgroup(id),
groupproduct int FOREIGN KEY REFERENCES pgroup(id),
name varchar(50) not null);
Создание таблицы «Операции»
create table operation
(id int identity(1,1) primary key not null,
dateoperation date not null,
type int foreign key references otype(id),
status int not null,
ex1 int foreign key references buyer(id),
size int not null,
ex2 int foreign key references seller(id),
product int foreign key references product(id));
Создание таблицы «Тип операции»
create table otype
(id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
name varchar(50) not null);
21
Запросы на добавление значений в поля таблиц
Добавление нового значение в таблицу «Типы товаров»
insert into ptype(name) values ('Фрукты');
Добавление нового значения в таблицу «Группы товаров»
insert into pgroup(discount) values (90);
Добавление нового значения в таблицу «Товары»
insert into product values (6, 3, 'Лимонад', 10, 'Фруктозия', '2015-11-10',
600)
Добавление нового значения в таблицу «Продавец»
insert into seller(name) values ('Алексей Алексеевич Алексеев');
Добавление нового значения в таблицу «Типы операций»
insert into otype(name) values ('Продажа');
Добавление нового значения в таблицу «Группы покупателей»
insert into bgroup(discount, name) values ('50', 'Пенсионеры');
Добавление нового значения в таблицу «Покупатели»
insert into buyer(groupbuyer, groupproduct, name) values ('5', '5',
'Василий');
Добавление нового значения в таблицу «Акции»
insert into discount(bdate, edate, size, pgroup) values ('2015-1-1', '2016-1-1',
'10', '2');
Добавление нового значения в таблицу «Операции»
insert into operation(dateoperation, type, status, ex1, size, ex2, product)
values ('2015-1-1', '4', '1', '3', '30', '5', '10');
22
Запросы на создание триггеров, хранимых процедур, курсоров, индексов,
функций, представлений
Создание функции
CREATE FUNCTION F(@n1 int, @n2 as int)
RETURNS int
AS
BEGIN
Return (@n1*@n2)
END
Данная функция принимает в качестве аргументов два числа и
возвращает их произведение.
Вызвать функцию на выполнение можно так: SELECT [dbo].F(5, 8)
Создание курсора
DECLARE Cproduct CURSOR
FOR SELECT * FROM product
OPEN Cproduct
FETCH NEXT FROM Cproduct;
Данный курсор при открытии включает в себя все строки и и столбцы
таблицы product.
Создание индекса
CREATE INDEX Iproduct
ON [dbo].product (dateexpir);
Данный индекс указывает на набор значений в таблице product,
соответствующих дате производства продукта.
Создание хранимой процедуры
CREATE PROCEDURE h AS
SELECT COUNT(DISTINCT price) FROM product
GO
23
Данная процедура при вызове выводит на область вывода информации
количество различных цен на товары.
Создание представления
CREATE VIEW p
AS
SELECT p.id as 'Идентификатор', p.name as 'Наименование', pt.name as 'Категория',
p.countsklad as 'На складе', p.producer as 'Производитель', pg.discount as 'Скидка',(price(price*(discount)/100)) as 'Цена', p.dateexpir as 'Дата производства'
FROM [dbo].product p
left join [dbo].pgroup pg
on p.productgroup = pg.id
left join [dbo].ptype pt
on p.type = pt.id
Данное представление при вызове возвращает набор значений в виде
«Идентификатор – Наименование – Категория – Количество – Производитель
– Скидка – Цена – Дата производства».
Другими словами, исчерпывающие сведения об имеющихся на складе
товарах и цену на них с учётом первичной скидки на товар.
Создание триггера
CREATE TRIGGER [dbo].triggercount
ON [dbo].[product]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
select * from ptype
select * from pgroup
END
Данный триггер срабатывает при добавлении строки в таблицу product и
отображает содержимое таблиц ptype и pgroup соответственно.
24
Приложение Б
Листинг программы
Для подключения к базе данных следует добавить в проект
соответствующий компонент с помощью строки:
using System.Data.SqlClient;
Функция для выполнения запросов
public void sqladd(string c)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
{
SqlCommand command = new SqlCommand(c, connection);
connection.Open();
command.ExecuteNonQuery();
}
}
}
Рассмотрим на примере вкладки «Добавить товар»
public void tab1init()
{
listBox1.Items.Clear(); //Элемент для отображения списка групп товаров
listBox2.Items.Clear(); // Элемент для отображения списка типов товаров
listBox11.Items.Clear(); // Элемент для отображения списка товаров
using (SqlConnection connection = new SqlConnection(
connectionString))
{
{
SqlCommand command = new SqlCommand(
"SELECT id, name FROM ptype;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
25
{
listBox1.Items.Add(reader.GetInt32(0) + " - " + reader.GetString(1));
}
}
reader.Close();
command = new SqlCommand("SELECT id, discount FROM pgroup;",connection);
reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
listBox2.Items.Add(reader.GetInt32(0) + " - " + reader.GetInt32(1) + "%");
}
}
reader.Close();
command = new SqlCommand("SELECT * FROM product;", connection);
reader = command.ExecuteReader();
listBox11.Items.Add("id - " + "Тип - "+ "Группа - "+ "Имя - "+ "Количество - "+
"Производитель - "+ "Цена");
if (reader.HasRows)
{
while (reader.Read())
{
listBox11.Items.Add(reader.GetInt32(0) + " - " + reader.GetInt32(1) + " - " +
reader.GetInt32(2) + " - " + reader.GetString(3) + " - " + reader.GetInt32(4) + " - " +
reader.GetString(5) + " - " + reader.GetInt32(7));
}
}
reader.Close();
}
}
}
Аналогично можно заполнять все остальные вкладки. Для этого
необходимо произвести некоторые изменения в коде, а именно:
 Изменить параметры запроса соответствующих данных;
 Изменить названия элементов управления, являющихся контейнерами
для получаемых данных;
 Изменить структуру строки добавления полученных данных в список.
26
Для добавления или удаления некоторых значений из базы данных с
помощью приложения используется следующая вставка (представлен
фрагмент исходного кода приложения, относящийся к удалению значения из
базы данных):
private void button11_Click(object sender, EventArgs e)
{
try
{
int ind = listBox2.SelectedIndex;
ind = Convert.ToInt32((listBox2.Items[ind].ToString()).Substring(0, 1));
string c = "delete from pgroup where id=" + ind + "";
sqladd(c);
tab1init();
}
catch
{
MessageBox.Show("Ошибка! Нельзя удалить группу товара, так как к ней уже
относятся продукты.");
}
}
В данном случае был представлен фрагмент исходного кода приложения,
соответствующий набору команд, выполняемых при обработке события
Click( ) указывающий на удаление какого-либо значения из базы данных с
помощью разработанного приложения. Удаление происходит с помощью
выполнения запроса DELETE FROM ***
WHERE ***
с добавлением
индекса необходимого для удаления элемента.
Аналогичным образом можно представить варианты обработки событий
Click( ) для остальных активных элементов управления формы.
27
Download