Информационная система военного округа

Федеральное Агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Тихоокеанский государственный университетКафедра Автоматики и системотехники
 
 
 
 
 
 
 
Курсовая работа по дисциплине
«Управление данными»
Тема: «Информационная система военного округа»
 
Выполнил:
студент группы ИС — 52
Коган А.В.
Принял: преподаватель
кафедры «АИС»
Епанешников В.Д.
 
Хабаровск 2006

Заданиена курсовую работу
Информационнаясистема военного округа
Военныечасти округа расквартированы по различным местам дислокации, причем в одномместе могут располагаться несколько частей. Каждая воинская часть состоит изрот, роты из взводов, взводы из отделений, в свою очередь воинские частиобъединяются в дивизии, корпуса или бригады, а те в армии. Военный округпредставлен офицерским составом (генералы, полковники, подполковники, майоры,капитаны, лейтенанты) и рядовым и сержантским составом (старшины, сержанты,прапорщики, ефрейторы, рядовые). Каждая из перечисленных категорийвоеннослужащих может иметь характеристики, присущие только этой категории: длягенералов это может быть дата окончания академии, дата присвоения генеральскогозвания и т.д. Каждое из подразделений имеет командира, причем военнослужащиеофицерского состава могут командовать любым из вышеперечисленных подразделений,а военнослужащие рядового и сержантского состава только взводом и отделением.Все военнослужащие имеют одну или несколько воинских специальностей.
Каждойвоинской части придана боевая и транспортная техника: БМП, тягачи,автотранспорт и пр. и вооружение: карабины, автоматическое оружие, артиллерия,ракетное вооружение и т.д. Каждая из перечисленных категорий боевой техники ивооружения также имеет специфические, присущие только ей атрибуты и по каждойкатегории может быть несколько видов техники и вооружения. Инфраструктуравоенной части представлена набором сооружений (сооружение ©1, сооружение ©2…), некоторые из которых предназначены для дислокации подразделений части.
Видызапросов в информационной системе:
Получитьперечень всех частей военного округа, указанной армии, дивизии, корпуса и ихкомандиров.
Получитьданные по офицерскому составу в целом и по офицерскому составу указанногозвания всех частей военного округа, отдельной армии, дивизии, корпуса, военнойчасти.
Получитьданные по рядовому и сержантскому составу в целом и с учетом указанного званиявсех частей военного округа, отдельной армии, дивизии, корпуса, военной части.
Получитьперечень мест дислокации всех частей военного округа, отдельной армии, дивизии,корпуса, военной части.
Получитьданные о наличии боевой технике в целом и с учетом указанной категории или видаво всех частях военного округа, в отдельной армии, дивизии, корпусе, военнойчасти.
Получитьперечень сооружений указанной военной части, перечень сооружений, гдедислоцировано более одного подразделения, где недислоцировано ни одногоподразделения.
Получитьперечень военных частей, в которых число единиц указанного вида боевой техникибольше 5 (нет указанной боевой техники).
Получитьданные о наличии вооружения в целом и с учетом указанной категории или вида вовсех частях военного округа, в отдельной армии, дивизии, корпусе, военнойчасти.
Получитьперечень военных специальностей, по которым в округе, в отдельной армии,дивизии, корпусе, военной части более пяти специалистов (нет специалистов).
Получитьперечень военнослужащих указанной специальности в округе, в отдельной армии,дивизии, корпусе, военной части, в указанном подразделении некоторой военнойчасти.
Получитьперечень военных частей, в которых число единиц указанного вида вооружениябольше 10 (нет указанного вооружения).
Получитьданные об армии, дивизии, корпусе, в которые входит больше всего (меньше всего)военных частей.

Оглавление
1.       Задача курсовойработы
2.       Основные понятия
3.       Анализ предметнойобласти
4.       Схема данных
5.       Скрипт
6.       Создание базы данныхс помощью CASE Studio 2.21
7.       Программа
8.       Текст программы
9.       Список литературы

