- •2005.552800.Бд.Кп.Пз т28-320.13
- •5 Проектирование реляционной и внешних моделей
- •5.1 Устранение категорий и явных связей
- •5.3 Разработка моделей внешних представлений
- •5.4 Вывод
- •6 Разработка sql-кода базы данных
- •6.1 Sql-код создания таблиц
- •6.2 Sql-код создания триггеров базы данных
- •6.3 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 [Проверка номера протокола] |
2 | ON [Номер протокола] FOR INSERT, UPDATE AS |
3 |
DECLARE |
4 |
@ID INTEGER (6), |
5 |
BEGIN TRANSACTION |
6 |
SELECT @ID = [Номер протокола] |
7 |
FROM INSERTED |
8 |
IF (EXISTS( |
9 |
SELECT * FROM [Отчет] |
10 |
WHERE [Табельный номер] = @ID)) |
11 |
BEGIN |
12 |
ROLLBACK TRANSACTION |
13 |
RAISEERROR (‘Протокол с таким № уже существует’,16,1) |
14 |
END; |
15 |
|
16 |
CREATE TRIGGER [Проверка инвентарного номера] |
17 | ON [Инвентарный номер] FOR INSERT, UPDATE AS |
18 |
DECLARE |
19 |
@ID INTEGER (6), |
20 |
BEGIN TRANSACTION |
21 |
SELECT @ID = [Инвентарный номер] |
22 |
FROM INSERTED |
23 |
IF (EXISTS( |
24 |
SELECT * FROM [Имущество] |
25 |
WHERE [Инвентарный номер] = @ID)) |
26 |
BEGIN |
27 |
ROLLBACK TRANSACTION |
28 |
RAISEERROR (‘Такой инвентарный номер уже существует’,16,1) |
29 |
END; |
6.3 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 |
FROM [Сотрудник],[Вызов] |
8 |
WHERE [Вызов].[Личный номер дежурного]=[Сотрудник].[Личный номер] |
9 |
ORDER BY [Вызов].[Нпп]; |
10 |
|
11 |
CREATE PROCEDURE [Сведения о группе принявшей вызов] |
12 |
@Вызов_Нпп INTEGER AS |
13 |
SELECT [Вызов].[Нпп вызова], |
14 |
[Вызов].[Номер опер.группы], |
15 |
[Группа].[Личный номер], |
16 |
[Сотрудник].[ФИО], |
17 |
FROM [Вызов],[Группа],[Сотрудник] |
18 |
WHERE [Вызов].[Нпп вызова]= @Вызов_Нпп |
19 |
AND [Вызов].[Номер опер.группы]= [Группа].[Номер группы] |
20 |
AND [Группа].[Личный номер]= [Сотрудник].[Личный номер] |
21 |
ORDER BY [Группа].[Номер группы]; |
Функция 2 «Учет кадров» | |
19 |
CREATE VIEW [Сведения о сотрудниках] AS |
20 |
SELECT [Сотрудник].[Личный номер], |
21 |
[Сотрудник].[ФИО], |
22 |
[Сотрудник].[Дата рождения], |
23 |
[Сотрудник].[Паспортные данные], |
24 |
[Звание].[Звание], |
25 |
FROM [Сотрудник],[Звание] |
26 |
WHERE [Сотрудник].[Код звания]=[Звание].[Код] |
27 |
ORDER BY [Сотрудник].[ФИО]; |
28 |
|
29 |
CREATE PROCEDURE [Сведение о карьере сотрудника] |
30 |
@Личный_номер INTEGER (6) AS |
31 |
SELECT [Сотрудник].[Личный номер], |
32 |
[Сотрудник].[ФИО], |
33 |
[Место].[Нпп], |
34 |
[Место].[Дата назначения], |
35 |
[Место].[Дата увольнения], |
36 |
[Подразделение].[Название] |
37 |
FROM [Сотрудник],[Место],[Подразделение] |
38 |
WHERE [Сотрудник].[Личный номер]=[Место].[Личный номер]= @Личный_номер |
39 |
AND [Место].[Код подразделения]=[Подразделение].[Код] |
40 |
ORDER BY [Место].[Нпп]; |
Функция 3 «Учет материальной части» | |
41 |
CREATE VIEW [Сведения о имуществе] AS |
42 |
SELECT [Имущество].[Инвентарный номер], |
43 |
[Имущество].[Название], |
44 |
[Сотрудник].[ФИО] |
45 |
FROM [Имущество],[Сотрудник] |
46 |
WHERE [Имущество].[Личный номер]=[Сотрудник].[Личный номер] |
47 |
ORDER BY 1; |
48 |
|
49 |
CREATE PROCEDURE [Сведения о приписанном имуществе] |
50 |
@Инв_Номер INTEGER AS |
51 |
SELECT [Имущество].[Инвентарный номер], |
52 |
[Имущество].[Название], |
53 |
[Сотрудник].[ФИО] |
54 |
FROM [Имущество],[Сотрудник] |
55 |
WHERE [Имущество].[Инвентарный номер]= @Инв_Номер |
Функция 4 «График дежурств» | |
56 |
CREATE VIEW [Дежурства] AS |
57 |
SELECT [Дежурства].[Нпп], |
58 |
[Дежурства].[Личный номер дежурного], |
59 |
[Дежурства].[Нпп наряда], |
60 |
[Дежурства].[Дата], |
61 |
[Сотрудник].[ФИО], |
62 |
FROM [Сотрудник],[Дежурство] |
63 |
WHERE [Дежурство].[Личный номер дежурного]=[Сотрудник].[Личный номер] |
64 |
ORDER BY [Дежурство].[Дата]; |
65 |
|
66 |
CREATE PROCEDURE [Состав дежурного наряда] |
67 |
@Дата DATE AS |
68 |
SELECT [Дежурство].[Нпп], |
69 |
[Дежурство].[Дата], |
70 |
[Группа].[Номер группы], |
71 |
[Сотрудник].[Личный номер], |
72 |
[Сотрудник].[ФИО] |
73 |
FROM [Дежурство],[Наряд],[Группа],[Сотрудник] |
74 |
WHERE [Дежурство].[Дата]=@Дата |
75 |
AND [Дежурство].[Нпп наряда]=[Наряд].[Нпп] |
76 |
AND [Наряд].[Номер группы]=[Группа].[Номер группы] |
77 |
AND [Группа].[Личный номер]=[Сотрудник].[Личный номер]; |
78 |
ORDER BY [Группа].[Номер группы]; |
Функция 5 «Отчет о вызовах» | |
79 |
CREATE VIEW [Сведения о вызовах] AS |
80 |
SELECT [Вызов].[Нпп], |
81 |
[Вызов].[Номер опер. группы], |
82 |
[Вызов].[Дата], |
83 |
[Отчет].[Номер протокола], |
84 |
[Отчет].[Мероприятия], |
85 |
[Отчет].[Примечания], |
86 |
FROM [Вызов],[Отчет] |
87 |
WHERE [Отчет].[Нпп вызова]= [Вызов].[Нпп] |
88 |
ORDER BY [Вызов].[Нпп]; |
89 |
|
90 |
CREATE PROCEDURE [Отчет о вызовах] AS |
91 |
@Нпп_Вызова INTEGER AS |
92 |
SELECT [Вызов].[Нпп], |
93 |
[Вызов].[Номер опер. группы], |
94 |
[Вызов].[Дата], |
95 |
[Отчет].[Номер протокола], |
96 |
[Отчет].[Мероприятия], |
97 |
[Отчет].[Примечания], |
98 |
FROM [Вызов],[Отчет] |
99 |
WHERE [Отчет].[Нпп вызова]= [Вызов].[Нпп] = @Нпп_Вызова; |