Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Формирование отношений базы данных
При анализе работы с информацией были выявлены следующие отношения, необходимые для хранения имеющихся данных: 1. отношение «Город». Содержится информация о названиях городов. Необходимые атрибуты: - идентификатор картежа «id_gorod», является первичным ключом для связи с другими отношениями; - значение атрибута «город» (название города). - 2. отношение «Адрес». Содержится информация об адресах фирм подрядчиков, с которыми заключаются договора. Необходимые атрибуты: - идентификатор картежа «id_adres», является первичным ключом для связи с другими отношениями; - значение атрибута «индекс» (индекс города, в котором находится орг. подрядчик); - значение атрибута «улица» (название улицы); - значение атрибута «дом» (номер дома);
- - значение атрибута «id_gorod», является внешним ключом для связи картежа с отношением «Город»; - значение атрибута «id_nazv_org», является внешним ключом для связи картежа с отношением «Название_орг».
3. отношение «Название_орг». Содержится информация об организации подрядчике и его реквизитах. Необходимые атрибуты: - идентификатор картежа «id_nazv_org», является первичным ключом для связи с другими отношениями; - значение атрибута «название» (название организации); - значение атрибута «ИНН» (ИНН организации); - значение атрибута «КПП» (КПП организации); - значение атрибута «ОКПО» (ОКПО организации); - значение атрибута «ОГРН» (ОГРН организации). 4. отношение «Сотрудники». Содержится информация о сотрудниках организации подрядчике, с которыми заключается договор на работы. Необходимые атрибуты: - идентификатор картежа «id_sotrud», является первичным ключом для связи с другими отношениями; - значение атрибута «фамилия» (фамилия сотрудника); - значение атрибута «имя» (имя сотрудника); - значение атрибута «отчество» (отчество сотрудника); - значение атрибута «id_dolgnost», является внешним ключом для связи картежа с отношением «Должность»; - значение атрибута «id_nazv_org», является внешним ключом для связи картежа с отношением «Название_орг».
5. отношение «Должность». Содержит информацию о должностях. Необходимые атрибуты: - идентификатор картежа «id_dolgnost», является первичным ключом для связи с другими отношениями; - значение атрибута «должность» (должность сотрудника). 6. отношение «Телефон». Содержит информацию о номерах телефона сотрудников. Необходимые атрибуты: - идентификатор картежа «id_telefon», является первичным ключом для связи с другими отношениями; - значение атрибута «номер» (номер телефона); - значение атрибута «id_kontact», является внешним ключом для связи картежа с отношением «Контакт»; - значение атрибута «id_sorud», является внешним ключом для связи картежа с отношением «Сотрудники». 7. - идентификатор картежа «id_kontact», является первичным ключом для связи с другими отношениями; - значение атрибута «контакт» (контакт номера телефона).
8. отношение «Сделка». Содержатся информация по результатам заключенных договоров. Необходимые атрибуты: - значение атрибута «id_dog», является внешним ключом для связи картежа с отношением «Договор» - значение атрибута «id_naxv_org», является внешним ключом для связи картежа с отношением «Название_орг» - идентификатор картежа «id_sdelka», является первичным ключом для связи с другими отношениями; - значение атрибута «дата_заключения» (дата, когда был заключен договор); - значение атрибута «дата_начала» (дата начала исполнения договора); - значение атрибута «дата_завершения» (дата заверения работ по договору); - значение атрибута «сумма» (стоимость работ); - значение атрибута «id_uslov», является внешним ключом для связи картежа с отношением «Условие». 9. отношение «Условие». Содержится информацию об условиях оплаты по договорам. Необходимые атрибуты: - идентификатор картежа «id_uslov», является первичным ключом для связи с другими отношениями; - значение атрибута «условие» (условие оплаты). 10.отношение «Договор». Содержится информация о номерах договоров и исполняемых по ним работ. Необходимы атрибуты: - идентификатор картежа «id_dog», является первичным ключом для связи с другими отношениями; - значение атрибута «договор» (номер договора); - значение атрибута «наименование» (необходимая работа); - значение атрибута «id_vid_rabot», является внешним ключом для связи картежа с отношением «Вид_работ». 11.отношение «Вид_работ». Содержится информация о видах работ, таких как ремонт, поставка и др. Необходимые атрибуты: - идентификатор картежа «id_vid_rabot», является первичным ключом для связи с другими отношениями; - значение атрибута «вид_работ» (вид производимых работ); - значение атрибута «источник_на_поставку» (для чего исполняется поставка: ремонт, тех перевооружение).
Рис. 47 Схема связей отношений.
§ «Город» и «Адрес» имеют связь один ко многим, так как идентификатор каждого города в отношении «Город» может иметь несколько значений атрибута в отношении «Адрес».
Рис. 48 Связь отношений «Город» и «Адрес» § «Адрес» и «Название_орг» имеют связь один к одному, так как идентификатор каждой организации в отношении «Название_орг» может иметь только одно значение атрибута в отношении «Адрес».
Рис. 49 Связь отношений «Адрес» и «Название_орг» § «Название_орг» и «Сотрудники» имеют связь один к одному, так как идентификатор каждой организации в отношении «Название_орг» может иметь только одно значение атрибута в отношении «Сотрудники».
Рис. 50 Связь отношений «Название_орг» и «Сотрудники»
§
Рис. 51 Связь отношений «Телефон» и «Сотрудники»
§ «Контакт» и «Телефон» имеют связь один ко многим, так как идентификатор каждого контакта в отношении «Контакт» может иметь несколько значений атрибута в отношении «Телефон».
Рис. 52 Связь отношений «Контакт» и «Телефон»
§ «Должность» и «Сотрудники» имеют связь ко многим, так как идентификатор должности в отношении «Должность» может иметь несколько значений атрибута в отношении «Сотрудники».
Рис. 53 Связь отношений ««Должность» и «Сотрудники»
§
Рис. 54 Связь отношений «Название_орг» и «Сделка»
§ «Условие» и «Сделка» имеют связь один ко многим, так как идентификатор каждого условия в отношении «Условие» может иметь несколько значений атрибута в отношении «Сделка».
Рис. 55 Связь отношений «Условие» и «Сделка»
§
Рис. 56 Связь отношений «Договор» и «Сделка»
§ «Договор» и «Вид_работ» имеют связь один ко многим, так как идентификатор каждого вида_работ в отношении «Вид_работ» может иметь несколько значений атрибута в отношении «Договор».
Рис. 57 Связь отношений «Договор» и «Вид_работ»
MS SQL Server представляет собой мощный полнофункциональный сервер баз данных, отличающийся высокой производительностью, быстротой освоения и удобным интерфейсом администрирования. Под его управлением могут работать базы данных в широком диапазоне от уровня среднего звена предприятия до распределенных баз масштаба корпорации. Доступ к MS SQL Server возможен из большого числа средств разработки клиентских, настольных баз данных и офисных продуктов. MS SQL Server изначально ориентирован на интеграцию с другими серверами MS Back Office, что позволяет непосредственно охватить решение комплексных задач автоматизации хранения и обработки информации, электронной почты и документооборота, построения Internet/intranet приложений и т. д. MS SQL Server работает в как в традиционных клиент-серверных платформах, так и в многоуровневых средах. Одним из основных инструментов при создании распределенных многокомпонентных приложений является Microsoft Transaction Server. Данный язык структурированных запросов был выбран по нескольким причинам: 1. из-за простоты словаря языка; 2. высокая производительность обработки запросов; 3. относительно небольшие требования к ПО; 4. дружественность интерфейса для программиста; 5. язык признан стандартом. Конечно, можно было бы использовать СУБД ORACLE, Microsoft Access или какую-либо другую СУБД, но они имеют большие недостатки, чем Microsoft SQL Server 2000. Например, для работы в ORACLE требуется большой объём оперативной памяти, да и сама СУБД рассчитана на работу с большими объемами информации, что для данной работы не требуется, т.к. завершенные договора будут удаляться, а Microsoft Access не может быстро обрабатывать данные, если их накопилось много. Поэтому данная база данных будет реализована с помощью Microsoft SQL Server.
1. таблица Город. Хранится информация о названии городов.
2. таблица Адрес. Хранится информация об адресе орг. подрядчике.
3. таблица Название_орг. Хранится информация об названии организации и ее реквизитах.
4. таблица Сотрудники. Хранится информация о сотрудниках.
5.
6. таблица Телефон. Хранится информация о телефонных номерах.
7. таблица Контакт. Хранится информация о контактах номеров телефонов.
8. таблица Сделка. Хранится информация о заключенной сделке.
9.
10. таблица Договор. Хранится информация об имеющихся договорах на определенный вид работ.
11. таблица Вид_работ. Хранится информация о видах работ.
Примечание. Все ключевые поля таблиц заполняются автоматически счётчиком.
Все механизмы по изменению данных в базе решено организовать на стороне сервера. Все механизмы выполнены с помощью хранимых процедур. Хранимые процедуры - программы, находящиеся в базе данных и выполняемые по требованию клиента. Хранимая процедура представляет собой набор совместно откомпилированных команд SQL. Одним из преимуществ хранимых процедур является то, что они выполняются непосредственно на сервере. Хранимые процедуры обладают и другими преимуществами, среди которых модульность программирования и тестирования, а также ограниченный доступ к таблицам, построенный на базе функций. Это помогает изолировать пользователей от базовых табличных структур, сокращает ошибки в операторах, обеспечивает согласованность программирования и автоматизирует выполнение сложных или неустойчивых транзакций.
На рисунке 58 представлены механизмы используемые для каждой таблицы БД, более подробно они рассмотрены ниже.
Рис 58 Реализация механизмов
· запрос «Ввод новой организации» реализуется хранимой процедурой DobavlenieBlokaOrg:
CREATE PROCEDURE DobavlenieBlokaOrg @gorod varchar(50), @org varchar(50), @INN varchar(50), @KPP varchar(50), @OKPO varchar(50), @OGRN varchar(50), @index int, @ulica varchar(50), @dom varchar(50), @office varchar(50), @dol varchar(50), @f varchar(50), @i varchar(50), @o varchar(50), @kon varchar(50), @nomer varchar(50)
AS
declare @IDGorod int declare @IDOrg int declare @IDAdres int declare @IDDol int declare @IDSotrud int declare @IDKon int declare @IDTel int
set @IDGorod=(Select id_gorod from Город where город=@gorod) if @IDGorod is null begin insert into Город (город) values (@gorod) set @IDGorod=IDENT_CURRENT('Город') end
set @IDOrg=(Select id_nazv_org from Название_орг where название=@org and ИНН=@INN and КПП=@KPP and ОКПО=@OKPO and ОГРН=@OGRN)
insert into Название_орг (название,ИНН,КПП,ОКПО,ОГРН) values (@org,@INN,@KPP,@OKPO,@OGRN) set @IDOrg=IDENT_CURRENT('Название_орг') end
set @IDAdres=(Select id_adres from Адрес where индекс=@index and улица=@ulica and дом=@dom and офис=@office and id_gorod=@IDGorod and id_nazv_org=@IDOrg) if @IDAdres is null begin insert into Адрес (индекс,улица,дом,офис,id_gorod,id_nazv_org) values (@index,@ulica,@dom,@office,@IDGorod,@IDOrg) set @IDAdres=IDENT_CURRENT('Адрес') end
set @IDDol=(Select id_dolgnost from Должность where должность=@dol) if @IDDol is null begin insert into Должность (должность) values (@dol) set @IDDol=IDENT_CURRENT('Должность') end
set @IDSotrud=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o and id_dolgnost=@IDDol and id_nazv_org=@IDOrg) if @IDSotrud is null begin insert into Сотрудники (фамилия,имя,отчество,id_dolgnost,id_nazv_org) values (@f,@i,@o,@IDDol,@IDOrg) set @IDSotrud=IDENT_CURRENT('Сотрудники') end
set @IDKon=(Select id_kontact from Контакт where контакт=@kon) if @IDKon is null begin insert into Контакт (контакт) values (@kon) set @IDKon=IDENT_CURRENT('Контакт') end
if @IDTel is null begin insert into Телефон (номер,id_kontact,id_sotrud) values (@nomer,@IDKon,@IDSotrud) set @IDTel =IDENT_CURRENT('Телефон') end GO
· запрос «Сделка» реализуется хранимой процедурой DobavlenieBlokaDogovor:
CREATE PROCEDURE DobavlenieBlokaDogovor
@vid varchar(50), @ist varchar(50), @dog varchar(50), @naimen varchar(50), @usl varchar(50), @dataZakl datetime, @dataNach datetime, @dataZav datetime, @sum varchar(50), @org varchar(50)
AS
declare @IDOrg int declare @IDVid int declare @IDDog int declare @IDUsl int declare @IDSdel int
set @IDOrg=(Select id_nazv_org from Название_орг where название=@org)
set @IDVid=(Select id_vid_rabot from Вид_работ where вид_работ=@vid and источник_на_поставку=@ist) if @IDVid is null begin insert into Вид_работ (вид_работ,источник_на_поставку)
set @IDVid=IDENT_CURRENT('Вид_работ') end
set @IDDog=(Select id_dog from Договор where договор=@dog and наименование=@naimen and id_vid_rabot=@IDVid) if @IDDog is null begin insert into Договор (договор,наименование,id_vid_rabot) values (@dog,@naimen,@IDVid) set @IDDog =IDENT_CURRENT('Договор') end
set @IDUsl=(Select id_uslov from Условие where условие=@usl) if @IDUsl is null begin insert into Условие (условие) values (@usl) set @IDUsl=IDENT_CURRENT('Условие') end
set @IDSdel =(Select id_sdelka from Сделка where id_dog=@IDDog and id_nazv_org=@IDOrg and дата_заключения=@dataZakl and дата_начала=@dataNach and дата_завершения=@dataZav and сумма=@sum and id_uslov=@IDUsl) if @IDSdel is null begin insert into Сделка (id_dog,id_nazv_org,дата_заключения,дата_начала,дата_завершения,сумма,id_uslov) values (@IDDog,@IDOrg,@dataZakl,@dataNach,@dataZav,@sum,@IDUsl) set @IDSdel =IDENT_CURRENT('Сделка') end GO
· запрос «Поиск договора по названию орг. и наименованию работ» реализуется хранимой процедурой PoiskDogovora:
CREATE PROCEDURE PoiskDogovora @naimen varchar (50), @vid varchar (50), @org varchar (50) AS SELECT * FROM Dogovor where наименование like @naimen+'%' and вид_работ like @vid+'%' and название like @org+'%' GO
· запрос «Поиск организации по №договора и наименованию работ» реализуется хранимой процедурой PoiskOrgan:
CREATE PROCEDURE PoiskOrgan @naimen varchar (50), @dog varchar (50) AS SELECT dbo.[Название_орг].id_nazv_org, dbo.[Название_орг].название, dbo.[Название_орг].ИНН, dbo.[Название_орг].КПП, dbo.[Название_орг].ОКПО, dbo.[Название_орг].ОГРН, dbo.Адрес.индекс, dbo.Город.город, dbo.Адрес.улица, dbo.Адрес.дом, dbo.Адрес.офис, dbo.Должность.должность, dbo.Сотрудники.фамилия, dbo.Сотрудники.имя, dbo.Сотрудники.отчество, dbo.Телефон.номер, dbo.Контакт.контакт FROM dbo.Адрес INNER JOIN dbo.Город ON dbo.Адрес.id_gorod = dbo.Город.id_gorod INNER JOIN dbo.[Название_орг] ON dbo.Адрес.id_nazv_org = dbo.[Название_орг].id_nazv_org INNER JOIN dbo.Сотрудники ON dbo.[Название_орг].id_nazv_org = dbo.Сотрудники.id_nazv_org INNER JOIN
dbo.Телефон ON dbo.Сотрудники.id_sotrud = dbo.Телефон.id_sotrud INNER JOIN dbo.Контакт ON dbo.Телефон.id_kontact = dbo.Контакт.id_kontact INNER JOIN dbo.Сделка ON dbo.[Название_орг].id_nazv_org = dbo.Сделка.id_nazv_org INNER JOIN dbo.Договор ON dbo.Сделка.id_dog = dbo.Договор.id_dog WHERE наименование like @naimen+'%' and договор like @dog+'%' GO
· запрос «Поиск телефонов по названию орг. и ФИО сотрудника» реализуется хранимой процедурой PoiskTel: CREATE PROCEDURE PoiskTel @nazv varchar (50), @f varchar (50), @i varchar (50), @o varchar (50) AS SELECT * FROM Tel where название like @nazv+'%' and фамилия like @f+'%' and имя like @i+'%' and отчество like @o+'%' GO
· запрос «Редактирование организации» реализуется хранимой процедурой RedacOrg:
CREATE PROCEDURE RedacOrg @id int, @gorod varchar(50), @org varchar(50), @INN varchar(50), @KPP varchar(50), @OKPO varchar(50), @OGRN varchar(50), @index int, @ulica varchar(50), @dom varchar(50), @office varchar(50), @f varchar(50), @i varchar(50), @o varchar(50), @dol varchar(50)
AS
declare @IDGorod int declare @IDDol int
set @IDGorod=(Select id_gorod from Город where город=@gorod) if @IDGorod is null begin insert into Город (город) values (@gorod) set @IDGorod=(Select id_gorod from Город where город=@gorod) end
set @IDDol=(Select id_dolgnost from Должность where должность=@dol) if @IDDol is null begin insert into Должность (должность) values (@dol)
end
update Адрес set индекс=@index,улица=@ulica,дом=@dom,офис=@office,id_gorod=@IDGorod where id_nazv_org=@id update Название_орг set название=@org,ИНН=@INN,КПП=@KPP,ОКПО=@OKPO,ОГРН=@OGRN where id_nazv_org=@id update Сотрудники set фамилия=@f,имя=@i,отчество=@o,id_dolgnost=@IDDol where id_nazv_org=@id GO
· запрос «Редактирование телефона» реализуется хранимой процедурой RedactTelefon:
CREATE PROCEDURE RedactTelefon @id int, @nomer varchar(50), @kon varchar(50)
AS
declare @IDKon int
set @IDKon=(Select id_kontact from Контакт where контакт=@kon) if @IDKon is null begin insert into Контакт (контакт) values (@kon) set @IDKon=(Select id_kontact from Контакт where контакт=@kon) end
update Телефон set номер=@nomer,id_kontact=@IDKon where id_telefon=@id GO
·
CREATE PROCEDURE RedactSdelka @id int, @dataZakl datetime, @dataNach datetime, @dataZav datetime, @usl varchar(50), @sum varchar(50)
AS
declare @IDUsl int
set @IDUsl=(Select id_uslov from Условие where условие=@usl) if @IDUsl is null begin insert into Условие (условие) values (@usl) set @IDUsl=(Select id_uslov from Условие where условие=@usl) end
update Сделка set дата_заключения=@dataZakl where id_sdelka=@id update Сделка set дата_начала=@dataNach where id_sdelka=@id update Сделка set дата_завершения=@dataZav where id_sdelka=@id update Сделка set id_uslov=@IDUsl where id_sdelka=@id update Сделка set сумма=@sum where id_sdelka=@id GO
· запрос «Удаление завершенного договора» реализуется хранимой процедурой UdalenDogovor:
CREATE PROCEDURE UdalenDogovor @dataZakl datetime, @dataNach datetime, @dataZav datetime, @dog varchar(50), @naimen varchar(50)
AS
DELETE FROM Сделка WHERE дата_заключения=@dataZakl and дата_начала=@dataNach and дата_завершения=@dataZav DELETE FROM Договор WHERE договор=@dog and наименование=@naimen GO
· запрос «Удаление организации» реализуется хранимой процедурой UdalenOrg:
CREATE PROCEDURE UdalenOrg @f varchar(50), @i varchar(50), @o varchar(50), @org varchar(50)
AS
declare @id int declare @id1 int set @id=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o) set @id1=(Select id_nazv_org from Название_орг where название=@org) DELETE FROM Договор WHERE id_dog in (select id_dog from Сделка where id_nazv_org=@id1) DELETE FROM Телефон WHERE id_sotrud=@id DELETE FROM Сделка WHERE id_nazv_org=@id1 DELETE FROM Сотрудники WHERE id_nazv_org=@id1
DELETE FROM Название_орг WHERE название=@org GO
· запрос «Удаление телефона» реализуется хранимой процедурой UdalenTelefon:
CREATE PROCEDURE UdalenTelefon @nomer varchar(50), @f varchar(50), @i varchar(50), @o varchar(50) AS declare @IDSotrud int set @IDSotrud=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o) DELETE FROM Телефон WHERE номер=@nomer and id_sotrud=@IDSotrud GO
· запрос «Удаление завершенных договоров» реализуется хранимой процедурой UdalenDogovorPoDate:
CREATE PROCEDURE UdalenDogovorPoDate AS
DELETE FROM Договор WHERE id_dog in (select id_dog from Сделка where (DATEDIFF(Day, dbo.Сделка.дата_завершения, GETDATE()) > 14)) DELETE FROM Сделка WHERE (DATEDIFF(Day, dbo.Сделка.дата_завершения, GETDATE()) > 14) GO
Также для удобного использования пользователем информационной системы созданы следующие процедуры: · запрос «Вывод договоров по ремонту» реализуется хранимой процедурой ZaprosRemont: CREATE PROCEDURE ZaprosRemont AS select * from Remont GO ·
CREATE PROCEDURE ZaprosTexper AS select * from Texper GO
· запрос «Вывод договоров по эксплуатации» реализуется хранимой процедурой ZaprosPostavka:
CREATE PROCEDURE ZaprosPostavka AS select * from Postavka GO · запрос «Вывод договоров по поставкам» реализуется хранимой процедурой ZaprosEksplotaciya:
CREATE PROCEDURE ZaprosEksplotaciya AS select * from Eksplotaciya GO · запрос «Вывод адреса организации» реализуется хранимой процедурой ZaprosOrgan:
CREATE PROCEDURE ZaprosOrgan AS select * from Organ GO
· запрос «Выбор всей информации по каждому договору» реализуется хранимой процедурой ZaprosVsy: CREATE PROCEDURE ZaprosVsy AS select * from Vsy GO
Клиентское приложение создано на основе Windows технологии. В качестве программного обеспечения был выбран Borland C++Builder 6.
Date: 2015-09-19; view: 655; Нарушение авторских прав |