1.        Задачакурсовой работы
Разработатьинформационную систему военного округа в виде базы данных
Даннаяпрограмма включает в себя следующие требования
a)        Просмотр базы данных
b)        Добавление новойинформации в базу
c)        Редактирование иудаление информации
d)        Использованиехранимых процедур и триггеров
e)        Вывод нужнойинформации по заданным запросам
f)         Формированиеотчёта
2.        Основныепонятия
Данные– это информация представленная в определенном виде, позволяющемавтоматизировать её сбор, хранение и дальнейшую обработку человеком илиинформационным средством.
Длякомпьютерных технологий данные – это информация в дискретном, фиксированномвиде, удобная для хранения, обработка на ЭВМ, а также для передачи по каналамсвязи.
Базаданных – именованная совокупность данных, отражающая состояние объектов и ихотношений в рассматриваемой предметной области, совокупность взаимосвязанныхданных при такой минимальной избыточности, которая допускает их использованиеоптимальным образом для одного или нескольких приложений в определеннойпредметной области.
Системауправления базами данных (СУБД) – совокупность языковых и программных средств,предназначенных для создания, ведения и совместного использования БД многимипользователями. Автоматизированная информационная система (АИС) – это система,реализующая автоматизированный сбор, обработку, манипулирование данными,функционирующая на основе ЭВМ и других технических средств и включающая соответствующеепрограммное обеспечение и персонал.
Хранимаяпроцедура
Хранимые процедуры — это откомпилированныеSQL-инструкции, которые хранятся на сервере.
При их использованииследует принимать во внимание следующее:
♦ В связи с тем,что процедурный кэш работает по принципу хранения либо самых раннихиспользовавшихся данных (LRU — least recently used) либо недавноиспользовавшихся данных (MRU — most recently used), хранимая процедура остаетсяв кэше до тех пор, пока не будет вытеснена оттуда другой часто исполняемойпроцедурой.
♦ Проверкасинтаксических ошибок и компиляция происходят при первом запуске хранимойпроцедуры на исполнение.
♦Процедуры могут выполняться любыми приложениями, что облегчает контроль надцелостностью данных.
♦ В отличие оттриггеров процедуры запускаются приложением, а не SQL Server.
♦ Процедуры могутлибо выбирать данные, либо модифицировать их, но не то и другое одновременно.
Хранимые процедуры могут использоваться как механизм безопасности.
Пользователю предоставляется право запускать хранимую процедуру,но не право непосредственного доступа к данным таблицы. Обратите внимание наследующие преимущества хранимых процедур:
♦ Всепользовательские приложения будут использовать одну и ту же логику.
♦ Процедуры могутпринимать и возвращать параметры.
♦ Процедурысоздаются как для постоянного, так и для временного использования (в течениетекущего сеанса работы с SQL Server).
♦ Хранимыепроцедуры могут выполняться автоматически при запуске Microsoft SQL Server.
Созданиехранимой процедуры, использованной в программе
ADOQuery1->SQL->Add(«CREATE PROCEDURE proc2;1 asSELECT nazvanie_armii, COUNT(Nomer_podrazdelenia) AS col FROM chast GROUP BYnazvanie_armii HAVING COUNT(nazvanie_armii)>=ALL(SELECTCOUNT(nazvanie_armii) FROM Chast GROUP BY nazvanie_armii)»);
Триггеры
Триггер — это специальныйвид хранимых процедур. Триггер выполняется при попытке изменения данных,которые он защищает. Это обязательно происходит, когда в таблице выполняютсяизменения, связанные с командами SQL INSERT, UPDATE или DELETE.
Триггеры частоиспользуются для поддержки целостности данных или для сложных операций, типаавтоматического изменения суммарных данных. Так как каскадные операции дляподдержки декларативной ссылочной целостности в данной версии недоступны,триггеры пока нужны. Они позволяют вам проводить операции каскадного удаленияили модификации, если происходит попытка нарушить ссылочную целостность междутаблицами. Если для таблицы, имеющей триггер, есть ограничения, то онипроверяются до выполнения триггера. Если ограничения не могут быть преодолены,то выражение не выполнится, а вслед за ним не сможет сработать и триггер.
Триггер имеет следующиехарактеристики:
♦ Он связан стаблицами.
♦ Выполняетсяавтоматически не зависимо от того, как происходит изменение данных (с помощьюкоманды UPDATE, в процессе работы пользовательского приложения и т. д.).
♦ Триггер не можетбыть вызван напрямую и не имеет параметров.
♦ Он может иметь до16 уровней вложенности.
Это позволяет триггеру,который изменяет значения в таблице, вызвать другой триггер, который в своюочередь запустит на исполнение следующий и так далее.
♦ Триггер являетсяпродвинутой формой правил, которые позволяют устанавливать более полныйконтроль над данными.
Они предупреждают о вводенеправильных данных и данных, которые пытаются нарушить внутреннее соответствиев базах данных SQL Server.
Триггеры создаются спомощью команды CREATE TRIGGER. Команда указывает, для какой таблицы создаетсятриггер и при наступлении какого события триггер должен сработать. Если вы нехотите, чтобы триггер сработал, то единственным выходом из положения являетсяудаление триггера с помощью команды DROP TRIGGER. Создание триггера, использованного в программе:
ADOQuery1->SQL->Add(«Create trigger trig onObedinenie for update as begin if update([nazvanie_armii]) begin UPDATE chastSET chast.nazvanie_armii=inserted.nazvanie_armii FROM chast, deleted, insertedWHERE chast.nazvanie_armii=deleted.nazvanie_armii end end»);
Созданиеотчётов
QuickReportэто набор компонент для Builder позволяющий вам построить отчет из базы данныхбыстро и просто.
Позволяетне только отпечатать отчет, но и просмотреть его на экране, что позволяетпользователю проверить результат без порчи бумаги и экспортировать отчет вдругие форматы, такие как простой ASCII текст, текст разделенный запятыми (CSV)и в HTML.
Компоненты
Всекомпоненты QuickReport расположены на закладке QReport палитры компонентDelphi. Здесь краткий тур что это такое и как они помогут вам.

