Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РБД Курсовая Алеф.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
876.09 Кб
Скачать

3.Концептуальная модель

Концептуальная модель - это отражение предметной области, для которой разрабатывается база данных.

Построение модели данных предполагает определение сущностей и атрибутов, т. е. необходимо определить, какая информация будет храниться в конкретной сущности или атрибуте. Сущность можно определить как объект, событие или концепцию, информация о которых должна сохраняться. Сущности должны иметь наименование с четким смысловым значением, именоваться существительным в единственном числе, не носить "технических" наименований и быть достаточно важными для того, чтобы их моделировать. Именование сущности в единственном числе облегчает в дальнейшем чтение модели. Фактически имя сущности дается по имени ее экземпляра. Концептуальную модель выполним в виде диаграммы в среде моделирования Power Designer, которая представлена на рисунке 3.1.

Модель представлена как совокупность следующих сущностей:

  • Договор

  • Клиент

  • Сотрудник

  • Товар

  • Секция

  • Вид секции

  • Накладная на списание

  • Накладная на убытие

  • Накладная на приход

  • Комиссия

  • Состав комиссии

Рисунок 3.1 – Концептуальная модель

4.Физическая модель

Рисунок 4.1 – Физическая модель

4.1. Хранимые процедуры

4.1.1. Добавление нового клиента

CREATE PROCEDURE [dbo].[Insert_Client](@Surname varchar(50),@Name varchar(20), @Patronymic varchar(30), @City varchar(25),@Street varchar(30),@INN varchar(12),@Tel varchar(20),@Fax varchar(20))

AS

Insert into Client(Surname, Name, Patronymic, City, Street, INN, Tel, Fax)Values(@Surname, @Name, @Patronymic, @City, @Street, @INN, @Tel, @Fax);

4.1.2. Добавление нового договора

CREATE PROCEDURE Insert_Dogovor

(@SurnameCl varchar(50),@NameCl varchar(20), @PatronimycCl varchar(30), @Date_Zacl date, @Srok_deystviya date, @Type_Sec varchar(30))

AS

Insert into Dogovor(Client_ID, Date_Zacl, Srok_deystviya,ID_Type_Section)

Values((SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @SurnameCl AND Name LIKE @NameCl AND Patronymic LIKE @PatronimycCl), @Date_Zacl , @Srok_deystviya, (SELECT DISTINCT ID_Type_Section FROM Type_Section WHERE Type_Section LIKE @Type_Sec));

4.1.3. Добавление нового сотрудника

