Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
27.11.2024
Размер:
432.41 Кб
Скачать

sotrudniki ON zakazi.KOD_ISP = sotrudniki.KOD_SOTRUD

WHERE zakazi.KOD_SR BETWEEN GETDATE() AND DATEADD(D, 7, GETDATE())

Результат работы запроса можно посмотреть на рисунке 11.

Рисунок 11 – вывод запроса горящих сроков по проектам

Запрос на вывод всех цен на услуги по убыванию:

SELECT uslugi.NAME_USLUG, uslugi.CENA_USLUG FROM uslugi ORDER BY CENA_USLUG DESC

Результат работы запроса можно посмотреть на рисунке 12.

Рисунок 12 – вывод запроса цен на услуги по убыванию

Запрос прибыли рекламного агентства за последний месяц от каждого сотрудника:

SELECT SUM(uslugi.CENA_USLUG) AS SUM_SOTRUD, sotrudniki.FIO_SOTRUD

FROM zakazi

INNER JOIN

klienti ON zakazi.KOD_ZAK= klienti.KOD_KL INNER JOIN

uslugi ON zakazi.KOD_USLUG = uslugi.KOD_USLUG INNER JOIN

sotrudniki ON zakazi.KOD_ISP = sotrudniki.KOD_SOTRUD 21

WHERE zakazi.KOD_SR BETWEEN DATEADD(M, -1, GETDATE()) AND GETDATE()

GROUP BY sotrudniki.FIO_SOTRUD

Результат работы запроса можно посмотреть на рисунке 13.

Рисунок 13 – запрос прибыли рекламного агентства за последний месяц от каждого сотрудника

4.4 Создание представлений

Создадим представления по 3 последним запросам которые мы сделали:

1.Запрос на вывод заказов в информативной форме

create view ZAPROS_ZAKAZI_VIVOD_V_INFORMATIVNOY_FORME as (

SELECT zakazi.KOD_ZAK, klienti.NAZV_KOMP, zakazi.NOM_DOG, uslugi.NAME_USLUG, zakazi.NAIMEN_ZAK, zakazi.DATA, zakazi.KOD_SR, sotrudniki.FIO_SOTRUD

FROM zakazi

INNER JOIN

klienti ON zakazi.KOD_ZAK = klienti.KOD_KL INNER JOIN

uslugi ON zakazi.KOD_USLUG = uslugi.KOD_USLUG INNER JOIN

sotrudniki ON zakazi.KOD_ISP = sotrudniki.KOD_SOTRUD)

2.Запрос на вывод горящих сроков на предстоящей неделе

create view ZAPROS_GORYASHIH_SROKOV_1_NEDELYA as ( 22

SELECT klienti.NAZV_KOMP, uslugi.NAME_USLUG, zakazi.KOD_SR, sotrudniki.FIO_SOTRUD

FROM zakazi

INNER JOIN

klienti ON zakazi.KOD_ZAK= klienti.KOD_KL INNER JOIN

uslugi ON zakazi.KOD_USLUG = uslugi.KOD_USLUG INNER JOIN

sotrudniki ON zakazi.KOD_ISP = sotrudniki.KOD_SOTRUD

WHERE zakazi.KOD_SR BETWEEN GETDATE() AND DATEADD(D, 7, GETDATE()))

3. Запрос прибыли рекламного агентства за месяц от каждого сотрудника

create view ZAPROS_PRIBILI_AGENSTVA_ZA_MESYAC_OT_SOTRUDNIKA as (

SELECT SUM(uslugi.CENA_USLUG) AS SUM_SOTRUD, sotrudniki.FIO_SOTRUD

FROM zakazi

INNER JOIN

klienti ON zakazi.KOD_ZAK= klienti.KOD_KL INNER JOIN

uslugi ON zakazi.KOD_USLUG = uslugi.KOD_USLUG INNER JOIN

sotrudniki ON zakazi.KOD_ISP = sotrudniki.KOD_SOTRUD

WHERE zakazi.KOD_SR BETWEEN DATEADD(M, -1, GETDATE()) AND GETDATE()

GROUP BY sotrudniki.FIO_SOTRUD)

4.Запрос цен услуг по убыванию

create view ZAPROS_CEN_USLUG_PO_UBIVANIY as ( 23

SELECT uslugi.NAME_USLUG, uslugi.CENA_USLUG FROM uslugi ORDER BY CENA_USLUG DESC)

4.5 Создание транзакций Транзакция – это одна или несколько последовательных команд языка

Transact - SQL, выполняемых как единое целое, образуя логически завершённый пакет.

Если по какой-либо причине хотя бы одна из команд пакета не выполняется, то происходит откат системы к состоянию, в котором она была до начала транзакции, и транзакция считается не выполненной. По умолчанию каждая команда выполняется, как самостоятельная транзакция.

При необходимости в пакете можно явно указать начало и конец транзакции.

Транзакция должна выполняться, не нарушая атомарность,

согласованность, изолированность и долговечность.

Атомарность – правило, при котором изменения выполняемые транзакции либо все выполняются, либо все не выполняются.

Согласованность – правило, при котором все данные после выполнения транзакции должны находиться в согласованном состоянии с соблюдением всех правил и ограничений целостности.

Изолированность – правило, при котором изменения данных различными транзакциями, выполняемыми одновременно, должны быть изолированы.

Долговечность – правило, при котором после завершения транзакции ничто не может вернуть систему в состояние, в котором она была до начала транзакции.

Пример создания транзакции в базе данных «Рекламное агенство»:

Создание транзакции для изменения номера договора в двух таблицах Создадим транзакцию, где запишем старый и новый номер договора в