Figure 1 — TQuickRep and band components
/>
TQuickRep. Это наиболее важный компонент, этоконтейнер для всех других печатных компонент. Выглядит как лист бумаги, накотором вы будете печатать. Его свойство Page позволяет установить размеры бумаги, в то же время свойство Dataset определяет источник данных дляотчета.
TQuickReport немного похож на TDataModule – это специальный тип формы, котораяникогда не показывается пользователю программы. Если вы, то вы можетеиспользовать TQuickReport на псевдо-форме вместо компонента TQuickRep– никакой разницы в их методах,свойствах и событиях. Но желательно разместить компонент TQuickRep на форме: это наиболее подходящеерешение. Например, размещение TQuickRep на форме позволяет вам использовать обработчик OnCreate если вы пожелаете добавить некоторыеобъекты в отчет программным путем.
3.        Анализпредметной области
Военныечасти округа расквартированы по различным местам дислокации, причем в одномместе могут располагаться несколько частей. Каждая воинская часть состоит изрот, роты из взводов, взводы из отделений, в свою очередь воинские частиобъединяются в дивизии, корпуса или бригады, а те в армии.
Военныйокруг представлен офицерским составом (генералы, полковники, подполковники,майоры, капитаны, лейтенанты) и рядовым и сержантским составом (старшины,сержанты, прапорщики, ефрейторы, рядовые).
Каждаяиз перечисленных категорий военнослужащих может иметь характеристики, присущиетолько этой категории: для генералов это может быть дата окончания академии,дата присвоения генеральского звания и т.д. Каждое из подразделений имееткомандира, причем военнослужащие офицерского состава могут командовать любым извышеперечисленных подразделений, а военнослужащие рядового и сержантского составатолько взводом и отделением.
Всевоеннослужащие имеют одну или несколько воинских специальностей.
Каждойвоинской части придана боевая и транспортная техника: БМП, тягачи,автотранспорт и пр. и вооружение: карабины, автоматическое оружие, артиллерия,ракетное вооружение и т.д.
Каждаяиз перечисленных категорий боевой техники и вооружения также имеетспецифические, присущие только ей атрибуты и по каждой категории может бытьнесколько видов техники и вооружения. Инфраструктура военной части представленанабором сооружений (сооружение ©1, сооружение ©2… .), некоторые из которыхпредназначены для дислокации подразделений части.
 

4.        Схемаданных
/>
 