CREATE PROCEDURE Insert_Employee(@Surname varchar(50), @Name varchar(50), @Patronymic varchar(25), @Post varchar(30), @INN varchar(12), @Strah_sved varchar(12), @Passport varchar(10), @Tel varchar(20)

AS

Insert into Employee(Surname, Name, Patronymic, Post, INN, Strah_sved, Passport, Tel)

Values(@Surname, @Name, @Patronymic, @Post, @INN, @Strah_sved, @Passport, @Tel);

4.1.4. Добавление новой накладной на приход

CREATE PROCEDURE Insert_PrihNakl(@Client_Surname varchar(50), @Client_Name varchar(50), @Summ money, @Date_Start date, @EmpSur varchar(50), @EmpName varchar(50))

AS

Insert into Prihod (ID_Client, Emp_ID, Summ, Date_start)

Values (

(SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @Client_Surname AND Name LIKE @Client_Name ),

(SELECT DISTINCT Emp_ID FROM Employee WHERE Surname LIKE @EmpSur AND Name LIKE @EmpName),@Summ, @Date_Start);

4.1.5. Добавление новой позиции в накладную на приход и изменение суммы в накладной

CREATE PROCEDURE Insert_PrihNaklPosition(@ID_Nakl_Prihod int, @Client_Surname varchar(50), @Client_Name varchar(50), @Product_Name varchar(50), @Numb_Section int, @Capacity int, @Stell int, @Date_Start date, @Date_Fin date, @Summ money)

AS

BEGIN TRAN

Insert into Prih_Nakl (ID_Nakl_Prihod, ID_Product, NumbSection, Capacity, Stell, Date_fin, Summ)

Values ((SELECT DISTINCT ID_Nakl_Prihod FROM Prihod WHERE ID_Client = (SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @Client_Surname AND Name LIKE @Client_Name) AND

Date_start = @Date_start),

(SELECT DISTINCT ID_Prod FROM Product WHERE Name LIKE @Product_Name),@Numb_Section, @Capacity, @Stell, @Date_Fin, @Summ);

Update Prihod Set Summ = Summ + @Summ WHERE Prihod.ID_Nakl_Prihod = @ID_Nakl_Prihod;

COMMIT TRAN

4.1.6. Добавление нового товара

CREATE PROCEDURE Insert_Product (@Name varchar(50), @Tara varchar(20), @Capacity int)

AS Insert into Product(Name, Tara, Capacity) Values(@Name, @Tara, @Capacity)

4.1.7. Добавление новой секции

CREATE PROCEDURE Insert_Section (@VAR varchar(50), @NumStell int, @Polka int,@Section_Cap int, @Free_Place int)

AS Insert into Section(ID_Type_Section, NumStell, Polka, Section_Cap, FreePlace) Values ((SELECT DISTINCT ID_Type_Section FROM Type_Section WHERE Type_Section LIKE @VAR), @NumStell, @Polka, @Section_Cap, @Free_Place)

4.1.8. Добавление новой накладной на списание

CREATE PROCEDURE InsertSpisanie(@Client_Surname varchar(50), @Client_Name varchar(50), @Date_Start date, @EmpSur varchar(50), @EmpName varchar(50), @ALLComp money, @Comission_ID int) AS

Insert into Spisanie (ID_Client, ID_Emp, Date_Start, ALLCompensation, Comission_ID) Values (

(SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @Client_Surname AND Name LIKE @Client_Name ),

(SELECT DISTINCT Emp_ID FROM Employee WHERE Surname LIKE @EmpSur AND Name LIKE @EmpName), @Date_Start, @ALLComp, @Comission_ID);

4.1.9. Добавление новой позиции в накладную на списание и изменение суммы компенсации в накладной

CREATE PROCEDURE InsertSpisPosition (@Date_Start date, @Client_Surname varchar(50), @Client_Name varchar(50), @Product_Name varchar(50), @Numb_Section int, @Capacity int, @Stell int, @Comp money, @ID_Nakl_Spis int) AS BEGIN TRAN

Insert into Spis_Nakl(ID_Nakl_Spis, ID_Prod, NumbSec, Capacity, Stell, Compensation)

Values ((SELECT DISTINCT ID_Nakl_Spis FROM Spisanie WHERE ID_Client = (SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @Client_Surname AND Name LIKE @Client_Name)

AND Date_Start = @Date_Start),

(SELECT DISTINCT ID_Prod FROM Product WHERE Name LIKE @Product_Name),@Numb_Section, @Capacity, @Stell, @Comp);

Update Spisanie Set ALLCompensation = ALLCompensation + @Comp WHERE Spisanie.ID_Nakl_Spis = @ID_Nakl_Spis;

COMMIT TRAN

4.1.10. Добавление новой накладной на убытие

CREATE PROCEDURE InsertUbytie(@Client_Surname varchar(50), @Client_Name varchar(50), @Date_Start date, @EmpSur varchar(50), @EmpName varchar(50))

AS

Insert into Ubytie (ID_Client, Emp_ID, Date_start)Values (

(SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @Client_Surname AND Name LIKE @Client_Name ),

(SELECT DISTINCT Emp_ID FROM Employee WHERE Surname LIKE @EmpSur AND Name LIKE @EmpName), @Date_Start);

4.1.11. Добавление новой позиции в накладную на убытие

CREATE PROCEDURE InsertUbPosition(@Date_Start date, @ID_Nakl_Ub int, @Client_Surname varchar(50), @Client_Name varchar(50), @Product_Name varchar(50), @Numb_Section int, @Capacity int, @Stell int)

AS

BEGIN TRAN

Insert into Ub_Nakl(ID_Nakl_Ub, ID_Prod, NumbSec, Capacity, Stell) Values ((SELECT DISTINCT ID_Nakl_Ub FROM Ubytie WHERE ID_Client = (SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @Client_Surname AND Name LIKE @Client_Name) AND Date_Start = @Date_Start),

(SELECT DISTINCT ID_Prod FROM Product WHERE Name LIKE @Product_Name),@Numb_Section, @Capacity, @Stell);

COMMIT TRAN

4.2.1. Удаление клиента

CREATE PROCEDURE Delete_Client

@Client_ID int

AS delete from Client where Client_ID = @Client_ID;

4.2.2. Удаление договора

CREATE PROCEDURE Delete_Dogovor

@ID_Dogovor int

AS delete from Dogovor where ID_Dogovor = @ID_Dogovor;

4.2.3. Удаление сотрудника

ALTER PROCEDURE Delete_Employee

@Emp_ID int

AS delete from Employee where Emp_ID = @Emp_ID;

4.2.4. Удаление накладной на приход и всех позиций в ней

CREATE PROCEDURE Delete_NaklPrih

@ID_Nakl_Prihod int

AS

BEGIN TRAN

Delete from Prih_Nakl where ID_Nakl_Prihod = @ID_Nakl_Prihod;

Delete from Prihod where ID_Nakl_Prihod = @ID_Nakl_Prihod;

COMMIT TRAN

4.2.5. Удаление позиции из накладной на приход и обновление суммы в накладной

CREATE PROCEDURE Delete_PrihNaklPosition(@ID_Soderganie_nakl int, @DelSumm money, @ID_Nakl_Prihod int)

AS

BEGIN TRAN

DELETE FROM Prih_Nakl WHERE ID_Soderganie_nakl = @ID_Soderganie_nakl;

UPDATE Prihod SET Summ = Summ - @DelSumm WHERE Prihod.ID_Nakl_Prihod = @ID_Nakl_Prihod;

COMMIT TRAN

4.2.6. Удаление накладной на списание и всех позиций из накладной

CREATE PROCEDURE Delete_NaklSpis

@ID_Nakl_Spis int

AS

BEGIN TRAN

Delete from Spis_Nakl where ID_Nakl_Spis = @ID_Nakl_Spis;

Delete from Spisanie where ID_Nakl_Spis = @ID_Nakl_Spis;

COMMIT TRAN

4.2.7. Удаление позиции из накладной на списание и изменение суммы компенсации в накладной

CREATE PROCEDURE Delete_SpisNaklPosition(@ID_Soderganie_nakl int, @DelComp money, @ID_Nakl_Spis int)

AS

BEGIN TRAN

DELETE FROM Spis_Nakl WHERE ID_Soderg_nakl = @ID_Soderganie_nakl;

UPDATE Spisanie

SET ALLCompensation = ALLCompensation - @DelComp WHERE Spisanie.ID_Nakl_Spis = @ID_Nakl_Spis;

COMMIT TRAN

4.2.8. Удаление накладной на убытие и всех позиций из накладной

CREATE PROCEDURE Delete_NaklUb

@ID_Nakl_Ub int

AS

BEGIN TRAN

Delete from Ub_Nakl where ID_Nakl_Ub = @ID_Nakl_Ub;

Delete from Ubytie where ID_Nakl_Ub= @ID_Nakl_Ub;

COMMIT TRAN

4.2.9. Удаление позиции из накладной на убытие

CREATE PROCEDURE Delete_UbNaklPosition

@ID_Soderg_nakl int

AS

BEGIN

DELETE FROM Ub_Nakl WHERE ID_Soderg_nakl = @ID_Soderg_nakl;

END

4.2.10. Удаление продукта

CREATE PROCEDURE Delete_Prod

@ID_Prod int

AS

delete from Product where ID_Prod = @ID_Prod;

4.2.11. Удаление секции

CREATE PROCEDURE Delete_Section

@Section_ID int

AS

delete from Section where Section_ID = @Section_ID;

4.3.1. Изменение клиента

CREATE PROCEDURE Update_Client(@Client_ID int, @Surname varchar(50),@Name varchar(20), @Patronymic varchar(30), @City varchar(25), @Street varchar(30), @INN varchar(12), @Tel varchar(20), @Fax varchar(20))

AS

update Client

set Surname = @Surname, Name = @Name, Patronymic = @Patronymic, City = @City, Street = @Street, INN= @INN, Tel = @Tel, Fax = @Fax

where Client_ID = @Client_ID;

4.3.2. Изменение договора

CREATE PROCEDURE Update_Dogovor (@SurnameCl varchar(50), @NameCl varchar(20), @PatronimycCl varchar(30), @ID_Dogovor int, @Date_Zacl date, @Srok_deystviya date, @Type_Sec varchar(30))

AS

update Dogovor set Client_ID = (SELECT DISTINCT Client_ID FROM Client WHERE Surname LIKE @SurnameCl AND Name LIKE @NameCl AND Patronymic LIKE @PatronimycCl), Date_Zacl = @Date_Zacl, Srok_deystviya = @Srok_deystviya, ID_Type_Section = (SELECT DISTINCT ID_Type_Section FROM Type_Section WHERE Type_Section LIKE @Type_Sec)

where ID_Dogovor = @ID_Dogovor;

4.3.3. Изменение сотрудника

CREATE PROCEDURE Update_Employee(@Emp_ID int, @Surname varchar(50), @Name varchar(50), @Patronymic varchar(25), @Post varchar(30), @INN varchar(12),@Strah_sved varchar(12), @Passport varchar(10), @Tel varchar(20))

AS

update Employee set Surname = @Surname, Name = @Name, Patronymic = @Patronymic, Post = @Post, INN = @INN, Strah_sved = @Strah_sved, Passport = @Passport, Tel = @Tel

where Emp_ID = @Emp_ID;

4.3.4. Изменение продукта

CREATE PROCEDURE Update_Prod(@ID_Prod int, @Name varchar(50), @Tara varchar(20), @Capacity int)

AS

update Product set Name = @Name, Tara = @Tara, Capacity = @Capacity

where ID_Prod = @ID_Prod;

4.3.5. Изменение секции

CREATE PROCEDURE Update_Section

(@VAR varchar(50), @Section_ID int, @NumStell int, @Polka int, @Section_Cap int, @FreePlace int)

AS

update Section

set ID_Type_Section = (SELECT DISTINCT ID_Type_Section FROM Type_Section WHERE Type_Section LIKE @VAR), NumStell = @NumStell, Polka = @Polka, Section_Cap = @Section_Cap , FreePlace = @FreePlace

where Section_ID = @Section_ID;

4.3.6. Изменение накладной на приход

CREATE PROCEDURE Update_Prihod (@ID_Nakl_Prihod int, @Client_Surname varchar(50), @Client_Name varchar(50), @Summ money, @Date_Start date, @EmpSur varchar(50), @EmpName varchar(50))

AS

update Prihod

set ID_Client = (SELECT Client_ID FROM Client WHERE Surname = @Client_Surname AND Name = @Client_Name), Summ = @Summ, Date_start = @Date_Start , Emp_ID = (SELECT Emp_ID FROM Employee WHERE Surname = @EmpSur AND Name = @EmpName)

where ID_Nakl_Prihod = @ID_Nakl_Prihod;

4.3.7. Изменение позиции в накладной на приход и изменение суммы в накладной

CREATE PROCEDURE Update_PrihNaklPosition (@ID_Soderganie_nakl int, @ID_Nakl_Prihod int, @Client_Surname varchar(50), @Client_Name varchar(50), @Product_Name varchar(50), @Numb_Section int, @Capacity int, @Summ money, @Stell int, @Date_Fin date, @NewSumm money, @OldSumm money)

AS

BEGIN TRAN

Update Prih_Nakl SET ID_Nakl_Prihod = @ID_Nakl_Prihod, ID_Product = (SELECT ID_Prod FROM Product WHERE Name LIKE @Product_Name), NumbSection = @Numb_Section, Capacity = @Capacity, Stell = @Stell, Date_fin = @Date_Fin, Summ = @Summ

WHERE ID_Soderganie_nakl = @ID_Soderganie_nakl

UPDATE Prihod SET Summ = Summ + @NewSumm - @OldSumm WHERE ID_Nakl_Prihod = @ID_Nakl_Prihod;

COMMIT TRAN

4.3.8. Изменение накладной на убытие

CREATE PROCEDURE Update_Ubytie

(@ID_Nakl_Ub int, @Client_Surname varchar(50), @Client_Name varchar(50), @Date_Start date, @EmpSur varchar(50), @EmpName varchar(50))

AS

update Ubytie set ID_Client = (SELECT Client_ID FROM Client WHERE Surname = @Client_Surname AND Name = @Client_Name), Date_start = @Date_Start, Emp_ID = (SELECT Emp_ID FROM Employee WHERE Surname = @EmpSur AND Name = @EmpName)

where ID_Nakl_Ub = @ID_Nakl_Ub;

4.3.9. Изменение позиции в накладной на убытие

CREATE PROCEDURE Update_UbNaklPosition

(@ID_Soderganie_nakl int, @ID_Nakl_Ub int, @Client_Surname varchar(50), @Client_Name varchar(50), @Product_Name varchar(50), @Numb_Section int, @Capacity int, @Stell int)

AS

BEGIN TRAN

Update Ub_Nakl

SET ID_Nakl_Ub = @ID_Nakl_Ub, ID_Prod = (SELECT ID_Prod FROM Product WHERE Name LIKE @Product_Name), NumbSec = @Numb_Section, Capacity = @Capacity, Stell = @Stell

WHERE ID_Soderg_nakl = @ID_Soderganie_nakl

COMMIT TRAN

4.3.10. Изменение накладной на списание

CREATE PROCEDURE Update_Spisanie(@ID_Nakl_Spis int,@Client_Surname varchar(50),@Client_Name varchar(50),@Date_Start date,@EmpSur varchar(50),@EmpName varchar(50),@Comission_ID int)

AS

update Spisanie

set ID_Client = (SELECT Client_ID FROM Client WHERE Surname = @Client_Surname AND Name = @Client_Name), Date_Start = @Date_Start, ID_Emp = (SELECT Emp_ID FROM Employee

WHERE Surname = @EmpSur AND Name = @EmpName), Comission_ID = @Comission_ID where ID_Nakl_Spis = @ID_Nakl_Spis;

4.3.11. Изменение накладной на списание и изменение суммы компенсации в накладной

CREATE PROCEDURE Update_SpisNaklPosition

@ID_Soderganie_nakl int,@ID_Nakl_Spis int,@Client_Surname varchar(50),@Client_Name varchar(50),@Product_Name varchar(50),@Numb_Section int,@Capacity int,@Stell int,@NewCompensation money,@OldCompensation money

AS

BEGIN TRAN

Update Spis_Nakl SET ID_Nakl_Spis = @ID_Nakl_Spis, ID_Prod = (SELECT ID_Prod FROM Product WHERE Name LIKE @Product_Name), NumbSec = @Numb_Section, Capacity = @Capacity, Stell = @Stell, Compensation = @NewCompensation WHERE ID_Soderg_nakl = @ID_Soderganie_nakl UPDATE Spisanie SET ALLCompensation = ALLCompensation + @NewCompensation - @OldCompensation WHERE ID_Nakl_Spis = @ID_Nakl_Spis;

COMMIT TRAN

4.4.1. Получение только действительных на сегодняшний день договоров

CREATE PROCEDURE SelectDeystvDogovor

@datetoday date

AS

SELECT ID_Dogovor, Client.Surname, Client.Name, Client.Patronymic, Date_Zacl, Srok_Deystviya, Type_section FROM Dogovor, Type_section, Client

WHERE Dogovor.Client_ID = Client.Client_ID AND Type_Section.ID_Type_Section = Dogovor.ID_Type_Section AND Srok_deystviya > @datetoday

4.4.2. Получение пустых секций

CREATE PROCEDURE Search_Pustye

AS

SELECT Section_ID, Type_Section, NumStell, Polka, Section_Cap, FreePlace FROM Section, Type_Section WHERE Section.ID_Type_Section = Type_Section.ID_Type_Section AND FreePlace = Section_Cap

4.4.3 Получение неполных секций

CREATE PROCEDURE Search_Nezapolnennye

AS

SELECT Section_ID, Type_Section, NumStell, Polka, Section_Cap, FreePlace FROM Section, Type_Section WHERE Section.ID_Type_Section = Type_Section.ID_Type_Section AND FreePlace < Section_Cap AND FreePlace > 0

4.4.4 Получение полных секций

CREATE PROCEDURE Search_Polnye

SELECT Section_ID, Type_Section, NumStell, Polka, Section_Cap, FreePlace FROM Section, Type_Section WHERE Section.ID_Type_Section = Type_Section.ID_Type_Section AND FreePlace = Section_Cap

4.4.5. Получение списка членов комиссии

ALTER PROCEDURE [dbo].[SelectSost]

@ID_Comission int

AS

SELECT Comission.ID_Com, Employee.Surname, Employee.Name, Employee.Patronymic FROM Sost_Comission, Employee, Comission WHERE Employee.Emp_ID = Sost_Comission.First AND Comission.ID_Sost = Sost_Comission.ID_Sost AND Comission.ID_Com = @ID_Comission UNION

SELECT Comission.ID_Com, Employee.Surname, Employee.Name, Employee.Patronymic FROM Sost_Comission, Employee, Comission WHERE Employee.Emp_ID = Sost_Comission.Second AND Comission.ID_Sost = Sost_Comission.ID_Sost AND Comission.ID_Com = @ID_Comission UNION

SELECT Comission.ID_Com, Employee.Surname, Employee.Name, Employee.Patronymic FROM Sost_Comission, Employee, Comission WHERE Employee.Emp_ID = Sost_Comission.Third AND Comission.ID_Sost = Sost_Comission.ID_Sost AND Comission.ID_Com = @ID_Comission

4.5. Триггеры

4.5.1.Триггер на запрет ввода сотрудника, который уже существует в базе данных

CREATE TRIGGER StopDoubleEmpInsert

ON Employee

INSTEAD OF INSERT

AS

BEGIN

DECLARE

@insINN varchar(12), @Surname varchar(50), @Name varchar(20), @Patronymic varchar(30), @Post varchar(30), @Strah_Sved varchar(12), @Passport varchar(10), @Tel varchar(15)

SELECT @insINN = INN FROM inserted;

SELECT @Name = Name From inserted;

SELECT @Patronymic = Patronymic From inserted;

SELECT @Post = Post From inserted;

SELECT @Strah_Sved = Strah_sved From inserted;

SELECT @Tel = Tel From inserted;

SELECT @Passport = Passport From inserted;

IF @insINN IN (SELECT INN FROM Employee)

BEGIN

rollback

print 'Вводимый сотрудник уже существует!'

END

ELSE

BEGIN

INSERT INTO Employee (Surname, Name, Patronymic, Post, INN, Strah_sved, Passport, Tel)

VALUES (@Surname, @Name, @Patronymic, @Post, @insINN, @Strah_sved, @Passport, @Tel)

END

END

4.5.2.Запрет ввода клиента, который уже существует в базе данных

ALTER TRIGGER StopDoubleClientInsert

ON Client

INSTEAD OF INSERT

AS

BEGIN

DECLARE

@insINN varchar(12), @Surname varchar(50), @Name varchar(20), @Patronymic varchar(30), @City varchar(25), @Street varchar(30), @Tel varchar(15), @Fax varchar(15)

SELECT @insINN = INN FROM inserted;

SELECT @Name = Name From inserted;

SELECT @Patronymic = Patronymic From inserted;

SELECT @City = City From inserted;

SELECT @Street = Street From inserted;

SELECT @Tel = Tel From inserted;

SELECT @Fax = Fax From inserted;

IF @insINN IN (SELECT INN FROM Client)

BEGIN

rollback

print 'Вводимый клиент уже существует!'

END

ELSE

BEGIN

INSERT INTO Client (Surname, Name, Patronymic, City, Street, INN, Tel, Fax)

VALUES (@Surname, @Name, @Patronymic, @City, @Street, @insINN, @Tel, @Fax)

END

END

4.5.3. Объединение дублирующего товара в накладной на приход

CREATE TRIGGER IntegrateProduct

ON Prih_Nakl

INSTEAD OF INSERT

AS

BEGIN

Declare @NewCapacityProd int, @NewNumbSection int, @NewProdID int, @NumNakl int, @NewSumm int, @NewStell int, @Date_fin date, @Summ int, @ID_Soderganie_nakl int

SELECT @ID_Soderganie_nakl = ID_Soderganie_nakl FROM inserted;

SELECT @NumNakl = ID_Nakl_Prihod FROM inserted;

SELECT @NewProdID = ID_Product FROM inserted;

SELECT @NewNumbSection = NumbSection FROM inserted;

SELECT @NewCapacityProd = Capacity FROM inserted;

SELECT @NewStell = Stell FROM inserted;

SELECT @Date_fin = Date_fin FROM inserted;

SELECT @Summ = Summ FROM inserted;

SELECT @NewSumm = Summ FROM inserted;

IF @NewProdID IN (SELECT ID_Product FROM Prih_Nakl WHERE ID_Nakl_Prihod = @NumNakl) AND @NewNumbSection IN (SELECT NumbSection FROM Prih_Nakl WHERE ID_Nakl_Prihod = @NumNakl)

BEGIN

UPDATE Prih_Nakl SET Capacity = Capacity + @NewCapacityProd, Summ = Summ + @NewSumm WHERE Prih_Nakl.ID_Product = @NewProdID;

END

ELSE

BEGIN

INSERT INTO Prih_Nakl (ID_Nakl_Prihod, ID_Product, NumbSection, Capacity, Stell, Date_fin, Summ)

Values (@NumNakl, @NewProdID, @NewNumbSection,

@NewCapacityProd, @NewStell, @Date_fin, @Summ)

END

END

4.5.4. Изменение свободного места на складе после добавления позиции в накладную на приход

CREATE TRIGGER UpdateSectionFree_place

ON Prih_Nakl

AFTER INSERT

AS

BEGIN

DECLARE @CapacityProd int,@ID_Nakl int,@Free_Place int

Select @CapacityProd = Capacity FROM inserted;

Select @ID_Nakl = ID_Soderganie_nakl FROM inserted;

Select @Free_Place = Section.FreePlace From Section WHERE Section.Section_ID = (Select NumbSection From Prih_Nakl Where ID_Soderganie_nakl = @ID_Nakl);

IF @Free_Place <> 0

BEGIN

UPDATE Section SET FreePlace = FreePlace - @CapacityProd WHERE Section.Section_ID = (SELECT NumbSection FROM Prih_Nakl WHERE ID_Soderganie_nakl = @ID_Nakl);

END

END

4.5.5. Изменение свободного места на складе после изменения позиции в накладной на приход

CREATE TRIGGER UpdateSectionFree_placeafterUpdate

ON Prih_Nakl

AFTER UPDATE

AS

BEGIN

Declare @NewCapacityProd int, @OldCapacityProd int, @ID_Nakl int, @Free_Place int, @OldSec_ID int,@NewSec_ID int

Select @OldSec_ID = NumbSection From deleted;

Select @NewSec_ID = NumbSection From inserted;

Select @OldCapacityProd = Capacity From deleted;

Select @NewCapacityProd = Capacity FROM inserted;

Select @ID_Nakl = ID_Soderganie_nakl FROM inserted ;

Select @Free_Place = Section.FreePlace From Section WHERE Section.Section_ID = (Select NumbSection From Prih_Nakl Where ID_Soderganie_nakl = @ID_Nakl);

IF @Free_Place <> 0 AND @OldSec_ID = @NewSec_ID

BEGIN

Update Section Set FreePlace = FreePlace + @OldCapacityProd - @NewCapacityProd WHERE Section.Section_ID = (Select NumbSection From Prih_Nakl Where ID_Soderganie_nakl = @ID_Nakl);

END

IF @Free_Place <> 0 AND @OldSec_ID <> @NewSec_ID

BEGIN

Update Section Set FreePlace = FreePlace + @OldCapacityProd WHERE Section.Section_ID = @OldSec_ID;

Update Section Set FreePlace = FreePlace - @NewCapacityProd WHERE Section.Section_ID = @NewSec_ID;

END

END

4.5.6. Изменение свободного места на складе после добавления позиции в накладной на убытие

CREATE TRIGGER UpdateSectionFree_placeAfterInsertUb

ON Ub_Nakl

AFTER Insert

AS

BEGIN

Declare @CapacityProd int, @ID_Nakl int, @Free_Place int

Select @CapacityProd = Capacity FROM inserted;

Select @ID_Nakl = ID_Soderg_nakl FROM inserted;

Select @Free_Place = Section.FreePlace From Section WHERE Section.Section_ID = (Select NumbSec From Ub_Nakl Where ID_Soderg_nakl = @ID_Nakl);

IF @Free_Place <> 0

BEGIN

Update Section Set FreePlace = FreePlace + @CapacityProd WHERE Section.Section_ID = (Select NumbSec From Ub_Nakl Where ID_Soderg_nakl = @ID_Nakl);

END

END

4.5.7. Изменение свободного места на складе после изменения позиции в накладной на убытие

CREATE TRIGGER UpdateSectionFree_placeafterUpdateUb

ON Ub_Nakl

AFTER UPDATE

AS

BEGIN

Declare @NewCapacityProd int, @OldCapacityProd int, @ID_Nakl int, @Free_Place int, @OldSec_ID int, @NewSec_ID int

Select @OldSec_ID = NumbSec From deleted;

Select @NewSec_ID = NumbSec From inserted;

Select @OldCapacityProd = Capacity From deleted;

Select @NewCapacityProd = Capacity FROM inserted;

Select @ID_Nakl = ID_Soderg_nakl FROM inserted ;

Select @Free_Place = Section.FreePlace From Section WHERE Section.Section_ID = (Select NumbSec From Ub_Nakl Where ID_Soderg_nakl = @ID_Nakl);

IF @Free_Place <> 0

BEGIN

Update Section Set FreePlace = FreePlace - @OldCapacityProd + @NewCapacityProd WHERE Section.Section_ID = (Select NumbSec From Ub_Nakl Where ID_Soderg_nakl = @ID_Nakl);

END

IF @OldSec_ID <> @NewSec_ID

BEGIN

Update Section Set FreePlace = FreePlace - @OldCapacityProd WHERE Section.Section_ID = @OldSec_ID;

Update Section Set FreePlace = FreePlace + @NewCapacityProd WHERE Section.Section_ID = @NewSec_ID;

END

END

4.5.8. Изменение свободного места на складе после добавления позиции в накладную на списание

CREATE TRIGGER UpdateSectionFree_placeAfterInsertSpis

ON Spis_Nakl

AFTER INSERT

AS

BEGIN

Declare @CapacityProd int, @ID_Nakl int, @Free_Place int

Select @CapacityProd = Capacity FROM inserted;

Select @ID_Nakl = ID_Soderg_nakl FROM inserted;

Select @Free_Place = Section.FreePlace From Section WHERE Section.Section_ID = (Select NumbSec From Spis_Nakl Where ID_Soderg_nakl = @ID_Nakl);

IF @Free_Place <> 0

BEGIN

Update Section Set FreePlace = FreePlace + @CapacityProd WHERE Section.Section_ID = (Select NumbSec From Spis_Nakl Where ID_Soderg_nakl = @ID_Nakl);

END

END

4.5.9. Изменение свободного места на складе после изменения позиции в накладной на списание

CREATE TRIGGER UpdateSectionFree_placeafterUpdateSpis

ON Spis_Nakl

AFTER UPDATE

AS

BEGIN

Declare @NewCapacityProd int,

@OldCapacityProd int, @ID_Nakl int, @Free_Place int, @OldSec_ID int, @NewSec_ID int

Select @OldSec_ID = NumbSec From deleted;

Select @NewSec_ID = NumbSec From inserted;

Select @OldCapacityProd = Capacity From deleted;

Select @NewCapacityProd = Capacity FROM inserted;

Select @ID_Nakl = ID_Soderg_nakl FROM inserted ;

Select @Free_Place = Section.FreePlace From Section WHERE Section.Section_ID = (Select NumbSec From Ub_Nakl Where ID_Soderg_nakl = @ID_Nakl);

IF @Free_Place <> 0

BEGIN

Update Section Set FreePlace = FreePlace - @OldCapacityProd + @NewCapacityProd WHERE Section.Section_ID = (Select NumbSec From Ub_Nakl Where ID_Soderg_nakl = @ID_Nakl);

END

IF @OldSec_ID <> @NewSec_ID

BEGIN

Update Section Set FreePlace = FreePlace - @OldCapacityProd WHERE Section.Section_ID = @OldSec_ID;

Update Section Set FreePlace = FreePlace + @NewCapacityProd WHERE Section.Section_ID = @NewSec_ID;

END

END

create index FreePlace on Section ([FreePlace])

create unique index Наименование on Product ([Name])

create unique index ФИО on Employee ([Surname],[Name],[Patronymic])

create unique index ФИО on Client ([Surname],[Name],[Patronymic])