Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
2
P Дата_Рождения Дата рождения сотрудника Datetime
S Адрес Адрес проживания сотрудника Varchar(50)
T Количество_детей Количество детей сотрудника Int
U ФИО_сотрудника ФИО сотрудника Varchar(50)
V Должность Должность сотрудника Varchar(50)
W Оклад Оклад сотрудника Int
Решение:
0) Приводим функциональные зависимости из F к виду X->A.
3
F={D->A, D->B, D->C, D->G, A->H, A->I, L->M, L->N, O->P, O->S, O->G, O->T, O->A,
O->L, O->U, O->V, O->W}.
К множеству F добавляем функциональную зависимость вида R->A, где R=R1,..,Rm, A не
принадлежит R:
F={D->A, D->B, D->C, D->G, A->H, A->I, L->M, L->N, O->P, O->S, O->G, O->T, O->A,
O->L, O->U, O->V, O->W, DABCGHILMNOPSTLUVW ->Q}.
A->H:
(A)+[F\A->H] = <A, AI >
H не является подмножеством (A)+, поэтому A->H неизбыточно в F.
A->I:
(A)+[F\A->I] = <A, AH >
I не является подмножеством (A)+, поэтому A->I неизбыточно в F.
L->M:
(L)+[F\L->M] = <L, LN >
M не является подмножеством (L)+, поэтому L->M неизбыточно в F.
L->N:
4
(L)+[F\L->N] = < L, LM >
N не является подмножеством (L)+, поэтому L->N неизбыточно в F.
O->P:
(O)+[F\O->P] = < O,OSGT >
P не является подмножеством (O)+, поэтому O->P неизбыточно в F.
O->S:
(O)+[F\O->S] = < O,OPGT >
S не является подмножеством (O)+, поэтому O->S неизбыточно в F.
O->G:
(O)+[F\O->G] = < O,OPST >
G не является подмножеством (O)+, поэтому O->G неизбыточно в F.
O->T:
(O)+[F\O->T] = < O,OPSG >
T не является подмножеством (O)+, поэтому O->T неизбыточно в F.
O->A:
(O)+[F\O->A] = <O, O>
A не является подмножеством (O)+, поэтому O->A неизбыточно в F.
O->L:
(O)+[F\O->L] = < O,OUVW>
L не является подмножеством (O)+, поэтому O->L неизбыточно в F.
O->U:
(O)+[F\O->U] = < O,OLVW,OLVWMN >
U не является подмножеством (O)+, поэтому O->U неизбыточно в F.
O->V:
(O)+[F\O->V] = < O,OLUW, OLUWMN >
V не является подмножеством (O)+, поэтому O->V неизбыточно в F.
O->W:
(O)+[F\O->W] = < O,OLUV, OLUVMN >
W не является подмножеством (O)+, поэтому O->W неизбыточно в F.
DABCGHILMNOPSTLUVW ->Q:
(DABCGHILMNOPSTLUVW)+[F\DABCGHILMNOPSTLUVW->Q]=
<DABCGHILMNOPSTLUVW>
5
Q не является подмножеством (DABCGHILMNOPSTLUVW)+, поэтому
DABCGHILMNOPSTLUVW ->Q неизбыточно в F.
Полученное неизбыточное покрытие для множества Fc:
Fn={D->A, D->B, D->C, D->G, A->H, A->I, L->M, L->N, O->P, O->S, O->G, O->T, O-
>A, O->L, O->U, O->V, O->W, DABCGHILMNOPSTLUVW ->Q}.
DABCGHILMNOPSTLUVW ->Q:
(DBCGHILMNOPSTLUVW)+[F]=<DBCGHILMNOPSTLUVW,
DBCGHILMNOPSTLUVWA, DBCGHILMNOPSTLUVWAQ>
Q является подмножеством (DBCGHILMNOPSTLUVW)+, поэтому A избыточно в F.
DBCGHILMNOPSTLUVW ->Q:
(DCGHILMNOPSTLUVW)+[F]=<DCGHILMNOPSTLUVW,
DCGHILMNOPSTLUVWAB, DCGHILMNOPSTLUVWABQ>
Q является подмножеством (DCGHILMNOPSTLUVW)+, поэтому B избыточно в F.
DCGHILMNOPSTLUVW ->Q:
(DGHILMNOPSTLUVW)+[F]=<DGHILMNOPSTLUVW,
DGHILMNOPSTLUVWABC, DGHILMNOPSTLUVWABCQ>
Q является подмножеством (DGHILMNOPSTLUVW)+, поэтому C избыточно в F.
DGHILMNOPSTLUVW ->Q:
6
(DHILMNOPSTLUVW)+[F]=<DHILMNOPSTLUVW, DHILMNOPSTLUVWABCG,
DHILMNOPSTLUVWABCGQ>
Q является подмножеством (DHILMNOPSTLUVW)+, поэтому G избыточно в F.
DHILMNOPSTLUVW ->Q:
(DILMNOPSTLUVW)+[F]=<DILMNOPSTLUVW,DILMNOPSTLUVWABCGH,
DILMNOPSTLUVWABCGHQ>
Q является подмножеством (DILMNOPSTLUVW)+, поэтому H избыточно в F.
DILMNOPSTLUVW ->Q:
(DLMNOPSTLUVW)+[F]=<DLMNOPSTLUVW, DLMNOPSTLUVWABCGHI,
DLMNOPSTLUVWABCGHIQ>
Q является подмножеством (DLMNOPSTLUVW)+, поэтому I избыточно в F.
DLMNOPSTLUVW ->Q:
(DMNOPSTLUVW)+[F]=<DMNOPSTLUVW, DMNOPSTLUVWABCGHIL,
DMNOPSTLUVWABCGHILQ>
Q является подмножеством (DMNOPSTLUVW)+, поэтому L избыточно в F.
DMNOPSTLUVW ->Q:
(DNOPSTLUVW)+[F]=<DNOPSTLUVW, DNOPSTLUVWABCGHILM,
DNOPSTLUVWABCGHILMQ>
Q является подмножеством (DNOPSTLUVW)+, поэтому M избыточно в F.
DNOPSTLUVW ->Q:
(DOPSTLUVW)+[F]=<DOPSTLUVW, DOPSTLUVWABCGHILMN,
DOPSTLUVWABCGHILMNQ>
Q является подмножеством (DOPSTLUVW)+, поэтому N избыточно в F.
DOPSTLUVW ->Q:
7
(DPSTLUVW)+[F]=<DPSTLUVW, DOPSTLUVWABCGHILMN,
DOPSTLUVWABCGHILMNQ>
Q не является подмножеством (DOPSTLUVW)+, поэтому O не избыточно в F.
DOPSTLUVW ->Q:
(DOSTLUVW)+[F]=<DOSTLUVW, DOSTLUVWABCGHILMNP,
DOSTLUVWABCGHILMNPQ>
Q является подмножеством (DOSTLUVW)+, поэтому P избыточно в F.
DOSTLUVW ->Q:
(DOTLUVW)+[F]=<DOTLUVW, DOTLUVWABCGHILMNPS,
DOTLUVWABCGHILMNPSQ>
Q является подмножеством (DOTLUVW)+, поэтому S избыточно в F.
DOTLUVW ->Q:
(DOLUVW)+[F]=<DOLUVW, DOTLUVWABCGHILMNPS,
DOTLUVWABCGHILMNPSQ>
Q является подмножеством (DOLUVW)+, поэтому T избыточно в F.
DOLUVW ->Q:
(DOUVW)+[F]=<DOUVW, DOLUVWABCGHILMNPST,
DOLUVWABCGHILMNPSTQ>
Q является подмножеством (DOUVW)+, поэтому L избыточно в F.
DOUVW ->Q:
(DOVW)+[F]=<DOVW, DOVWABCGHILMNPSTLU,
DOVWABCGHILMNPSTLUQ>
Q является подмножеством (DOVW)+, поэтому U избыточно в F.
DOVW ->Q:
(DOW)+[F]=<DOW, DOWABCGHILMNPSTLUV, DOWABCGHILMNPSTLUVQ>
Q является подмножеством (DOW)+, поэтому V избыточно в F.
8
DOW ->Q:
(DO)+[F]=<DO, DOABCGHILMNPSTLUVW, DOABCGHILMNPSTLUVWQ>
Q является подмножеством (DO)+, поэтому W избыточно в F.
9
Были обнаружены следующие эквивалентные детерминанты:
D<->D<->D<->D
A<->A
L<->L
O<->O<->O<->O<->O<->O<->O<->O<->O
Полученные классы эквивалентности:
10
Так как J пустое, F1 = F.
Полученное множество F1:
F1={
1) E(D)={ D->A, D->B, D->C, D->G }
2) E(A)={A->H, A->I }
3) E(L)={L->M, L->N }
4) E(O)={O->P, O->S, O->G, O->T, O->A, O->L, O->U, O->V, O->W}
5) E(DO)={DO->Q}
}.
6) Строим схемы R1,..,Rm.
Каждая схема Ri содержит атрибуты функциональных зависимостей
из i-того класса эквивалентности.
Из схемы R5 удаляем атрибут "Q".
Полученные схемы отношений в третьей нормальной форме (3FN):
R1=DABCG k1={D}
R2=AHI k2={A}
R3=LMN k3={L}
R4=OPSGTALUVW k4={O}
R5=DO k5={DO}
Синтезированная схема базы данных в третьей нормальной форме (3NF):
BD = {(DABCG,{D}),(AHI,{A}),(LMN,{L}),( OPSGTALUVW,{O}),(DO,{DO})}
12
2. Создание базы данный в SQL-Server
В данной главе будет происходить создание базы данных с помощью Microsoft SQL Server
Management Studio 18. Кроме создания базы данных, она будет заполнена, будут созданы
новые отношения, ограничения целостности, ключи, представления и синонимы.
13
);
USE Acident
14
GO
ALTER TABLE персональные_данные
ADD CONSTRAINT FK_персонально FOREIGN KEY (ID_сотрудника)
REFERENCES сотрудники (ID_сотрудника)
GO
GO
ALTER TABLE сотрудники
ADD CONSTRAINT FK_сотрудники_случай FOREIGN KEY (ID_сотрудника)
REFERENCES сотрудник_несчастный_случай (ID_сотрудника)
GO
ALTER TABLE сотрудники
ADD CONSTRAINT FK_сотрудники FOREIGN KEY (Номер_отдела)
REFERENCES отделы(Номер_отдела)
GO
ALTER TABLE сотрудник_несчастный_случай
ADD CONSTRAINT FK_сотнес FOREIGN KEY (ID_несчастного_случая)
REFERENCES несчастные_случаи (ID_несчастного_случая)
GO
Рис. 2.1
17
--Создание представлений Было создано 2 представления. 1 Выводим информацию о
--несчастных случаях и ID сотрудника с которым этот случай произошел.
CREATE VIEW Nesciastie AS
SELECT a. [Код_уровня_серьзности], a. [ID_несчастного_случая], a.
[Код_типа_несчастного_случая], b. [ID_сотрудника]
FROM firstshema.несчастные_случаи a inner join dbo.сотрудник_несчастный_случай b
ON a.[ID_несчастного_случая] = b.[ID_несчастного_случая]
WITH CHECK OPTION
GO
SELECT* from Nesciastie
18
3. Создание запросов к базе данных
Рис.3.1
2) В данном запросе мы делаем пересечение отношений сотрудники и отделы
по Номеру отдела. (Показываем отделы в которых работают сотрудники. Они
работают в 1-4, 5-10 пока существуют лишь на бумаге) (Рис.3.2).
select [Номер_отдела]
from сотрудник
intersect
select [Номер_отдела]
from отделы
order by [Номер_отдела]
19
Рис.3.2
Рис.3.3
20
4) Данный запрос делает декартово произведение отношении отделы и сотрудники (Рис.3.4).
select отделы.*, сотрудники.[ID_сотрудника], сотрудники.[номер_отдела] as Сотрудник,
сотрудники.[Должность]
from отделы, сотрудники
order by [Оклад]
Рис.3.4
from сотрудник_несчастный_случай,сотрудники
where сотрудник_несчастный_случай.[ID_сотрудника] = сотрудники.[ID_сотрудника]
order by [ID_сотрудника]
Рис.3.5
21
6) В данном запросе выполняется Внешнее соединение. Вывод ID сотрудников и ID их
несчастных случаев и номера отделов где они работают. (Рис.3.6):
Рис.3.6
Рис.3.7
22
8) Полу соединение (Вывод только стандартной информации из таблицы сотрудники о
сотрудниках при совпадении Номеров отделов с таблицей отделы) (Рис.3.8):
select сотрудники.*
from сотрудники,[отделы]
where сотрудники.[Номер_отдела] = [отделы].[Номер_отдела]
order by [Номер_отдела]
Рис.3.8
23
Рис.3.9
Рис. 3.10
24
Рис. 3.11
Рис. 3.12
Рис. 3.13
25
Рис. 3.14
Рис. 3.14.1
26
Рис. 3.14.2
3.4. Подзапросы
1) В данном коррелированном запросе мы получаем список информации о
персональных данных сотрудников, если если они работают во 2 отделе (Рис.3.15):
SELECT *
FROM персональные_данные
WHERE EXISTS (SELECT 1
FROM сотрудники
WHERE сотрудники.ID_сотрудника = персональные_данные.ID_сотрудника AND
сотрудники.Номер_отдела = 2
);
Рис. 3.15
USE [Acident]
SELECT *
FROM secondshema.больничные
WHERE [ID_несчастного_случая] IN ((SELECT [ID_несчастного_случая] FROM
firstshema.несчастные_случаи WHERE [Код_уровня_серьзности] = '10'),8 )
27
Рис. 3.16
Рис. 3.17
28
Рис.3.18
Рис.3.19
29
3.6. Создание хранимых процедур
1) В данном запросе мы создаём хранимую процедуру, которая обновляет
информацию в таблице отделы.(Рис 3.20)
GO
USE Acident
GO
CREATE PROCEDURE NEWOD (@NOD INT,@KOL INT,@FIO VARCHAR(50))
AS
BEGIN
BEGIN TRY
INSERT INTO отделы
VALUES (@NOD,@KOL,@FIO)
END TRY
BEGIN CATCH
PRINT 'Ошибка при выполнении процедуры!'
RETURN -1
END CATCH
END
EXECUTE NEWOD 100,200,'Горыныч'
Рис. 3.20
2) В данном запросе мы сперва создаём новую процедуру, которая просто выводит
нам ФИО сотрудников которые занимают должность работника. Так же запускаем данную
процедуру: (Рис.3.21)
GO
USE Acident
GO
CREATE PROCEDURE simpleSelect
AS
BEGIN
SELECT сотрудники.ФИО_сотрудника, сотрудники.Должность
FROM сотрудники
WHERE сотрудники.Должность LIKE 'работник';
30
END;
GO
EXEC simpleSelect
Рис. 3.21
GO
USE Acident
GO
CREATE TRIGGER Change
ON отделы
AFTER INSERT
AS
DECLARE @nod DATETIME
SET @nod = getdate()
BEGIN TRY
SELECT 'INSERTED ROW', @nod, inserted.[Номер_отдела], inserted.[Количество_сотрудников],
inserted.[ФИО_Нач_Отдела]
FROM INSERTED
END TRY
BEGIN CATCH
PRINT 'Error!'
ROLLBACK TRANSACTION
END CATCH
INSERT INTO отделы VALUES (50,50,'Воронин')
Рис. 3.22
31
Заключение
В результате проведения данной курсовой работы было изучено большое количество
информации о создании и управлении базами данных. В первую очередь база данных была
спроектирована. Для неё создали конечное множество атрибутов, задали множество
функциональных зависимостей, после чего применяя метод синтеза была получена схема БД
в третей нормальной форме.
После проектирования начался этап создания БД. Данная БД была реализована с
помощью Microsoft SQL Server Management Studio 18 c использованием языка T-SQL. После
создания всех отношений были созданы первичные и внешние ключи, ограничения
целостности различного рода.
Последним этапом создания БД было заполнение таблиц картежами. После того как
БД была создана можно приступать к активному её использованию, для этого было
придумано большое количество простых и сложных запросов к базе дынных. Также были
созданы пользователи, логины, процедуры, представлений и синонимов.
32