Описание предметной области. Это самая распространенная полноценная серверная СУБД
MySQL
Это самая распространенная полноценная серверная СУБД. MySQL очень функциональная, свободно распространяемая СУБД, которая успешно работает с различными сайтами и веб приложениями.
Преимущества MySQL
· Простота в работе - установить MySQL довольно просто;
· Богатый функционал - MySQL поддерживает большинство функционала SQL;
· Безопасность - большое количество функций обеспечивающих безопасность;
· Скорость - упрощение некоторых стандартов позволяет MySQL значительно увеличить производительность;
Недостатки MySQL
· Ограничение функционала, которые иногда необходимы в особо требовательных приложениях;
· Проблемы с надежностью ;
· Медленная разработка ;
SQL
SQL - язык управления базами данных для реляционных баз данных.
Преимущества SQL
Независимость от конкретной СУБД
· Наличие стандартов
Декларативность – с помощью SQL программист описывает только то, какие данные нужно извлечь или модифицировать.
Недостатки SQL
Сложность
Отступление от стандартов
Сложность работы с иерархическими структурами
Описание предметной области
Выбранной предметной областью базы данных является управление Складом. В базу данных заносятся атрибуты Контрагентов (Физические и Юридические лица), Товаров (с отдельными описаниями), Места хранения, Поставки (Приходной документ товаров).
Целью работы является разработка базы данных, содержащей информацию, необходимой управляющему склада для контроля потока товаров, работы с поставками и продажами, общего функционирования организации.
База предоставляет пользователю (управляющему) информацию о складах, товарах, контрагентов, продажах, поставках. Наиболее важными компонентами данной системы являются: поставки, продажи и товар. Основными процессами являются: просмотр информации о местах хранениях и поставках.
Задачей данной базы является автоматизация и упрощение работы управляющего складом, при контроле и внесении записей поступление товара на склад, а так же продажу
МестаХранения |
* Id_склада - Наименование - Расположение - МОЛ |
Товары |
* Id_товара - Артикул - Наименование - ЕдИзмерения - Цена |
Контрагенты |
* Id_контрагента - Наименование - ВидКонтрагента - Адрес - Телефон - ФИО_КонтЛица |
Поставки |
* №Накладной - Дата - Склад - Товар - Контрагент - Цена - Количество |
Продажи |
* №Накладной - Дата - Склад - Товар - Контрагент - Цена - Количество |
Остатки |
* Склад * Товар - Количество |
N |
N |
N |
N |
N |
N |
N |
ЗАПОЛНЕНИЕ ТАБЛИЦ:
Заполнение таблиц осуществляется так же двумя способами:
1. В списке объектов базы данных выбрать пункт «Таблицы», где появится список созданных таблиц.
2. С помощью использования средств DDL.
В этом проекте Заполнение таблиц осуществлялось с помощью средств DDL.
1. Создание таблици «Контрагенты»
Название атрибутов | Тип полей |
ID контрагенты | Int |
ВидКонтрагента | nChar |
Адрес | nChar |
Наименование | nChar |
Телефон | nChar |
ФИО | nChar |
(Таблица 1. Атрибуты таблицы «Контрагенты»)
create table Контрагенты(
idконтрагента
char(50),
ВидКонтрагента char(50),
Адрес char int primary key,
Наименование (50),
Телефон char(30),
ФИОконтактнЛица char(30));
(Программный код создания таблицы «Контрагенты»)
2. Создание таблицы «Места хранения»
Название атрибутов | Тип полей |
ID Склада | int |
Наименование | nchar |
Расположение | nchar |
Материально ответственно лицо | nchar |
(Таблица 2. Атрибуты таблицы «Места хранения»
create table МестаХранения(
idсклада int primary key,
Наименование char(30),
Расположение char(50),
МОЛ char(30));
GO
(Программный код создания таблицы «Места хранения»)
3. Создание таблицы «Поставки»
Название атрибутов | Тип полей |
Номер докладной | int |
Дата | int |
Склад | int |
Товар | int |
Контрагент | int |
Цена | int |
Количество | int |
(Таблица 3. Атрибуты таблицы «Поставки»)
create table Поставки(
НомерНакладной int primary key,
Дата datetime,
Склад int references МестаХранения(idсклада),
Товар int references Товары(idтовара),
Контрагент int references Контрагенты(idконтрагента),
Цена decimal(10,2),
Количество int check(Количество>0));
(Программный код создания таблицы «Поставки»)
4. Создание таблицы «Продажи»
Название атрибутов | Тип полей |
Номер докладной | int |
Дата | Int |
Склад | Int |
Товар | Int |
Контрагент | Int |
Цена | Int |
Количество | int |
(Таблица 4. Атрибуты таблицы «Продажи»)
create table Продажи(
НомерНакладной int primary key,
Дата datetime,
Склад int references МестаХранения(idсклада
Товар int references Товары(idтовара),
Контрагент int references Контрагенты(idконтрагента),
Цена decimal(10,2), Количество int check(Количество>0));
(Программный код создания таблицы «Продажи»)
5. Создание таблицы «Товар»
Название атрибутов | Тип полей |
ID Товара | int |
Артикул | nchar |
Наименование | nchar |
ЕдИзмерения | nchar |
Цена | int |
(Таблица 5. Атрибут таблицы «Товар»)
create table Товары(
idтовара int primary key,
Артикул char(20),
Наименование char(50),
ЕдИзмерения char(20),
Цена decimal(10,2))
(Программный код создания таблицы «Товар»)
РЕАЛИЗАЦИЯ ТРИГГЕРОВ:
Триггеры являются особой разновидностью хранимых процедур, выполняемых автоматически (срабатывающих) при модификации данных таблицы. Триггеры находят разное применение – от проверки данных до обеспечения сложных деловых правил. Особенно полезным свойством триггеров является то, что они имеют доступ к образам записи до и после модификации; таким образом, можно сравнить две записи и принять соответствующее решение.
CREATE TRIGGER [dbo].[Not_null_date] ON [dbo].[Товары]
AFTER INSERT NOT FOR REPLICATION AS
BEGIN
SET NOCOUNT ON;
DECLARE @new_Tovar_code int
DECLARE @new_Art nchar(20)
DECLARE @new_Edizm nchar(20)
DECLARE @new_Cena decimal(10,2)
SELECT @new_Tovar_code=[idтовара],@new_Art=Артикул,@new_Edizm=[ЕдИзмерения],@new_Cena=[Цена] from inserted
IF EXISTS (SELECT *
FROM [Товары]
WHERE Артикул='')
BEGIN
UPDATE [Товары] SET Артикул=('Заполнить!') WHERE [idтовара] =@new_Tovar_code
END
IF EXISTS (SELECT *
FROM [Товары]
WHERE [ЕдИзмерения]='')
BEGIN
UPDATE [Товары] SET [ЕдИзмерения]=('Заполнить!') WHERE [idтовара] =@new_Tovar_code
END
IF EXISTS (SELECT *
FROM [Товары]
WHERE Цена='')
BEGIN
UPDATE [Товары] SET Цена=('Заполнить!') WHERE [idтовара] =@new_Tovar_code
END
END
(Прог.код 7, Создание триггера « Not_null_date »)
Create TRIGGER [dbo].[Check_Double_MOL] ON [dbo].[МестаХранения]
FOR INSERT
AS
IF EXISTS (SELECT *
FROM [МестаХранения], inserted
WHERE [МестаХранения].[idсклада]=inserted.[idсклада] and [МестаХранения].[Наименование]=inserted.[Наименование] and [МестаХранения].[Расположение]=inserted.[Расположение]
and [МестаХранения].[МОЛ]=inserted.[МОЛ])
BEGIN
raiserror ('Невозможно вставить повторяющуюся запись, проверьте правильность написания!',16,1)
ROLLBACK tran
END
(Прог.код 8, Создание триггера «Check_Double_MOL»)
Create TRIGGER [dbo].[Check_Double_Post] ON [dbo].[Поставки]
FOR INSERT
AS
IF EXISTS (SELECT *
FROM [Поставки], inserted
WHERE [Поставки].[НомерНакладной]=inserted.[НомерНакладной] and [Поставки].[Дата]=inserted.[Дата] and [Поставки].[Склад]=inserted.[Склад]
and [Поставки].[Товар]=inserted.[Товар] and [Поставки].[Контрагент]=inserted.[Контрагент] and [Поставки].[Цена]=inserted.[Цена] and [Поставки].[Количество]=inserted.[Количество])
BEGIN
raiserror ('Невозможно вставить повторяющуюся запись, проверьте правильность написания!',16,1)
ROLLBACK tran
END
(Прог.код 9, Создание триггера «Check_Double_Post»)
CREATE TRIGGER [dbo].[Check_Double_prodaj] ON [dbo].[Продажи]
FOR INSERT
AS
IF EXISTS (SELECT *
FROM [Продажи], inserted
WHERE [Продажи].[НомерНакладной]=inserted.[НомерНакладной] and [Продажи].[Дата]=inserted.[Дата] and [Продажи].[Склад]=inserted.[Склад]
and [Продажи].[Товар]=inserted.[Товар] and [Продажи].[Контрагент]=inserted.[Контрагент] and [Продажи].[Цена]=inserted.[Цена] and [Продажи].[Количество]=inserted.[Количество])
BEGIN
raiserror ('Невозможно вставить повторяющуюся запись, проверьте правильность написания!',16,1)
ROLLBACK tran
END
GO
(Прог.код 10, Создание триггера «Not_null_date_Prodaj»)
CREATE TRIGGER [dbo].[Check_Double_Key] ON [dbo].[Товары]
FOR INSERT
AS
IF EXISTS (SELECT *
FROM [Товары], inserted
WHERE [Товары].Артикул=inserted.Артикул and [Товары].[Наименование]=inserted.[Наименование] and [Товары].[ЕдИзмерения]=inserted.[ЕдИзмерения]
and [Товары].[Цена]=inserted.[Цена] )
BEGIN
raiserror ('Невозможно вставить повторяющуюся запись, проверьте правильность написания!',16,1)
ROLLBACK tran
END
(Прог.код 11, Создание триггера «Check_Double_Key»)
РЕАЛИЗАЦИЯ ХРАНИМЫХ ПРОЦЕДУР:
При разработке приложений, основанных на платформе «клиент – сервер», для облегчения выполнения каких-либо операций с данными используются механизмы, при помощи которых можно создавать подпрограммы, работающие на сервере и управляющие процессами обработки информации. Эти механизмы носят название хранимых процедур.
use Kurs_1
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROCEDURE [dbo].[sp_sum_ostatk]
@SkladNumber int,
@TovarNumber int,
@Sklad_name char(30) output,
@Tovar_name char(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT @Sklad_name=(Наименование)
FROM dbo.МестаХранения
WHERE idсклада=@SkladNumber
SELECT @Tovar_name=(Наименование)
FROM dbo.Товары
WHERE idтовара=@TovarNumber
END
(Прог.код 12, Создание хранимой процедуры «sp_sum_ostatk»)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROCEDURE [dbo].[sp_sum_postoav]
@SkladNumber int,
@TovarNumber int,
@KontrNumber int,
@Sklad_name char(30) output,
@Tovar_name char(50) output,
@Kontr_name char(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT @Sklad_name=(Наименование)
FROM dbo.МестаХранения
WHERE idсклада=@SkladNumber
SELECT @Tovar_name=(Наименование)
FROM dbo.Товары
WHERE idтовара=@TovarNumber
SELECT @Kontr_name=(Наименование)
FROM dbo.Контрагенты
WHERE idконтрагента=@KontrNumber
END
(Прог.код 13, Создание хранимой процедуры «sp_sum_postoav»)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_sum_prodaj]
@SkladNumber int,
@TovarNumber int,
@KontrNumber int,
@Sklad_name char(30) output,
@Tovar_name char(50) output,
@Kontr_name char(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT @Sklad_name=(Наименование)
FROM dbo.МестаХранения
WHERE idсклада=@SkladNumber
SELECT @Tovar_name=(Наименование)
FROM dbo.Товары
WHERE idтовара=@TovarNumber
SELECT @Kontr_name=(Наименование)
FROM dbo.Контрагенты
WHERE idконтрагента=@KontrNumber
END
(Прог.код 14, Создание хранимой процедуры «sp_sum_prodaj»)
CREATE PROCEDURE [dbo].[Otch_sklad]
AS
BEGIN
SET NOCOUNT ON;
SELECT МестаХранения.[idсклада] as ID, Наименование,Расположение,МОЛ
FROM МестаХранения
GROUP BY МестаХранения.[idсклада], Наименование,Расположение,МОЛ
END
GO
(Прог.код 15, Создание хранимой процедуры «Отчет по складу»)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Otch_Tovar]
AS
BEGIN
SET NOCOUNT ON;
SELECT Товары.[idтовара] as idтовара, Артикул,Наименование,ЕдИзмерения,Цена
FROM Товары
GROUP BY Товары.[idтовара], idтовара,Артикул,Наименование,ЕдИзмерения,Цена
END
GO
(Прог.код 16, Создание хранимой процедуры «Отчет товара»)
Create PROCEDURE [dbo].[Otch_Kontr]
AS
BEGIN
SET NOCOUNT ON;
SELECT Контрагенты.[idконтрагента] as idконтрагента, Наименование,ВидКонтрагента,Адрес,Телефон,ФИОконтактнЛица
FROM Контрагенты
GROUP BY Контрагенты.[idконтрагента], Наименование,ВидКонтрагента,Адрес,Телефон,ФИОконтактнЛица
END
(Прог.код 17, Создание хранимой процедуры «Otch_Kontr»)
Заключение
Во время прохождения производственной практики, закрепил навыки работы с Visual Studio C# и Sql Server. Научился работать с базой данных.
В курсовом проекте были рассмотрены следующие вопросы:
· Разработана логическая схема работы базы данных
· Создана физическая база данных
· Написана программа, пригодная для доступа к таблицам базы данных, изменению и удалению записей, вызову хранимых процедур и оформления отчётов.
Задачей проекта являлась разработка программного продукта «База данных “Склад”».
Для достижения данной цели в первом разделе курсового проекта были сформулированы логическая и физическая схемы базы данных. Во второй части курсового проекта сначала была создана и настроенная серверная часть проекта, с использованием таблиц SQL Server. Позже была создана и настроенная клиентская часть проекта, с использованием хранимых процедур и триггеров SQL Server и компонентов формы Visual Studio.
Полученную программу можно использовать для контроля работы склада, управления поставками, списком контрагентов и товаров.
Узнал структуру и род деятельности предприятия, ознакомился с распорядком. Дисциплинарных замечаний не имел, соблюдал все установленные правила. Серьезно относился к своей работе и нес за нее полную ответственность.
В процессе прохождения практики занимался сборкой компьютеров, починкой аппаратуры и установкой программного обеспечения. Вел наблюдения за работой машин, принимал участие в основной работе. Занимался обеспечением информационной безопасности. Беспрекословно выполнял все задачи данные руководителем. Занимался созданием базы данных для удобной и быстрой работы с занесением очередников в таблицу и созданием отчётов.