двух таблицах и выведем эти таблицы для проверки. Результат работы кода предоставлен на рисунке 15.

USE REKLAMNOEAGENSTVO;

24

BEGIN TRANSACTION

ALTER TABLE zakazi DROP CONSTRAINT c_zakazdogovor UPDATE zakaz_dogovor

SET NOM_DOG = 100109

WHERE NOM_DOG = 100108

IF (@@error <> 0)

ROLLBACK

UPDATE zakazi

SET NOM_DOG = 100109

WHERE NOM_DOG = 100108

IF (@@error <> 0)

ROLLBACK

ALTER TABLE zakazi

ADD CONSTRAINT c_zakazdogovor

FOREIGN KEY (NOM_DOG)

REFERENCES zakaz_dogovor(NOM_DOG)

ON DELETE NO ACTION ON UPDATE NO ACTION; COMMIT

SELECT * FROM zakaz_dogovor

SELECT * FROM zakazi

Рисунок 15 – Результат выполнения транзакции

25

4.6 Создание процедуры для смены номера договора

create procedure SMENA_DOGOVORA (@STARIY_DOGOVOR int,@NOVIY_DOGOVOR int) as

BEGIN TRANSACTION

ALTER TABLE zakazi DROP CONSTRAINT c_zakazdogovor UPDATE zakaz_dogovor

SET NOM_DOG = @NOVIY_DOGOVOR

WHERE NOM_DOG = @STARIY_DOGOVOR

IF (@@error <> 0)

ROLLBACK

UPDATE zakazi

SET NOM_DOG = @NOVIY_DOGOVOR

WHERE NOM_DOG = @STARIY_DOGOVOR

IF (@@error <> 0)

ROLLBACK

ALTER TABLE zakazi

ADD CONSTRAINT c_zakazdogovor

FOREIGN KEY (NOM_DOG)

REFERENCES zakaz_dogovor(NOM_DOG)

ON DELETE NO ACTION ON UPDATE NO ACTION; COMMIT

SELECT * FROM zakaz_dogovor

SELECT * FROM zakazi

Вызов процедуры для зачисления денежных средств: execute

SMENA_DOGOVORA 100102, 100112 предоставлен на рисунке 16.

26

Рисунок 16 – результат работы процедуры Триггер, который автоматически записывает в таблицу

HISTORY_NOM_DOG старое и новое значение номера договора и время произведенного изменения. Создадим таблицу HISTORY_NOM_DOG

CREATE TABLE HISTORY_NOM_DOG (Id INT IDENTITY PRIMARY KEY, STARIY INT NOT NULL,

NOVIY INT NOT NULL,

DATA_RED DATETIME NOT NULL DEFAULT GETDATE(),);

Создадим тригер

CREATE TRIGGER IZM_DOG

ON zakaz_dogovor

AFTER UPDATE

AS

INSERT INTO HISTORY_NOM_DOG (STARIY, NOVIY)

SELECT DELETED.NOM_DOG, inserted.NOM_DOG from DELETED, INSERTED

После создания тригера воспользуемся процедурой

SMENA_DOGOVORA 100102, после отработки процедуры зайдем в таблицу

HISTORY_NOM_DOG и посмотрим на созданные записи тригером рисунок

17.

27

Рисунок 17 – результат работы триггера

4.7 Создание ролей

Для упрощения управления правами пользователя SQL Server

предоставляет роли, которые похожи на группы системы безопасности

Windows. Можно поместить отдельных логически связанных пользователей в одну роль, а затем назначить этой роли набор соответствующих прав доступа.

В базе данных «Рекламное агенство» выделено две группы пользователей:

1)Администраторы «administrators», которые будут иметь право просматривать информацию, изменять информацию, добавлять информацию.

2)Операторы «operators», которые могут просматривать информацию, в поисках нужной конкретно им информации.

Изменять структуру самой базы данных ни клиенты, ни администраторы не могут.

Создание ролей и прав в базе данных «Рекламное агенство»: create role administrators

grant insert on HISTORY_NOM_DOG to administrators grant insert on klienti to administrators

grant insert on zakaz_dogovor to administrators grant insert on zakazi to administrators

grant insert on uslugi to administrators grant insert on sotrudniki to administrators create role operators

create role operators

grant select on HISTORY_NOM_DOG to operators 28

grant select on klienti to operators

grant select on zakaz_dogovor to operators grant select on zakazi to operators

grant select on uslugi to operators grant select on sotrudniki to operators

Рисунок 18 – Список существующих ролей

29

ЗАКЛЮЧЕНИЕ

В процессе создания базы данных на тему «Рекламное агентство» были приобретены соответствующие навыки.

Созданная база данных поможет автоматизировать и ускорить работу с данными о заказчиках, то есть внесение данных, изменение и их вывод.

Созданная база данных является реляционной, внесение данных в неё и их изменение упрощены по сравнению с использованием обычной базы данных. Потому в реляционной базе данных не используются таблицы, в

которых повторяются атрибуты, а каждый атрибут индивидуален в определённой таблице и связан с другими с помощью специальных ключей.

Данная БД предоставляет доступ только сотрудникам компании. При изменении определенного свойства объектов не придётся изменять его вручную в каждой таблице, в которой данное свойство упоминалось.

Данные автоматически обновляются или добавляются если изменить значение в таблице где есть внешний ключ.

Данные возможности, которые предоставляет использование реляционной базы данных во многом улучшают работу системы. Но,

несмотря на все это, созданная база данных может быть использована в компании «Рекламное агентство, и в компаниях где есть подобные сущности.

30