- •7 Разработка sql-кода базы данных
- •7.1Sql-код создания таблиц
- •7.1.1 Создание столбцов таблиц
- •7.1.2 Создание ограничений уникальности
- •7.1.3 Создание ограничений атрибутов и кортежей
- •7.1.4 Создание ограничений ссылочной целостности
- •7.1.5 Создание триггеров базы данных
- •7.2 Sql-код создания представлений отображения
- •7.2.1 Представления отображения для функции 1
- •7.2.2 Представления отображения для функции 2
- •7.2.3 Представления отображения для функции 3
- •7.4 Вывод
7.1.5 Создание триггеров базы данных
Для создания триггеров базы данных применяются SQL-операторы CREATE TRIGGER. Они обеспечивают реализации нестандартных ограничений и операционных правил, специфицированных на предыдущем этапе в таблицах 5.4–5.5. При программировании триггеров ориентировались на диалект Transact-SQL для Microsoft SQL Server 2005.
По согласованию с руководителем проекта для реализации были выбран один триггер базы данных, а именно:
– триггер «…», реализующий ограничение … (см. табл. 5._).
CREATE TRIGGER [ПредметнаяОбласть_тип]
ON [Предметная область]FOR INSERT,UPDATE AS
DECLARE
@KodTipa CHAR (6)
BEGIN TRANSACTION
SELECT @KodTipa = [Код типа]
FROM INSERTED
IF NOT EXISTS (
SELECT*FROM тип
WHERE [Код типа] = @KodTipa)
BEGIN
ROLLBACK TRANSACTION
RAISERROR('Несуществующий тип предметной области',16,1)
END
ELSE
BEGIN
COMMIT TRANSACTION
END
7.2 Sql-код создания представлений отображения
В данном подразделе в соответствии со способами и формами представлений на основе модели соединения таблиц записываются SQL-операторы создания виртуальных таблиц (представлений) CREATE VIEW и хранимых процедур CREATE PROCEDURE, которые обеспечивают реализацию внешних представлений базы данных, соответствующих разработанным моделям отображения (см. разд. 6 и документ2008.654600.БД.КР.016.МО«Модели отображения»). Сделан следующий выбор между виртуальными таблицами и хранимыми процедурами при задании представлений отображения:
– для функции 1 «Патенты», требующей вычисление виртуального атрибута, — на основе виртуальных таблиц;
– для функции 2 «Оформление заявки» — на основе хранимых процедур;
– для функции 3 «Лицензии» — на основе виртуальных таблиц (для корневого представления) и хранимых процедур (для остальных представлений).
При программировании ориентировались на диалект Transact-SQL Microsoft SQL Server 2005. Результаты приведены ниже для отдельных функций.
7.2.1 Представления отображения для функции 1
Здесь представлены SQL-операторы CREATE VIEW, предназначенные для создания представлений отображения для функции 1 «Патенты» в соответствии с разработанными концептуальными моделями отображения (см. разд. 6.2.1). Все отображения для этой функции построены в виде виртуальных таблиц (View):
CREATE VIEW [dbo].[VПатенты] AS
SELECT [Патенты].[Рег. номер],
[Патенты].[Код ОИС],
[Документы].[Дата получения],
[ОИС].[Наименование ОИС],
[ОИС].[Код категории],
[ОИС].[Код типа],
[Категория].[Наименование],
COUNT([Патенты].[Рег. номер])AS[Количество авторов]
FROM(((([Патенты]
INNERJOINДокументы
ON[Патенты].[Рег. номер]=Документы.[Рег. номер])
INNERJOIN[ОИС]
ON[Патенты].[Код ОИС]=[ОИС].[Код ОИС])
INNERJOIN[Автор патента]
ON[Автор патента].[Рег. номер]=[Патенты].[Рег. номер])
INNERJOIN[Категория]
ONОИС.[Код категории]=Категория.[Код категории])
GROUPBY[Патенты].[Рег. номер],
[Патенты].[Код ОИС],
[Документы].[Дата получения],
[ОИС].[Код ОИС],
[ОИС].[Наименование ОИС],
[ОИС].[Код категории],
[ОИС].[Код типа],
[Категория].[Наименование]
CREATEVIEW[dbo].[VАвтор]AS
SELECT[Автор].[Код автора],
[Автор].[ФИО автора],
[Автор патента].[Код организации],
[Автор патента].[Код должности],
[Должность].[Название должности],
[Организация].[название организации]
FROM((([Автор]
INNERJOIN[Автор патента]
ON[Автор].[Код автора]=[Автор патента].[Код автора])
INNERJOIN[Должность]
ON[Автор патента].[Код должности]=[Должность].[Код должности])
INNERJOIN[Организация]
ON[Автор патента].[Код организации]=[Организация].[Код организации])
CREATEView[dbo].[VПредметная область]AS
SELECT[Предметная область].[Код типа],
[Тип].[Наименование],
[Предметная область патента].[Примечание]
FROM(([Тип]
INNERJOIN[Предметная область]
ON[Тип].[Код типа]=[Предметная область].[Код типа])
INNERJOIN[Предметная область патента]
ON[Предметная область].[Код типа]=[Предметная область патента].[Код
типа])