- •2005.552800.Бд.Кп.Пз т28-320.6
- •5 Проектирование реляционной и внешних моделей
- •5.1 Устранение категорий и явных связей
- •5.3 Разработка моделей внешних представлений
- •5.4 Вывод
- •6 Разработка sql-кода базы данных
- •6.1 Sql-код создания таблиц
- •6.2 Sql-код создания триггеров базы данных
- •6.2 Sql-код реализации внешних представлений
- •6.4 Вывод
- •Заключение
- •Список литературы
6.2 Sql-код создания триггеров базы данных
В данном подразделе в соответствии с реляционной моделью записывается SQL-оператор CREATE TRIGGER, обеспечивающий создание триггера базы данных для реализации операционного правила, специфицированного на предыдущем этапе в таблицах 5.4–5.6. При программировании триггера ориентировались на диалект Transact-SQL для Microsoft SQL Server 2000.
Для реализации был выбран следующий триггер базы данных:
– триггер «Проверки номера прав на существование в базе».
– триггер «Проверка кол-ва неверных ответов ».
Результаты представлены в таблице 6.2.
Таблица 6.2. SQL-код создания триггеров базы данных
№ п/п |
SQL-операторы |
1 |
CREATE TRIGGER [Проверки номера прав на существование в базе] ON [Права] |
2 |
FOR INSERT |
3 |
AS |
4 |
DECLARE @ID [номер прав] |
5 |
BEGIN TRANSACTION |
6 |
SELECT @ID = [Номер прав] FROM INSERTED |
7 |
IF EXISTS(SELECT * FROM [Права] WHERE [Номер прав] = @ID) |
8 |
BEGIN |
9 |
RAISERROR ('Права с таким номером уже существуют',16,-1) |
10 |
ROLLBACK TRANSACTION |
11 |
END |
12 |
CREATE TRIGGER [Проверка кол-ва неверных ответов] ON [Теоретический экзамен] |
13 |
FOR INSERT, UPDATE |
14 |
AS |
15 |
declare @N int |
16 |
begin transaction |
17 |
SELECT @N = [Кол-во неправ. ответов] FROM INSERTED |
18 |
IF @N>5 |
19 |
BEGIN |
20 |
RAISERROR ('Такого кол-ва неверных ответов быть не может',16,-1) |
21 |
ROLLBACK TRANSACTION |
22 |
END |
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
6.2 Sql-код реализации внешних представлений
В данном подразделе в соответствии со способами и формами представлений на основе модели соединения таблиц записываются SQL-операторы CREATE VIEW и CREATE PROCEDURE, обеспечивающие реализацию внешних представлений базы данных. При программировании ориентировались на диалект Transact-SQL для Microsoft SQL Server 2000. Результаты приведены в таблице 6.3.
Таблица 6.3. SQL-код реализации внешних представлений
№ п/п |
SQL-операторы |
Функция 1 «Учет кадров» | |
1 |
CREATE VIEW [Сведения о правах] AS |
2 |
SELECT [Права].[Номер прав], |
3 |
[Права].[Срок действия], |
4 |
[Права].[Категория], |
5 |
[Права].[Дата выдачи], |
6 |
[Владелец прав].[Место рождения], |
7 |
[Владелец прав].[ФИО], |
8 |
[Владелец прав].[Дата рождения] |
9 |
FROM [Права],[Владелец прав] |
10 |
WHERE [Права].[Номер прав] = [Владелец прав].[Номер прав] |
11 |
GO |
12 |
CREATE PROCEDURE [Сведения о сотруднике, выдавшем права] |
13 |
@НомерПрав [номер] AS |
14 |
SELECT [Права].[Номер прав], |
15 |
[Сотрудник].[ФИО], |
16 |
[Сотрудник].[Телефон], |
17 |
[Сотрудник].[Паспортные данные], |
18 |
[Звание].[Звание] |
19 |
FROM [Права],[Сотрудник],[Звание] |
20 |
WHERE [Права].[Номер прав]= @НомерПрав |
21 |
AND [Права].[Личный номер сотр.]= [Сотрудник].[Личный номер] |
22 |
AND [Сотрудник].[Код звания]= [Звание].[Код] |
23 |
GO |
Функция 2 «Учет заявлений» | |
24 |
CREATE VIEW [Сведения о заявлениях] AS |
25 |
SELECT |
26 |
[Сотрудник].[ФИО] as 'ФИО Сотрудника', |
27 |
[Заявление].[Основание], |
28 |
[Заявление].[Текст], |
29 |
[Заявление].[Номер заявления], |
30 |
[Заявление].[Паспорт Заявителя], |
31 |
[Заявитель].[Дата рождения], |
32 |
[Заявитель].[ФИО] as 'ФИО Заявителя', |
33 |
[Заявитель].[Адрес], |
34 |
[Заявитель].[Телефон] |
35 |
FROM [Сотрудник],[Заявление],[Заявитель] |
36 |
WHERE [Заявитель].[Паспортные данные] = [Заявление].[Паспорт заявителя] |
37 |
AND [Сотрудник].[Личный номер] = [Заявление].[Личный номер сотр.] |
38 |
GO |
39 |
CREATE PROCEDURE [Сведения о сотруднике, принявшем заявление] |
40 |
@НомерЗаявления [номер] AS |
41 |
SELECT [Должность].[Название должности], |
42 |
[Сотрудник].[ФИО], |
43 |
[Сотрудник].[Телефон], |
44 |
[Сотрудник].[Паспортные данные], |
45 |
[Сотрудник].[Паспортные данные], |
46 |
[Заявление].[Номер заявления] |
47 |
FROM [Должность],[Сотрудник],[Заявление] |
48 |
WHERE [Заявление].[Номер заявления]= @НомерЗаявления |
49 |
AND [Заявление].[Личный номер сотр.]= [Сотрудник].[Личный номер] |
50 |
AND [Сотрудник].[Код должности] = [Должность].[Код] |
51 |
GO |
Функция 3 «Учет практических экзаменов» | |
52 |
CREATE VIEW [Сведения о теоретических экзаменах по вождению] AS |
53 |
SELECT |
54 |
[Сотрудник].[ФИО] as 'ФИО Сотрудника', |
55 |
[Теоретический экзамен].[Кол-во неправ. ответов], |
56 |
[Теоретический экзамен].[Дата сдачи], |
57 |
[Курсант].[Паспортные данные], |
58 |
[Курсант].[ФИО] |
59 |
FROM [Сотрудник],[Теоретический экзамен],[Курсант] |
60 |
WHERE [Курсант].[Паспортные данные] = [Теоретический экзамен].[Паспорт курсанта] |
61 |
AND [Сотрудник].[Личный номер] = [Теоретический экзамен].[Личный номер сотр.] |
62 |
GO |
63 |
|
64 |
CREATE PROCEDURE [Сведения о курсанте, проходившем теоретический экзамен по вождению] |
65 |
@НомерТеоретическогоЭкзамена [номер] AS |
66 |
SELECT [Теоретический экзамен].[НПП], |
67 |
[Курсант].[Паспортные данные], |
68 |
[Курсант].[ФИО], |
69 |
[Курсант].[Номер автошколы] |
70 |
FROM [Теоретический экзамен],[Курсант] |
71 |
WHERE [Теоретический экзамен].[НПП]= @НомерТеоретическогоЭкзамена |
72 |
AND [Теоретический экзамен].[Паспорт курсанта]= [Курсант].[Паспортные данные] |
73 |
GO |
Функция 4 «Учет теоретических экзаменов» | |
74 |
CREATE VIEW [Дежурства] AS |
75 |
SELECT [Дежурства].[Нпп], |
76 |
[Дежурства].[Личный номер дежурного], |
77 |
[Дежурства].[Нпп наряда], |
78 |
[Дежурства].[Дата], |
79 |
[Сотрудник].[ФИО], |
80 |
FROM [Сотрудник],[Дежурство] |
81 |
WHERE [Дежурство].[Личный номер дежурного]=[Сотрудник].[Личный номер] |
82 |
ORDER BY [Дежурство].[Дата]; |
83 |
|
84 |
CREATE PROCEDURE [Состав дежурного наряда] |
85 |
@Дата DATE AS |
86 |
SELECT [Дежурство].[Нпп], |
87 |
[Дежурство].[Дата], |
88 |
[Группа].[Номер группы], |
89 |
[Сотрудник].[Личный номер], |
90 |
[Сотрудник].[ФИО] |
91 |
FROM [Дежурство],[Наряд],[Группа],[Сотрудник] |
92 |
WHERE [Дежурство].[Дата]=@Дата |
93 |
AND [Дежурство].[Нпп наряда]=[Наряд].[Нпп] |
94 |
AND [Наряд].[Номер группы]=[Группа].[Номер группы] |
95 |
AND [Группа].[Личный номер]=[Сотрудник].[Личный номер]; |
96 |
ORDER BY [Группа].[Номер группы]; |
Функция 5 «Учет кадров» | |
97 |
CREATE VIEW [Сведения о сотрудниках] AS |
98 |
SELECT [Сотрудник].[Личный номер], |
99 |
[Сотрудник].[ФИО], |
100 |
[Сотрудник].[Дата рождения], |
101 |
[Сотрудник].[Паспортные данные], |
102 |
[Звание].[Звание] |
103 |
FROM [Сотрудник],[Звание] |
104 |
WHERE [Сотрудник].[Код звания]=[Звание].[Код] |
105 |
GO |
106 |
|
107 |
CREATE PROCEDURE [Сведение о карьере сотрудника] |
108 |
@ЛичныйНомер [номер] AS |
109 |
SELECT [Сотрудник].[Личный номер], |
110 |
[Сотрудник].[ФИО], |
111 |
[Место].[НПП], |
112 |
[Место].[Дата назначения], |
113 |
[Место].[Дата увольнения], |
114 |
[Подразделение].[Название] |
115 |
FROM [Сотрудник],[Место],[Подразделение] |
116 |
WHERE [Сотрудник].[Личный номер]= @ЛичныйНомер |
117 |
AND [Место].[Личный номер сотр.]= @ЛичныйНомер |
118 |
AND [Место].[Код подразделения]=[Подразделение].[Код] |
119 |
GO |