5.        Скрипт
/*
Created11.12.2006
Modified19.12.2006
Project
Model
Company
Author
Version
DatabaseMSSQL 2000
*/
Droptrigger [tu_Chast]
go
Droptrigger [tu_Rota]
go
Droptrigger [tu_Vzvod]
go
Droptrigger [tu_Obedinenie]
go
Droptrigger [tu_armia]
go
Droptrigger [tu_Podrazdelenie]
go
Droptrigger [td_Chast]
go
Droptrigger [td_Rota]
go
Droptrigger [td_Vzvod]
go
Droptrigger [td_Obedinenie]
go
Droptrigger [td_armia]
go
Droptrigger [td_Podrazdelenie]
go
Droptable [Voorugenie]
go
Droptable [Podrazdelenie]
go
Droptable [Tehnika]
go
Droptable [Soorugenia]
go
Droptable [armia]
go
Droptable [sostav]
go
Droptable [Obedinenie]
go
Droptable [Otdelenie]
go
Droptable [Vzvod]
go
Droptable [Rota]
go
Droptable [Chast]
go
Createtable [Chast]
(
[Nazvanie_chasti]Char(10) NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Chast] Primary Key([Nomer_podrazdelenia],[tip_i_nomer_obedinenia],[nazvanie_armii],[Mesto])
)
go
Create table [Rota]
(
[Nazv_roti] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Rota] Primary Key([Nazv_roti],[Nomer_podrazdelenia],[tip_i_nomer_obedinenia],[nazvanie_armii],[Mesto])
)
go
Create table [Vzvod]
(
[Nazv_vzvoda] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[Nazv_roti] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Vzvod] Primary Key([Nazv_vzvoda],[Nomer_podrazdelenia],[nazvanie_armii],[tip_i_nomer_obedinenia],[Nazv_roti],[Mesto])
)
go
Create table [Otdelenie]
(
[Nazv_otdel] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[Nazv_roti] Char(10) NOT NULL,
[Nazv_vzvoda] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Otdelenie] Primary Key([Nazv_otdel],[Nomer_podrazdelenia],[nazvanie_armii],[tip_i_nomer_obedinenia],[Nazv_roti],[Nazv_vzvoda],[Mesto])
)
go
Create table [Obedinenie]
(
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
Constraint [pk_Obedinenie] Primary Key([tip_i_nomer_obedinenia],[Nomer_podrazdelenia],[nazvanie_armii])
)
go
Create table [sostav]
(
[Kod_slugashego] Char(10) NOT NULL,
[FIO] Char(30) NOT NULL,
[Zvanie] Char(30) NOT NULL,
[Special] Char(30) NOT NULL,
[Tip_sostava] Char(10) NOT NULL,
[Podchinaetca] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_sostav] Primary Key([Kod_slugashego],[FIO],[Zvanie],[Nomer_podrazdelenia])
)
go
Create table [armia]
(
[nazvanie_armii] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_armia] Primary Key([nazvanie_armii],[Nomer_podrazdelenia])
)
go
Create table [Soorugenia]
(
[Nomer_coorugenia] Char(10) NOT NULL,
[Nomer_disloc_obedinenia] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Soorugenia] Primary Key([Nomer_coorugenia],[Nomer_disloc_obedinenia],[Nomer_podrazdelenia])
)
go
Create table [Tehnika]
(
[Tip_tehniki] Char(10) NOT NULL,
[Kol_vo_tehniki] Integer NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Tehnika] Primary Key([Tip_tehniki],[Kol_vo_tehniki],[Nomer_podrazdelenia])
)
go
Create table [Podrazdelenie]
(
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Podrazdelenie] Primary Key([Nomer_podrazdelenia]))
go
Create table [Voorugenie]
(
[Tip_voorug] Char(10) NOT NULL,
[Kol_vo_voorug] Integer NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Voorugenie] Primary Key([Tip_voorug],[Kol_vo_voorug],[Nomer_podrazdelenia]))
go
Set quoted_identifier on
go
/* Update trigger «tu_Chast» for table«Chast» */
Create trigger [tu_Chast]
on [Chast] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Rota» when parent«Chast» updated */
if update([Nomer_podrazdelenia]) or
update([tip_i_nomer_obedinenia]) or
update([nazvanie_armii]) or
update([Mesto])
begin
if exists (select 1 from [Rota] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Mesto] = d.[Mesto])
begin
raiserror 50001 ‘Children still exist in table ”Rota”.Cannot update parent table ”Chast”.’
rollback transaction
return
end
end
end
go
/* Update trigger «tu_Rota» for table«Rota» */
Create trigger [tu_Rota]
on [Rota] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Vzvod» when parent«Rota» updated */
if update([Nazv_roti]) or
update([Nomer_podrazdelenia]) or
update([tip_i_nomer_obedinenia]) or
update([nazvanie_armii]) or
update([Mesto])
begin
if exists (select 1 from [Vzvod] t, deleted d
where t.[Nazv_roti] = d.[Nazv_roti] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Mesto] = d.[Mesto])
begin
raiserror 50001 ‘Children still exist in table ”Vzvod”.Cannot update parent table ”Rota”.’
rollback transaction
return
end
end
end
go
/* Update trigger «tu_Vzvod» for table«Vzvod» */
Create trigger [tu_Vzvod]
on [Vzvod] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Otdelenie» when parent«Vzvod» updated */
if update([Nazv_vzvoda]) or
update([Nomer_podrazdelenia]) or
update([nazvanie_armii]) or
update([tip_i_nomer_obedinenia]) or
update([Nazv_roti]) or
update([Mesto])
begin
if exists (select 1 from [Otdelenie] t, deleted d
where t.[Nazv_vzvoda] = d.[Nazv_vzvoda] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[Nazv_roti] = d.[Nazv_roti] and
t.[Mesto] = d.[Mesto])
begin
raiserror 50001 ‘Children still exist in table ”Otdelenie”.Cannot update parent table ”Vzvod”.’
rollback transaction
return
end
end
end
go
/* Update trigger «tu_Obedinenie» for table«Obedinenie» */
Create trigger [tu_Obedinenie]
on [Obedinenie] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Chast» when parent«Obedinenie» updated */
if update([tip_i_nomer_obedinenia]) or
update([Nomer_podrazdelenia]) or
update([nazvanie_armii])
begin
if exists (select 1 from [Chast] t, deleted d
where t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia]and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[nazvanie_armii] = d.[nazvanie_armii])
begin
raiserror 50001 ‘Children still exist in table ”Chast”.Cannot update parent table ”Obedinenie”.’
rollback transaction
return
end
end
end
go
/* Update trigger «tu_armia» for table«armia» */
Create trigger [tu_armia]
on [armia] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Obedinenie» when parent«armia» updated */
if update([nazvanie_armii]) or
update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Obedinenie] t, deleted d
where t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 ‘Children still exist in table”Obedinenie”. Cannot update parent table ”armia”.’
rollback transaction
return
end
end
end
go
/* Update trigger «tu_Podrazdelenie» for table«Podrazdelenie» */
Create trigger [tu_Podrazdelenie]
on [Podrazdelenie] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «armia» when parent«Podrazdelenie» updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [armia] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 ‘Children still exist in table ”armia”.Cannot update parent table ”Podrazdelenie”.’
rollback transaction
return
end
end
/* Restrict child «sostav» when parent«Podrazdelenie» updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [sostav] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 ‘Children still exist in table ”sostav”.Cannot update parent table ”Podrazdelenie”.’
rollback transaction
return
end
end
/* Restrict child «Tehnika» when parent«Podrazdelenie» updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Tehnika] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 ‘Children still exist in table ”Tehnika”.Cannot update parent table ”Podrazdelenie”.’
rollback transaction
return
end
end
/* Restrict child «Voorugenie» when parent«Podrazdelenie» updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Voorugenie] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 ‘Children still exist in table”Voorugenie”. Cannot update parent table ”Podrazdelenie”.’
rollback transaction
return
end
end
/* Restrict child «Soorugenia» when parent«Podrazdelenie» updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Soorugenia] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 ‘Children still exist in table”Soorugenia”. Cannot update parent table ”Podrazdelenie”.’
rollback transaction
return
end
end
end
go
/* Delete trigger «td_Chast» for table«Chast» */
Create trigger [td_Chast]
on [Chast] for delete as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Rota» when parent«Chast» deleted */
if exists (select 1 from [Rota] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Mesto] = d.[Mesto])
 begin
