Слайд 1Курсовой проект
Дисциплина «СУБД»
Тема: «Разработка базы данных для системы «Учесть обслуживание,
технический осмотр и ремонт лифтов в домах города Сыктывкар компанией
ООО «ОТИС-Лайн»»»
Вьюгин Антон ИСТ-09
Слайд 2Цель
Целью данного курсового проекта является построение физической модели базы данных
для автоматизированной системы.
Слайд 3Задачи
Переход от логической модели базы данных к физической.
Создание выходных
форм, а именно хранимых процедур и функций
Организация обеспечения безопасности базы
данных.
Оптимизация базы данных за счет индексов и анализа запросов.
Тестирование базы данных.
Слайд 4Функции системы
Управление данными (добавление/правка данных):
О вызовах на устранение неисправностей
в работе лифтов и ЛДСС;
О технических осмотрах лифтов и
ЛДСС;
Об аварийных обслуживаниях лифтов и ЛДСС;
О личных данных электромехаников
Формирование необходимых форм отчетов:
Личная карточка каждого лифта со всей историей.
Отчет о работе аварийных электромехаников.
Отчет о работе основных электромехаников
Полный отчет работы организации
Слайд 5Создание таблиц
Были созданы следующие таблицы:
Street (Улица) - справочник
Electrician (Электромеханик) -
справочник
TypeOfApplication (Вид заявки) - справочник
Defect (Неисправность) - справочник
Elevators (Лифт)
Request (Заявка)
Orders
(Наряд)
Defects (Неисправности)
Слайд 6Именование объектов
Таблицы базы данных именуются в соответствии с их
содержимым и на английском языке, т.к. он является интернациональным. Например
таблица хранящая в себе данные о лифтах (личный номер, дом, подъезд и т.п.) называется Elevator.
Именование процедур и функций осуществляется по следующему шаблону:
Добавление <имя таблицы>INSERT,
Удаление - < имя таблицы >Delete,
Обновление - < имя таблицы >Update,
Отчетные формы - print<имя объекта или действия>
Слайд 7Таблица Street
CREATE TABLE Street
(IDStreet INT IDENTITY NOT NULL,
NameStreet VARCHAR(40)
NOT NULL );
ALTER TABLE Street
WITH CHECK
ADD CONSTRAINT
IDStreetPrimary PRIMARY KEY (IDStreet),
CONSTRAINT NameStreetUnique UNIQUE (NameStreet);
Слайд 8Логическая модель
См. Приложение 1
Слайд 9Физическая модель
См. Приложение 2
Слайд 10Процедурная целостность
Процедуры добавления данных:
PStreetINSERT
PTypeOfApplicationINSERT
PElectricianINSERT
PDefectINSERT
PElevatorsINSERT
PRequestINSERT
POrdersINSERT
PDefectsINSERT
Процедуры обновления данных:
UpdateStreet
UpdateElectrician
UpdateDefect
UpdateElevators
UpdateRequest
UpdateOrders
UpdateDefects
Процедуры удаления данных:
DeleteStreet
DeleteTypeOfApplication
DeleteElectrician
DeleteDefect
DeleteElevators
DeleteRequest
DeleteOrders
DeleteDefects
Слайд 11Пример
Ввод данных в таблицу Street:
CREATE PROC PStreetINSERT
@NameStreet VARCHAR(40)
AS
INSERT INTO
Street
(NameStreet)
VALUES
(@NameStreet)
Удаление данных из таблицы TypeOfApplication:
CREATE PROC DeleteTypeOfApplication
(@IDTypeOfApplication INT)
AS
DELETE FROM
TypeOfApplication
WHERE IDTypeOfApplication = @ IDTypeOfApplication
Слайд 12Транзакции
Транзакция – неделимая с точки зрения воздействия на БД последовательность
операторов манипулирования данными, приводящая к одному из двух возможных результатов:
либо последовательность выполняется, если все операторы правильные, либо вся транзакция откатывается, если хотя бы один оператор не может быть успешно выполнен.
В данном курсовом проекте транзакции не использовались.
Слайд 13Триггер
Триггер – это откомпилированная SQL-процедура, исполнение которой обусловлено наступлением определенных
событий внутри реляционной базы данных.
Был создан триггер, запрещающий исправлять
разряд электромеханика в отношении Electrician на менее низкий
ALTER TRIGGER LowClass
ON Electrician FOR UPDATE
AS
IF EXISTS
(SELECT 'TRUE'
FROM inserted I
LEFT JOIN deleted D
ON D.IDElectrician=I.IDElectrician
WHERE I.Class BEGIN
RAISERROR (' Нельзя понижать разряд электромеханика!!!',16,1)
ROLLBACK TRAN
END
Слайд 14Выходные формы
Представления:
Printall -Отчет работы всех подразделений сортировка по улицам
print1El -вывод
всех поломанных лифтов с высокой степенью
Процедуры и функции:
PrintPodr -функция вывода
работы подразделения с определенной даты
PrintElevator -Личная карточка лифта со всей историей
Слайд 15Пример представления
Полный отчет работы организации:
CREATE VIEW printall
AS
SELECT NameStreet [Улица],
PersonalNumber [№ лифта],
FIO [ФИО],
TypeOfApp [Вид заявки],
TypeOfDefect [Вид неисправности],
BreakDescription [Описание поломки],
BreakLevel [степень],
BreakTime [время поломки]
FROM Street ST INNER JOIN Elevator EL
ON ST.IDStreet=EL.IDStreet
INNER JOIN Request RE
ON EL.IDElevator=RE.IDElevator
INNER JOIN TypeOfApplication TA
ON RE.IDTypeOfApplication=TA.IDTypeOfApplication
INNER JOIN Orders ORD
ON RE.IDRequest=ORD.IDRequest
INNER JOIN Electrician ELC
ON ORD.IDElectrician=ELC.IDElectrician
INNER JOIN Defects DFS
ON ORD.IDOrders=DFS.IDOrders
INNER JOIN Defect DF
ON DFS.IDDefect=Df.IDDefect
Слайд 16Обеспечение безопасности
Было создано две роли:
Dispatchers (Диспетчеры)
Administrators (Администраторы)
На каждую роль были
созданы пользователи:
Dispatcher1 (Диспетчер1)
Dispatcher2 (Диспетчер2)
Dispatcher3 (Диспетчер3)
Administrator1 (Администратор1)
Administrator2 (Администратор2)
Ролям были выделены следующие
права доступа:
Слайд 17Обеспечение безопасности
--роль диспетчеры
CREATE ROLE Dispatchers
--роль Администраторы
CREATE ROLE Administrators
-- пользователь –
Диспетчер1
USE Elevator
CREATE USER Dispatcher1
WITHOUT LOGIN
……………………
-- пользователь – Администратор1
USE Elevator
CREATE USER
Administrator1
WITHOUT LOGIN
……………………….
--добавление членов в роль Dispatchers
sp_addrolemember Dispatchers,
Dispatcher1
sp_addrolemember Dispatchers,
Dispatcher2
sp_addrolemember Dispatchers,
Dispatcher3
--добавление членов в роль Administrators
sp_addrolemember Administrators,
Administrator1
sp_addrolemember Administrators,
Administrator2
Слайд 18Оптимизация
Индекс – особый объект БД, создаваемый с целью увеличения
производительности поиска данных.
Помимо кластеризованных, в данном курсовом проекте
были использованы некластеризованные индексы, которые накладывались на внешние ключи, и индексы с ограничением на уникальность.
Примеры индексов:
--TypeOfApplication
CREATE UNIQUE INDEX UniqueTypeOfApplicationIndex
ON TypeOfApplication (TypeOfApp ASC)
--Defect
CREATE UNIQUE INDEX UniqueDefectIndex
ON Defect (TypeOfDefect ASC)
--Elevators
CREATE NONCLUSTERED INDEX ElevatortsIDStreet
ON Elevators (IDStreet ASC)
CREATE UNIQUE INDEX UniqueElevatorsIndex
ON Elevators (Building, Door, PersonalNumber ASC)
Слайд 19Тестирование
Вывод отчетов
Вывод работы аварийных электромехаников
SELECT * FROM
PrintPodr ('05.07.2011 012:00:00:00',‘Аварийный
электромеханик')
Перечень адресов и регистрационных номеров лифтов и ЛДСС, аварийное обслуживание
которых осуществляется данной ЛАС (ДПАС):
SELECT * FROM PrintElevator (6)
Слайд 20Тестирование
Вывод отчетов
SELECT * FROM
printall
Наряд на устранение неисправностей в работе
лифтов и ЛДСС:
Слайд 21Заключение
Создана физическая модель базы данных Elevator из сущностей Street, Electrician,
TypeOfApplication, Defect, Elevators, Request, Orders, Defects.
Обеспечена целостность БД с
использованием декларативных (ограничения PRIMARY KEY, FOREIGN KEY, UNIQUE и CHECK) и процедурных методов (PStreetINSERT, UpdateStreet, TRIGGER LowClass и др.)
Созданы хранимые процедуры и функции для вывода отчетных форм (Printall, print1El, PrintPodr, PrintElevator)
Созданы роли (Dispatcher, Administrator) и пользователи для обеспечения безопасности базы данных.
Оптимизирована база данных за счет индексов.
Произведено тестирование базы данных.