raiserror 50003 ‘Children still exist in table ”Rota”.Cannot delete from parent table ”Chast”.’
rollback transaction
return
end
end
go
/* Delete trigger «td_Rota» for table«Rota» */
Create trigger [td_Rota]
on [Rota] for delete as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Vzvod» when parent«Rota» deleted */
if exists (select 1 from [Vzvod] t, deleted d
where t.[Nazv_roti] = d.[Nazv_roti] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Mesto] = d.[Mesto])
 begin
raiserror 50003 ‘Children still exist in table ”Vzvod”.Cannot delete from parent table ”Rota”.’
rollback transaction
return
end
end
go
/* Delete trigger «td_Vzvod» for table«Vzvod» */
Create trigger [td_Vzvod]
on [Vzvod] for delete as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Otdelenie» when parent«Vzvod» deleted */
if exists (select 1 from [Otdelenie] t, deleted d
where t.[Nazv_vzvoda] = d.[Nazv_vzvoda] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[Nazv_roti] = d.[Nazv_roti] and
t.[Mesto] = d.[Mesto])
 begin
raiserror 50003 ‘Children still exist in table ”Otdelenie”.Cannot delete from parent table ”Vzvod”.’
rollback transaction
return
end
end
go
/* Delete trigger «td_Obedinenie» for table«Obedinenie» */
Create trigger [td_Obedinenie]
on [Obedinenie] for delete as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Chast» when parent«Obedinenie» deleted */
if exists (select 1 from [Chast] t, deleted d
where t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia]and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[nazvanie_armii] = d.[nazvanie_armii])
 begin
raiserror 50003 ‘Children still exist in table ”Chast”.Cannot delete from parent table ”Obedinenie”.’
rollback transaction
return
end
end
go
/* Delete trigger «td_armia» for table«armia» */
Create trigger [td_armia]
on [armia] for delete as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «Obedinenie» when parent«armia» deleted */
if exists (select 1 from [Obedinenie] t, deleted d
where t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
 begin
raiserror 50003 ‘Children still exist in table”Obedinenie”. Cannot delete from parent table ”armia”.’
rollback transaction
return
end
end
go
/* Delete trigger «td_Podrazdelenie» for table«Podrazdelenie» */
Create trigger [td_Podrazdelenie]
on [Podrazdelenie] for delete as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child «armia» when parent«Podrazdelenie» deleted */
if exists (select 1 from [armia] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
 begin
raiserror 50003 ‘Children still exist in table ”armia”.Cannot delete from parent table ”Podrazdelenie”.’
rollback transaction
return
end
/* Restrict child «sostav» when parent«Podrazdelenie» deleted */
if exists (select 1 from [sostav] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
 begin
raiserror 50003 ‘Children still exist in table ”sostav”.Cannot delete from parent table ”Podrazdelenie”.’
rollback transaction
return
end
/* Restrict child «Tehnika» when parent«Podrazdelenie» deleted */
if exists (select 1 from [Tehnika] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
 begin
raiserror 50003 ‘Children still exist in table ”Tehnika”.Cannot delete from parent table ”Podrazdelenie”.’
rollback transaction
return
end
/* Restrict child «Voorugenie» when parent«Podrazdelenie» deleted */
if exists (select 1 from [Voorugenie] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
 begin
raiserror 50003 ‘Children still exist in table”Voorugenie”. Cannot delete from parent table ”Podrazdelenie”.’
rollback transaction
return
end
/* Restrict child «Soorugenia» when parent «Podrazdelenie»deleted */
if exists (select 1 from [Soorugenia] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
 begin
raiserror 50003 ‘Children still exist in table”Soorugenia”. Cannot delete from parent table ”Podrazdelenie”.’
rollback transaction
return
end
end
go
Set quoted_identifier off
go
/* Roles permissions */

6.        Созданиебазы данных с помощью CASE Studio 2.21
 
/>
/>

/>
/>

/>
/>

/>
/>

/>
/>

/>
7.        Программа
 
/>
 

/>
 
/>
 
/>

/>
/>

Запросы:
SELECT chast.Nazvanie_chasti, chast.Nomer_podrazdelenia,chast.Mesto, chast.tip_i_nomer_obedinenia, chast.nazvanie_armii, sostav.FIO,sostav.Zvanie, sostav.Kod_slugashego FROM chast, sostav WHERE chast.nazvanie_armii=:par1AND sostav.Nomer_podrazdelenia=chast.Nomer_podrazdelenia
SELECT chast.Nazvanie_chasti, chast.Nomer_podrazdelenia,chast.Mesto, chast.tip_i_nomer_obedinenia, chast.nazvanie_armii, sostav.FIO,sostav.Zvanie, sostav.Kod_slugashego FROM chast, sostav WHEREchast.Nomer_podrazdelenia=sostav.Nomer_podrazdelenia ANDsostav.Tip_sostava=:par1
SELECT Nazvanie_chasti,Nomer_podrazdelenia, Mesto FROM chast WHERE Nomer_podrazdelenia=:par1
SELECT chast.Nazvanie_chasti,chast.Nomer_podrazdelenia, tehnika.Tip_tehniki, tehnika.kol_vo_tehniki FROMchast, tehnika WHERE chast.Nomer_podrazdelenia=tehnika.Nomer_podrazdelenia ANDchast.Nomer_podrazdelenia=:par1
SELECT Soorugenia.Nomer_coorugenia,Soorugenia.Nomer_disloc_obedinenia, Chast.Nazvanie_chasti FROM Soorugenia,chast WHERE chast.Nomer_podrazdelenia=Soorugenia.Nomer_podrazdelenia ANDchast.Nomer_podrazdelenia=:par1
SELECT nomer_coorugenia,COUNT(Nomer_disloc_obedinenia) as col FROM Soorugenia GROUP BY nomer_coorugeniaHAVING COUNT(Nomer_disloc_obedinenia)>:par1
SELECT chast.Nomer_podrazdelenia,tehnika.kol_vo_tehniki, tehnika.tip_tehniki FROM chast, tehnika WHEREchast.Nomer_podrazdelenia=tehnika.Nomer_podrazdelenia ANDtehnika.kol_vo_tehniki>:par1 ORDER BY chast.Nomer_podrazdelenia
SELECT chast.Nazvanie_chasti,chast.Nomer_podrazdelenia, Voorugenie.Tip_voorug, Voorugenie.kol_vo_voorug FROMchast, Voorugenie WHEREchast.Nomer_podrazdelenia=Voorugenie.Nomer_podrazdelenia ANDchast.Nomer_podrazdelenia=:par1
SELECT sostav.special,COUNT(sostav.FIO) as col FROM Chast, sostav WHEREchast.Nomer_podrazdelenia=sostav.Nomer_podrazdelenia GROUP BY sostav.specialHAVING COUNT(sostav.FIO)>:par1
SELECT chast.Nomer_podrazdelenia,chast.Nazvanie_chasti, sostav.FIO, sostav.Zvanie, sostav.Kod_slugashego FROMChast, sostav WHERE chast.Nomer_podrazdelenia=sostav.Nomer_podrazdelenia ANDsostav.special=:par1
SELECT chast.Nazvanie_chasti,chast.Nomer_podrazdelenia, chast.Mesto, Voorugenie.Tip_voorug,Voorugenie.kol_vo_voorug FROM Chast, Voorugenie WHERE chast.Nomer_podrazdelenia=Voorugenie.Nomer_podrazdelenia AND Voorugenie.Tip_voorug=:par1 ANDVoorugenie.kol_vo_voorug>10
SELECT nazvanie_armii,COUNT(Nomer_podrazdelenia) AS col FROM chast GROUP BY nazvanie_armii HAVINGCOUNT(nazvanie_armii)>=ALL(SELECT COUNT(nazvanie_armii) FROM Chast GROUP BYnazvanie_armii)
8.        Текстпрограммы
 
UNIT1:
//—————————————————————————
#include
#pragmahdrstop
#include«Unit2.h»
#include«Unit1.h»
#include«Unit3.h»
//—————————————————————————
#pragmapackage(smart_init)
#pragmaresource “*.dfm”
TForm1*Form1;
intcolcount;
TQRDBText*qrdbed[10];
TQRLabel*qrlabl[10];
TDBEdit*dbed[10];
TLabel*labl[10];
//—————————————————————————
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Label5->Caption=ADOTable2->TableName;
Label4->Caption=ADOTable1->TableName;
}
//—————————————————————————
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ADOQuery1->Active=false;
AnsiString zapros;
DataSource3->DataSet=ADOQuery1;
zapros=ComboBox1->Text;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(zapros);
if (ADOQuery1->Parameters->Count!=0)
ADOQuery1->Parameters->ParamByName(«par1»)->Value=Edit1->Text;
ADOQuery1->ExecSQL();
ADOQuery1->Active=true;
}
//—————————————————————————
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TLocateOptions Opts;
Opts.Clear();
Opts
ADOTable1->Locate(«Nomer_podrazdelenia»,Edit2->Text,Opts);
ADOTable1->Delete();
}
//—————————————————————————
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->ADOTable1->Active=false;
DBText1->DataField=””;
Form2->DBEdit1->DataField=””;
Form2->DBEdit2->DataField=””;
Form2->DBEdit3->DataField=””;
Form2->DBEdit4->DataField=””;
Form2->DBEdit5->DataField=””;
Form2->DBEdit6->DataField=””;
Form2->DBEdit7->DataField=””;
//—————————–
Form3->QRDBText1->DataField=””;
Form3->QRDBText2->DataField=””;
Form3->QRDBText3->DataField=””;
Form3->QRDBText4->DataField=””;
Form3->QRDBText5->DataField=””;
Form3->QRDBText6->DataField=””;
Form3->QRDBText7->DataField=””;
ADOTable1->TableName=ComboBox2->Text;
Label4->Caption=ADOTable1->TableName;
ADOTable1->Active=true;
colcount=ADOTable1->Fields->Count;
//——————————————
dbed[1]=Form2->DBEdit1;
dbed[2]=Form2->DBEdit2;
dbed[3]=Form2->DBEdit3;
dbed[4]=Form2->DBEdit4;
dbed[5]=Form2->DBEdit5;
dbed[6]=Form2->DBEdit6;
dbed[7]=Form2->DBEdit7;
labl[1]=Form2->Label1;
labl[2]=Form2->Label2;
labl[3]=Form2->Label3;
labl[4]=Form2->Label4;
labl[5]=Form2->Label5;
labl[6]=Form2->Label6;
labl[7]=Form2->Label7;
//————————————————
qrdbed[1]=Form3->QRDBText1;
qrdbed[2]=Form3->QRDBText2;
qrdbed[3]=Form3->QRDBText3;
qrdbed[4]=Form3->QRDBText4;
qrdbed[5]=Form3->QRDBText5;
qrdbed[6]=Form3->QRDBText6;
qrdbed[7]=Form3->QRDBText7;
qrlabl[1]=Form3->QRLabel1;
qrlabl[2]=Form3->QRLabel2;
qrlabl[3]=Form3->QRLabel3;
qrlabl[4]=Form3->QRLabel4;
qrlabl[5]=Form3->QRLabel5;
qrlabl[6]=Form3->QRLabel6;
qrlabl[7]=Form3->QRLabel7;
//————————————————
for(int i=1;i
{
dbed[i]->Visible=true;
labl[i]->Visible=true;
dbed[i]->DataSource=DataSource1;
dbed[i]->DataField=ADOTable1->Fields->FieldByNumber(i)->FieldName;
labl[i]->Caption=ADOTable1->Fields->FieldByNumber(i)->FieldName;
}
for(int i=colcount+1;i
{
dbed[i]->Visible=false;
labl[i]->Visible=false;
}
}
//—————————————————————————
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ADOTable2->Active=false;
ADOTable2->TableName=ComboBox3->Text;
Label5->Caption=ADOTable2->TableName;
ADOTable2->Active=true;
}
//—————————————————————————
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Form2->Show();
TLocateOptions Opts;
Opts.Clear();
Opts
ADOTable1->Locate(«Nomer_podrazdelenia»,Edit2->Text,Opts);
if (ADOTable1->TableName==WideString(«sostav»))
{
TLocateOptions Opts1;
Opts1.Clear();
Opts1
ADOTable1->Locate(«kod_slugashego»,Edit2->Text,Opts1);
}
}
//—————————————————————————
void __fastcall TForm1::Button6Click(TObject *Sender)
{
ADOTable1->Append();
Form2->Show();
}
//—————————————————————————
void __fastcall TForm1::Button7Click(TObject *Sender)
{
DataSource3->DataSet=ADOStoredProc1;
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(«CREATE PROCEDURE proc2;1 asSELECT nazvanie_armii, COUNT(Nomer_podrazdelenia) AS col FROM chast GROUP BYnazvanie_armii HAVING COUNT(nazvanie_armii)>=ALL(SELECTCOUNT(nazvanie_armii) FROM Chast GROUP BY nazvanie_armii)»);
ADOStoredProc1->ProcedureName=«proc2;1»;
ADOQuery1->ExecSQL();
ADOStoredProc1->Active=false;
ADOStoredProc1->ExecProc();
ADOStoredProc1->Active=true;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add («drop procedure proc2»);
ADOQuery1->ExecSQL();
}
//—————————————————————————
void __fastcall TForm1::Button8Click(TObject *Sender)
{
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(«Create trigger trig onObedinenie for update as begin if update([nazvanie_armii]) begin UPDATE chastSET chast.nazvanie_armii=inserted.nazvanie_armii FROM chast, deleted, insertedWHERE chast.nazvanie_armii=deleted.nazvanie_armii end end»);
ADOQuery1->ExecSQL();
ADOTable1->Active=false;
Form2->DBEdit1->DataField=””;
Form2->DBEdit2->DataField=””;
Form2->DBEdit3->DataField=””;
Form2->DBEdit4->DataField=””;
Form2->DBEdit5->DataField=””;
Form2->DBEdit6->DataField=””;
Form2->DBEdit7->DataField=””;
DBText1->DataField=””;
DBText1->DataSource=DataSource1;
DBText1->DataField=«nazvanie_armii»;
ADOTable1->TableName=«Obedinenie»;
Label4->Caption=ADOTable1->TableName;
ADOTable1->Active=true;
ADOTable2->Active=false;
ADOTable2->TableName=«Chast» ;
Label5->Caption=ADOTable2->TableName;
ADOTable2->Active=true;
DBText1->DataField=«nazvanie_armii»;
}
//—————————————————————————
void __fastcall TForm1::Button9Click(TObject *Sender)
{
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(«DROP TRIGGER trig»);
ADOQuery1->ExecSQL();
}
//—————————————————————————
void __fastcall TForm1::Button11Click(TObject *Sender)
{
ADOTable1->Active=false;
ADOTable1->Active=true;
ADOTable2->Active=false;
ADOTable2->Active=true;
}
//—————————————————————————
void __fastcall TForm1::Button10Click(TObject *Sender)
{
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(«UPDATE Obedinenie SETnazvanie_armii=:nd1 WHERE nazvanie_armii=:nd2»);
ADOQuery1->Parameters->ParamByName(«nd1»)->Value=Edit3->Text;
ADOQuery1->Parameters->ParamByName(«nd2»)->Value=DBText1->Caption;
ADOQuery1->ExecSQL();
ADOTable1->Active=false;
ADOTable1->Active=true;
ADOTable2->Active=false;
ADOTable2->Active=true;
}
//—————————————————————————
void __fastcall TForm1::Button12Click(TObject *Sender)
{
for(int i=1;i
{
qrdbed[i]->DataSet=Form1->ADOTable1;
qrdbed[i]->DataField=ADOTable1->Fields->FieldByNumber(i)->FieldName;
qrlabl[i]->Caption=ADOTable1->Fields->FieldByNumber(i)->FieldName;
qrdbed[i]->Visible=true;
qrlabl[i]->Visible=true;
}
for(int i=colcount+1;i
{
qrdbed[i]->Visible=false;
qrlabl[i]->Visible=false;
}
Form3->QRLabel13->Caption=Label4->Caption;
Form3->QuickRep1->Preview();
}
//—————————————————————————
void __fastcall TForm1::Button13Click(TObject *Sender)
{
Form3->QuickRep1->Print();
}
//—————————————————————————
void __fastcall TForm1::Button14Click(TObject *Sender)
{
TLocateOptions Opts;
Opts.Clear();
Opts
ADOTable1->Locate(«Nomer_podrazdelenia»,Edit2->Text,Opts);
}
//—————————————————————————
//—————————————————————————
UNIT2:
#include
#pragma hdrstop
#include «Unit1.h»
#include «Unit2.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm2 *Form2;
//—————————————————————————
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//—————————————————————————
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Form1->ADOTable1->Post();
Hide();
}
//—————————————————————————
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Hide();
}
//—————————————————————————

9.        Списоклитературы
 
1.        «Базыданных: основы, проектирование, использование», М.П. Малыхина, СПб.:БХВ-Петербург, 2004. – 512 с.: ил.
2.        «SQL Server2000 Программирование», в 2 ч./Р. Вьейра: Часть I; Пер. с англ.; Под ред.С.М. Молявко. – М.: Бином. Лаборатория знаний, 2004. – 735 с., ил.