Создание хранилища данных для информационной системы
Характеристика перехода от логической модели базы данных к физической. Особенность создания таблиц и ограничений. Отчетные хранимые процедуры и функции. Описание оптимизации проекта за счет индексов и анализа запросов. Проведение процедуры тестирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 16.02.2016 |
Размер файла | 716,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Дипломный проект
Дисциплина «СУБД»
Тема: «Разработка базы данных для системы «Учесть обслуживание, технический осмотр и ремонт лифтов в домах города Сыктывкар компанией ООО «ОТИС-Лайн»»»
Содержание
Введение
1. Постановка задачи
1.1 Описание предметной области
1.2 Функциональные требования
2. Физическая модель
2.1 Используемая СУБД
3. Обеспечение целостности БД
4. Создание таблиц и ограничений
5. Хранимые процедуры
6. Выходные формы
7. Обеспечение безопасности
8. Оптимизация
9. Тестирование
Заключение
Библиографический список
Приложениея
Введение
Каждый работник аварийной службы ООО «ОТИС-Лайн» в соответствии с личными обязанностями ведет свой журнал, отчет или график работы и хранит его у себя, при необходимости предоставляя доступ к ним начальству.
Журналы диспетчера о вызовах на устранение неисправностей, учет лифтов остановленных на ремонт и др. хранятся непосредственно у диспетчера в диспетчерской.
График технического осмотра лифтов основной механик хранит у себя на участке.
Перечень лифтов, для которых осуществляется аварийное обслуживание, хранится у аварийного электромеханика
Вся служба не сосредоточена в одном месте, а располагается в определенных районах города. Более того один отряд электромехаников вместе с мастером отвечают за определенные участки города, т.е. в городе существует несколько подразделений аварийной службы, за которыми закреплены определенные лифты. Таким образом, все журналы с различными данными о лифтах хранятся в разных местах, достаточно независимо и далеко друг от друга. Данная проблема может быть решена объединением всех данных о лифтах в единую базу, которая будет храниться в одном месте.
Конкретная информация о каждом лифте хранится в конкретном журнале, поэтому чтобы учесть все, необходимо использовать сразу несколько различных журналов и записывать необходимые данные в необходимый журнал.
На данный момент получение полной информации о лифте при необходимости происходит с нескольких разных журналах и отчетах, находящихся у различных сотрудников аварийной службы, что замедляет данный процесс. Также, при сборе информации затрагивается финансовая сторона организации, т.к. для сбора информации требуется телефонная связь или поездка на место хранения журнала.
При заполнении журналов, происходит повторение информации. Так, например, отчет о ремонте или техосмотре практически одинаков. Журнал заявок от жильцов так же, от части, учитывается и в нарядах на ремонт и техосмотр, т.к. фактически одно происшествие заполняется во всех журналах. Единая база, позволит избегать излишнего повторения информации.
На этапе изучения предметной области было выяснено были выявлены следующие проблемы:
· Затруднение цельного мобильного учета всех лифтов, закрепленных за данным зональным участком, в составе которого действует служба
· Затруднение цельного оперативного получения информации о лифтах
· Неудобство и длительность составления отчетов в журналах
· Отсутствие наглядности работы всех подразделений ООО «ОТИС-Лайн»
· Хранение информации на бумажных носителях затрудняет ее поиск и возможность использования несколькими пользователями
· Хранение на бумажных носителях увеличивает вероятность потери информации или ее порчи
Для решения данных проблем ставится задача автоматизации процесса «Учета обслуживания, технического осмотра и ремонта лифтов», что является целью данного дипломного проекта. Система организует все данные и историю о каждом лифте, упростит ведение их отчетности, а также ускорит формирование заказов запасных частей снабженцем.
Целью данного проекта является построение физической модели базы данных для автоматизированной системы.
Для достижения поставленной цели будет проделана работа следующего содержания:
В первой главе описывается бизнес-процесс «Учесть обслуживание, технический осмотр и ремонт лифтов в домах города Сыктывкар компанией ООО «ОТИС-Лайн»»». Доказывается актуальность данной работы, ставятся цели.
Во второй главе описывается переход от логической модели базы данных к физической.
Третья глава посвящена выходным формам, а именно хранимым процедурам и функциям, которые были реализованы для выведения отчетности.
В четвертой главе описываются основные методы организации обеспечения безопасности базы данных.
В пятой главе приводится описание оптимизации базы данных за счет индексов и анализа запросов.
В шестой главе приводится тестирование базы данных.
1. Постановка задачи
1.1 Описание предметной области
Лифтовая аварийная служба ООО «ОТИС-Лайн» в соответствии с функциональными обязанностями работников состоит из:
1) электромеханик-дежурный (аварийный механик), вызволяющий людей при аварийной поломки лифта.
2) электромеханик-ремонтник (основной механик), устраняющих неисправности на лифтах и ЛДСС
3) диспетчер, принимающий сигнал с ЛДСС и отправляющих электромехаников на место поломки/ аварийной поломки лифта.
4) Мастер - ответственный за организацию аварийного обслуживания лифтов и ЛДСС
5) Снабженец запчастями, который производит заказ запасных частей по запросам мастеров. Каждый мастер в свою очередь организуют заказ с запросов электромехаников, за которых он отвечает.
Оперативное устранение неисправностей осуществляется подразделением ООО «ОТИС-Лайн» только на лифтах и ЛДСС, техническое обслуживание которых ведется ООО «ОТИС-Лайн»
Лифтовая аварийная служба в соответствии с функциональными обязанностями работников должна состоять из электромехаников-дежурных (аварийный механик) по пункту ЛАС, электромехаников-ремонтников (основной механик), устраняющих неисправности на лифтах и ЛДСС, а также диспетчеров, принимающих сигнал с ЛДСС и отправляющих на место поломки электромехаников.
Бригадой электромехаников, осуществляющих техническое обслуживание лифтов и ЛДСС (далее - линейная бригада), производится аварийное обслуживание только лифтов и ЛДСС закрепленных за прорабским (мастерским) участком, в составе которого действует бригада. В этом случае ответственность за организацию аварийного обслуживания возлагается приказом начальника подразделения объединения на прораба (мастера) этого участка. Диспетчер осуществляет учет и регулирование деятельности организации или его подразделения. Все отчеты и журналы передаются от одного диспетчера к другому по сменам и заполняются после каждой заявки и ее исполнении. При необходимости, все ведущиеся журналы диспетчер может предоставлять мастеру, старшему диспетчеру или же другому ответственному за организацию аварийного обслуживания лифтов.
Диспетчер в своей работе непосредственно подчинен ответственному за организацию аварийного обслуживания.
В течение смены диспетчер обязан:
· Принимать заявки на устранение неисправностей в работе лифтов и ЛДСС с занесением их в «Журнал регистрации вызовов на устранение неисправностей в работе лифтов и ЛДСС», с последующим заполнением данного журнала по данным заполненных электромеханиками Нарядов на устранение неисправностей.
· Направлять ремонтные бригады на устранение неисправностей в работе лифтов и ЛДСС с вручением электромеханику-ремонтнику «Наряда на устранение неисправностей в работе лифтов и ЛДСС»
· Вести учет лифтов и ЛДСС, находящихся на ремонтах с оформлением в «Журнале учета лифтов и ЛДСС, остановленных на ремонты»
Электромеханик-дежурный в своей работе непосредственно подчинен ответственному за организацию аварийного обслуживания. В период работы он должен находится на пункте ДПАС и выезжать на аварийную поломку лифта по указанию диспетчера с получением от вышеупомянутого Наряда на устранение неисправности. В Наряд аварийный электромеханик вписывает данные об аварии и (после возможном устранении неисправности или же просто после эвакуации пассажиров) отдает его диспетчеру.
Отчет о работе аварийный электромеханик ведет в «Перечне адресов и регистрационных номеров лифтов и ЛДСС, аварийное обслуживание которых осуществляется данной ЛАС (ДПАС)», заполняет после каждого выезда на аварийную поломку лифта и хранит у себя на пункте ДПАС. При необходимости аварийный электромеханик может предоставить свою отчетность мастеру или диспетчеру. Электромеханик-ремонтник ЛАС подчиняется ответственному за организацию аварийного обслуживания лифтов и ЛДСС, а в оперативном отношении электромеханику-дежурному по пункту ЛАС. В период работы электромеханик-ремонтник должен находиться на пункте ЛАС (ДПАС) или опорном пункте и выезжать (выходить) на устранение неисправностей по указанию диспетчера, получая Наряд на устранение неисправностей, а в случае, когда заявка передается по телефону, она оформляется электромехаником-ремонтником соответствующей записью в наряде. Наряд отдается диспетчеру для заполнения «Журнала регистрации вызовов на устранение неисправностей в работе лифтов и ЛДСС».
Основной работой электромеханика-ремонтника является технический осмотр лифтов закрепленных за ним. Сведения об осмотре и возможном ремонте лифтов основной электромеханик фиксирует в «Журналах технических осмотров», закрепленных каждый за своим лифтом и находящихся в машинном отделении лифта. Осмотр каждого лифта и внесение записей об осмотре производится раз в месяц. При необходимости основной электромеханик может предоставить свою отчетность мастеру или диспетчеру. В настоящее время информация о каждом лифте хранится в отдельных журналах, которые располагаются в машинных отделениях лифтов, информация о регистрации вызовов на устранение неисправностей в работе лифтов находится в журнале у диспетчера, а журнал технических осмотров и ремонтов лифтов находится у электромеханика-ремонтника. Такая организация хранения информации приводит к отсутствию возможности оперативного просмотра полной истории лифтов и ЛДСС, а также работы подразделений службы
1.2 Функциональные требования
Система должна выполнять следующие функции:
Предоставлять инструменты по управлению данными системы:
1) Добавление/правка данных о вызовах на устранение неисправностей в работе лифтов и ЛДСС;
2) Добавление/правка данных о технических осмотрах лифтов и ЛДСС;
3) Добавление/правка данных об аварийных обслуживаниях лифтов и ЛДСС;
4) Добавление/правка данных о личных данных электромехаников
Система должна выполнять формирование необходимых форм отчетов и статистик:
1) Личная карточка каждого лифта со всей историей.
2) Отчет о работе аварийных электромехаников.
3) Отчет о работе основных электромехаников
4) Полный отчет работы организации
Ограничения на данные:
1) В системе нельзя понижать разряд электромеханика на меньший
2) В системе не должно быть повторяющихся данных в справочниках
3) Необходимы ограничения на проверку даты рождения электромехаников, чтобы они были не моложе 20 лет
4) Необходимо ограничить варианты видов заявки на: техосмотр, застревание, поломка.
2. Физическая модель
Перед построением физической модели базы данных было проведено концептуальное и логическое проектирование в пятом семестре, в ходе выполнения проекта по дисциплине «Управление данными».
При анализе предметной области, были выделены основные сущности, участвующие в процессе учета обслуживания лифтов, и на их основе была смоделирована концептуальная модель.
На основе концептуальной модели была построена логическая модель данных, которая является начальным прототипом будущей базы данных. Кроме того, были сгенерированы отношения.
Поскольку логическая модель не учитывает всех особенностей целевой СУБД, то следующим этапом проектирования является разработка физической модели базы данных, которая тоже в свою очередь подразделяется на несколько этапов. Первый - создание таблиц в целевой СУБД и поддержание согласованности данных с помощью ограничений. Такой метод поддержания целостности называется декларативным. Второй этап - анализ бизнес-правил, налагаемых на БД, и применение императивных средств для их поддержания (в случае, если декларативных средств СУБД для этого недостаточно). В качестве императивных средств могут выступать триггеры. Такой вид целостности называется процедурным.
2.1 Используемая СУБД
В качестве основного средства для разработки физической модели базы данных на тему «Учесть обслуживание, технический осмотр и ремонт лифтов в домах города Сыктывкар компанией ООО «ОТИС-Лайн»»» была выбрана СУБД Microsoft SQL Server 2008.
Аргументами в пользу этого программного обеспечения стали:
· Наличие опыта работы с этой СУБД в рамках практических занятий по дисциплине «СУБД»;
· Microsoft SQL Server 2008 проста в использовании и поддерживает все необходимые для создания проекта средства, такие как: хранимые процедуры и функции, представления, транзакции, триггеры и курсоры;
· Microsoft SQL Server 2008 предоставляет точный и гибкий контроль для обеспечения безопасности данных: разделение доступа к данным между разными пользователями через роли и схемы.
3. Обеспечение целостности БД
Обеспечение целостности базы данных осуществляется за счет декларативной и процедурной целостности.
Декларативная целостность неразрывно связана с физической структурой таблиц БД и осуществляется при помощи некоторых условий (ограничений), налагаемых на столбцы или таблицы. Этот вид поддержания согласованности данных гарантирует, что хранимая информация будет удовлетворять определенным в таблицах правилам. Кроме того, декларативные ограничения целостности обеспечивают высокое быстродействие, что, несомненно, является плюсом.
Ограничение PRIMARY KEY было наложено на все таблицы, т.к. необходим первичный ключ для связи таблиц, также происходит обеспечение отсутствия NULL-значений этих первичных ключей.
В системе не должно быть повторяющихся данных в справочниках. Для осуществления данного бизнес-правила было использовано ограничение UNIQUE.
Данное ограничение было наложено на атрибуты таблиц: Street, Electrician, TypeOfApplication, Defect.
ALTER TABLE Street
WITH CHECK
ADD CONSTRAINT IDStreetPrimary PRIMARY KEY (IDStreet),
CONSTRAINT NameStreetUnique UNIQUE (NameStreet);
ALTER TABLE TypeOfApplication
WITH CHECK
ADD CONSTRAINT IDTypeOfApplicationPrimary PRIMARY KEY (IDTypeOfApplication),
CONSTRAINT TypeOfAppUnique UNIQUE (TypeOfApp);
В системе необходимы ограничения на проверку даты рождения электромехаников, чтобы они были не моложе 20 лет. Данное бизнес-правило было реализовано за счет ограничения CHECK, так как его можно реализовать при помощи него не используя например триггер либо транзакцию, т.к. check проще и выполняется в базе быстрее процедурных методов обеспечения целостности БД.
ALTER TABLE Electrician
WITH CHECK
ADD CONSTRAINT ElClassCheck CHECK (Class BETWEEN 1 AND 4),
CONSTRAINT ElectricianBirthdayCheck CHECK (DATEDIFF(year,Birthday,getDate())>20)
EXEC PElectricianINSERT
Пупкин Петр Сергеевич','4','Аварийный электромеханик','03.11.2011'
Если электромеханик не выполнил задание, то он не отдает наряд диспетчеру и в таком случае «время наряда» (время ремонта, техосмотра или вызволения людей) в наряде остается пустым. Остальные же атрибуты должны быть заполнены. Для данного бизнес правила использовалось ограничение NOT NULL, которое было наложено на все атрибуты кроме OrdersTime, т.к. он может быть пустым в случае не закрытия наряда.
Ограничение внешнего ключа FOREIGN KEY было наложено на все таблицы кроме справочников, для связи таблиц между собой.
Процедурная целостность необходима для обеспечения корректности вводимых данных и соблюдения правил решаемой задачи (бизнес-логики) при помощи триггеров, транзакций и хранимых процедур и функций.
В системе нельзя понижать разряд электромеханика на меньший. Это бизнес-правило было реализовано при помощи триггера, который запрещает данное понижение разряда. С одной стороны, применение триггеров очень удобно для пользователей базы данных, а с другой, их использование часто связано с дополнительными затратами ресурсов на операции ввода/вывода. Тем не менее, данное бизнес-правило было реализовано при помощи триггера, т.к. его невозможно реализовать при помощи более простого ограничения CHECK
Триггер - это откомпилированная SQL-процедура, исполнение которой обусловлено наступлением определенных событий внутри реляционной базы данных.
ALTER TRIGGER LowClass
ON Electrician FOR UPDATE
AS
IF EXISTS
(SELECT 'TRUE'
FROM insertedI
LEFT JOIN deleted D
ON D.IDElectrician = I.IDElectrician
WHERE I.Class < D.Class)
BEGIN
RAISERROR('Нельзя понижать разряд электромеханика!!!',16,1)
ROLLBACK TRAN
END
4. Создание таблиц и ограничений
На основе спецификаций сущностей и словаря данных, сформулированных в пятом семестре, были созданы таблицы, в которых находятся описания всех атрибутов сущностей и ограничения, накладываемые на эти атрибуты.
Для удобства запуска базы данных сначала были созданы таблицы без ограничений, затем с помощью функции ALTER были наложены все необходимые ограничения.
Имена ограничений:
Договоримся, назначая ограничение PRIMARY KEY использовать шаблон: <имя таблицы><тип ограничения>, поскольку ограничение PRIMARY KEY может быть в таблице только одно. Для ограничений FOREIGN KEY будем использовать шаблон - <имя ссылающейся таблицы><имя ссылочной таблицы><тип ограничения>. Для ограничения CHECK<имя таблицы><имя столбца><тип ограничения>, а для ограничения UNIQUE <имя таблицы><имя одного из столбцов><тип ограничения>.
Таблицы базы данных именуются в соответствии с их содержимым и на английском языке, т.к. он является интернациональным. Например таблица хранящая в себе данные о лифтах (личный номер, дом, подъезд и .т.п.) называется Elevator. Именование процедур и функций осуществляется по следующему шаблону: добавление <имя таблицы>INCERT, удаление-<имя таблицы>Delete, обновление -<имя таблицы>Update, отчетные формы - print<имя объекта или действия>
Таблица Улица(Street)
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
|
ID Улицы |
IDStreet |
INT |
PRIMARY KEY |
|
Название улицы |
NameStreet |
VARCHAR (40) |
UNIQUE NOT NULL |
В таблице «Улица»был выделен уникальный ключ «ID Улицы».
Таблица «Улица» является справочником, поэтому на название улиц было наложено ограничение уникальности, чтобы исключить дублирование записей в таблице.
CREATETABLE Street
IDStreet INTIDENTITY NOT NULL,
NameStreet VARCHAR(40)NOT NULL
ALTERTABLE Street
WITHCHECK
ADD CONSTRAINT IDStreetPrimary PRIMARYKEY (IDStreet),
CONSTRAINT NameStreetUnique UNIQUE (NameStreet)
Таблица Вид заявки(TypeOfApplication)
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
|
ID вида заявки |
IDTypeOfApplication |
INT |
PRIMARY KEY |
|
Вид заявки |
TypeOfApp |
VARCHAR (80) |
UNIQUE NOT NULL |
Таблица «Вид заявки» хранит в себе вид заявки, поэтому данный атрибут не может быть пустым.
CREATE TABLE TypeOfApplication
(
IDTypeOfApplication INT IDENTITY NOT NULL,
TypeOfApp VARCHAR(80)NOT NULL
);
ALTERTABLE TypeOfApplication
WITH CHECK
ADD CONSTRAINT IDTypeOfApplicationPrimary PRIMARY KEY (IDTypeOfApplication),
CONSTRAINT TypeOfAppUnique UNIQUE(TypeOfApp)
Таблица Электромеханик(Electrician)
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
|
ID Электромеханика |
IDElectrician |
INT |
PRIMARY KEY |
|
ФИО |
FIO |
VARCHAR (80) |
UNIQUE NOT NULL |
|
Разряд |
Class |
INT |
NOT NULL |
|
Специализация |
Speciality |
VARCHAR (40) |
NOT NULL |
|
Дата рождения |
Birthday |
DATETIME |
NOT NULL |
Таблица «Электромеханик» является справочником исодержитвсебеличныеданныеэлектромехаников. Чтобы избежать случайного повторного ввода данных об одном и том же работнике, атрибут ФИО установлен уникальным.
CREATE TABLE Electrician
(
IDElectrician INT IDENTITY NOT NULL,
FIO VARCHAR(80)NOT NULL,
Class INT NOT NULL,
Speciality VARCHAR(40)NOT NULL,
Birthday DATETIME NOT NULL
);
ALTER TABLE Electrician
WITH CHECK
ADD CONSTRAINT IDElectricianPrimary PRIMARY KEY (IDElectrician),
CONSTRAINT FIOUnique UNIQUE(FIO)
;
На атрибут «Разряд» было установлено ограничение от 1 до 4, чтобы избежать случайных грубых ошибок во введении разряда электромеханика.
Также было поставлено ограниечени на дату рождения: электромеханик не должен быть моложе 20 лет.
ALTERTABLE Electrician
WITH CHECK
ADD CONSTRAINT ElClassCheck CHECK (ClassBETWEEN 1 AND 4),
CONSTRAINT ElectricianBirthdayCheck CHECK (DATEDIFF(year,Birthday,getDate())>20)
В таблице «Неисправность» хранится краткое описание неисправности лифта и возможно причина неисправности. Т.к. каждый случай поломки уникален, на данный атрибут наложено ограничение UNIQUE.
CREATE TABLE Defect
(
IDDefect INT IDENTITY NOT NULL,
TypeOfDefect VARCHAR(80)NOT NULL
);
ALTER TABLE Defect
WITH CHECK
ADD CONSTRAINT IDDefectPrimary PRIMARY KEY (IDDefect),
CONSTRAINT TypeOfDesectUnique UNIQUE (TypeOfDefect)
Таблица Лифт(Elevator)
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
|
ID Лифта |
IDElevator |
INT |
PRIMARY KEY |
|
Личный номер |
PersonalNumber |
VARCHAR (10) |
NOT NULL |
|
Дом |
Building |
INT |
NOT NULL |
|
Подъезд |
Door |
INT |
NOT NULL |
|
ID Улицы |
IDStreet |
INT |
NOT NULL FOREIGN KEY |
В таблице «Лифт» помимо первичного ключа (ID Лифта) был выделен потенциальный ключ: дом, подъезд и личный номер. Так как эти атрибуты являются уникальными, то по ним можно будет однозначно идентифицировать записи в таблице.
Так как данная таблица является ссылающейся, для внешних ключей была установлена опция ON UPDATE CASCADE, которая будет обеспечивать модификацию строк, как в родительской, так и в дочерней таблице. Кроме того, была установлена опция ON DELETE CASCADE, которая обеспечит удаление строк в дочерней таблице, при удалении строк из родительской. Далее эта опция применяется практически во всех таблицах.
CREATE TABLE Elevator
(
IDElevator INT IDENTITY NOT NULL,
PersonalNumber VARCHAR(10)NOT NULL,
Building VARCHAR(10)NOT NULL,
Door INT NOT NULL,--подъезд
IDStreet INT NOT NULL,
);
ALTER TABLE Elevator
WITH CHECK
ADD CONSTRAINT DElevator Primary PRIMARYKEY (IDElevator),
CONSTRAINT BuildingDoorPersonalNumberUniq UNIQUE (Building,Door,PersonalNumber),
CONSTRAINT ElevatorStreetForeign FOREIGNKEY(IDStreet)
REFERENCES Street ON UPDATE CASCADE ON DELETE CASCADE
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
|
ID Заявки |
IDRequest |
INT |
PRIMARY KEY |
|
Описание поломки |
BreakDescription |
VARCHAR (256) |
NOT NULL |
|
Дата и время заявки |
BreakTime |
DATETIME |
NOT NULL |
|
Степень поломки |
BreakLevel |
BIT |
NOT NULL |
|
ID вида заявки |
IDTypeOfApplication |
INT |
NOT NULL FOREIGN KEY |
|
ID Лифта |
IDElevator |
INT |
NOT NULL FOREIGN KEY |
В таблица «Заявка» есть атрибут «Описание поломки» хранящий краткое описание поломки лифта со слов жильцов (звонящего диспетчеру). Также есть атрибуд «степень поломки», который показывает срочность и для кого эта заявка.
CREATE TABLE Request
(
IDRequest INT IDENTITY NOT NULL,
BreakDescription VARCHAR(256)NOT NULL,
BreakTime DATETIME NOT NULL,
BreakLevel BIT NOT NULL DEFAULT 0,
IDElevator INT NOT NULL,
IDTypeOfApplication INT NOT NULL,
);
ALTER TABLE Request
WITH CHECK
ADD CONSTRAINT IDRequestPrimary PRIMARY KEY (IDRequest),
CONSTRAINT RequestEkevatorForeign FOREIG NKEY(IDElevator)
REFERENCES Elevator ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT RequestTypeOfApplicationForeign FOREIGN KEY(IDTypeOfApplication)
REFERENCES TypeOfApplication ON UPDATE CASCADE ON DELETE CASCADE
Втаблице«Наряд» есть атрибут «Дата и время наряда», на котором отсутствуют ограничения. Если данный атрибут пустой, значит поломка еще не устранена и наряд не закрыт.
CREATETABLE Orders
(
IDOrders INT IDENTITY NOT NULL,
OrdersTime DATETIME,
IDElectrician INT NOT NULL,
IDRequest INT NOT NULL,
);
ALTER TABLE Orders
WITH CHECK
ADD CONSTRAINT IDOrdersPrimary PRIMARYKEY (IDOrders),
CONSTRAINT OrdersElectricianForeign FOREIGNKEY(IDElectrician)
REFERENCES Electrician ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT OrdersRequestForeign FOREIGN KEY(IDRequest)
REFERENCES Request ON UPDATE CASCADE ON DELETE CASCADE
;
Таблица «Неисправности» является слабой сущнюстью между «Неисправность» и «Наряд» в отношении многое ко многим и хранит в себе внешние ключи.
CREATE TABLE Defects
IDOrders INT,
IDDefect INT,
);
ALTERTABLE Defects
WITH CHECK
ADD CONSTRAINT DefectsOrdersForeign FOREIGN KEY(IDOrders)
REFERENCES Orders ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT DefectsDefectForeign FOREIGN KEY(IDDefect)
REFERENCES Defect ON UPDATE CASCADE ON DELETE CASCADE
5. Хранимые процедуры
Хранимые процедуры представляют собой набор команд, состоящий из одного или нескольких операторов SQL и сохраняемый в базе данных в откомпилированном виде, что обеспечивает быстрый доступ к данным.
Процедуры добавления были реализованы для всех таблиц БД, а процедуры удаления и обновления только для некоторых.
Были созданы процедуры добавления/удаления/обносления данных для выполнения следующих бизнес-правил:
1. Добавление/правка данных о вызовах на устранение неисправностей в работе лифтов и ЛДСС;
2. Добавление/правка данных о технических осмотрах лифтов и ЛДСС;
3. Добавление/правка данных об аварийных обслуживаниях лифтов и ЛДСС;
4. Добавление/правка данных о личных данных электромехаников
Процедуры добавления данных:
- PStreetINSERT
- PTypeOfApplicationINSERT
- PElectricianINSERT
- PDefectINSERT
- PElevatorsINSERT
- PRequestINSERT
- POrdersINSERT
- PDefectsINSERT
Процедуры обновления данных:
- UpdateStreet
- UpdateElectrician
- UpdateDefect
- UpdateElevators
- UpdateRequest
- UpdateOrders
- UpdateDefects
Процедуры удаления данных:
- DeleteStreet
- DeleteTypeOfApplication
- DeleteElectrician
- DeleteDefect
- DeleteElevators
- DeleteRequest
- DeleteOrders
- DeleteDefects
В качестве примера процедуры добавления данных ниже приведена хранимая процедура, которая будет вводить данные в таблицу Street(см. Приложение 7.)
CREATEPROC PStreetINSERT
@NameStreet VARCHAR(40)
AS
INSERT INTO Street
(NameStreet)
VALUES
(@NameStreet)
Пример процедуры удаления данных из таблицы TypeOfApplication(по умолчанию тип заявки может быть только «поломка», «застревание» или «техосмотр»)
CREATEPROCDeleteTypeOfApplication
(@IDTypeOfApplicationINT)
AS
DELETEFROMTypeOfApplication
WHEREIDTypeOfApplication=@IDTypeOfApplication
Пример процедуры обновления (замены) данных в таблицеStreet, на случай если Улицу переименуют (см. Приложение 7.)
CREATEPROCUpdateStreet
(@IDStreetINT,
@NameStreetVARCHAR(40))
AS
UPDATEStreet
SETNameStreet=@NameStreet
WHEREIDStreet=@IDStreet
6. Выходные формы
В рамках данного проекта организация данных в виде БД преимущественно была необходима для того, чтобы из БД можно было оперативно получить статистические данные, отчетные формы и другую необходимую и полезную для работы информацию.
Для получения конечных отчетных форм были использованы:
· Представления;
· Отчетные хранимые процедуры и функции;
В рамках данной работы было необходимо реализовать следующие отчеты:
· Личная карточка каждого лифта со всей историей.
· Отчет о работе выбранного подразделения начиная с определенной даты
· Полный отчет всех подразделений
6.1 Представления
Механизм представления - мощное средство СУБД, позволяющее скрыть реальную структуру БД от некоторых пользователей за счет определения представлений.
В данном дипломном проекте представление использовалось для объединения данных из нескольких таблиц в статический отчет, а также ограничения доступа к базе данных.
Представления:
Printall-Отчет работы всех подразделений сортировка по улицам
print1El-вывод всех поломанных лифтов с высокой степенью
Пример представления:
Поскольку полный отчет о работе всех подразделений организации хранится в разных таблицах и для его вывода не нужны дополнительные входные параметры, то представляем его вывод в виде представления.(см. приложение 8)
CREATEVIEWprintall
AS
SELECTNameStreet [Улица],
PersonalNumber [№ лифта],
FIO [ФИО],
TypeOfApp [Вид заявки],
TypeOfDefect [Вид неисправности],
BreakDescription [Описание поломки],
BreakLevel [степень],
BreakTime [время поломки]
FROMStreetSTINNERJOINElevatorEL
ONST.IDStreet=EL.IDStreet
INNERJOINRequestRE
ONEL.IDElevator=RE.IDElevator
INNERJOINTypeOfApplicationTA
ONRE.IDTypeOfApplication=TA.IDTypeOfApplication
INNERJOINOrdersORD
ONRE.IDRequest=ORD.IDRequest
INNERJOINElectricianELC
ONORD.IDElectrician=ELC.IDElectrician
INNERJOINDefectsDFS
ONORD.IDOrders=DFS.IDOrders
INNERJOINDefectDF
ONDFS.IDDefect=Df.IDDefect
6.2 Отчетные хранимые процедуры и функции
Для формирования отчетных результатов вспомогательные процедуры и функции были объединены в несколько общих функций, которые на основе всех реализованных запросов получают необходимые для отчета данные.
Процедуры и функции:
PrintPodr -функция вывода работы подразделения с определенной даты
PrintElevator-Личная карточка лифта со всей историей
Пример отчета личной карточки лифта со всей историей:
В качестве входных параметров подаем личный номер лифта, для которого будет выводиться отчет. Далее используя эти параметры получаем данные овсех его поломках, ремонтах, техосмотрах и застреваний.(см. приложение 8)
--Личная карточка лифта со всей историей
CREATEFUNCTIONPrintElevator
(@NumVARCHAR(10))
RETURNS@ResultTABLE(
NameStreetVARCHAR(40),
PersonalNumberINT,
FIOVARCHAR(80),
TypeOfAppVARCHAR(80),
TypeOfDefectVARCHAR(80),
BreakDescriptionVARCHAR(256),
BreakLevelBIT,
BreakTimeDATETIME,
SpecialityVARCHAR(40)
)
AS
BEGIN
INSERTINTO@Result
SELECT
NameStreet [Улица],
PersonalNumber [№ лифта],
FIO [ФИО],
TypeOfApp [Видзаявки],
TypeOfDefect [Виднеисправности],
BreakDescription [Описаниеполомки],
BreakLevel [степень],
BreakTime [времяполомки],
Speciality [Специальность]
FROMStreetSTINNERJOINElevatorsEL
ONST.IDStreet=EL.IDStreet
ANDPersonalNumber=@Num
INNERJOINRequestRE
ONEL.IDElevator=RE.IDElevator
INNERJOINTypeOfApplicationTA
ONRE.IDTypeOfApplication=TA.IDTypeOfApplication
INNERJOINOrdersORD
ONRE.IDRequest=ORD.IDRequest
INNERJOINElectricianELC
ONORD.IDElectrician=ELC.IDElectrician
INNERJOINDefectsDFS
ONORD.IDOrders=DFS.IDOrders
INNERJOINDefectDF
ONDFS.IDDefect=Df.IDDefect
RETURN;
END
SELECT*FROMPrintElevator(6)
7. Обеспечение безопасности
В ходе изучения предметной области в рамках проекта по дисциплине «Управление данными» были определены основные пользователи для работы с базой данных:
· Диспетчер
· Администратор
Диспетчер вносит/редактирует данные в нарядах, заявках, а также создает все необходимые отчеты
Диспетчеры |
Администраторы |
||
Заполнение/редактирование справочников |
- |
+ |
|
Заполнение/редактирование заявок |
+ |
- |
|
Заполнение/редактирование нарядов |
+ |
- |
|
Создание отчетов |
+ |
- |
|
Просмотр данных |
+ |
+ |
Так как диспетчеров в организации несколько, а также возможно администраторов тоже будет 2 (посменно или же на пол ставки), было создано две роли:
· Диспетчеры
· Администраторы
--роль диспетчеры
CREATEROLEDispatchers
--рольАдминистраторы
CREATEROLEAdministrators
Dispatchers |
Administrators |
||
Street |
R |
RWED |
|
Electrician |
R |
RWED |
|
TypeOfApplication |
R |
RWED |
|
Defect |
RWED |
R |
|
Elevator |
R |
RWED |
|
Request |
RWED |
R |
|
Orders |
RWED |
R |
|
Defects |
RWED |
R |
|
PrintElevator |
R |
- |
|
PrintPodr |
R |
- |
|
print1El |
R |
- |
|
Printall |
R |
- |
Где R - права на чтение, W - права на запись, E - права на редактирование, D - права на удаление.
· Диспетчер1
· Диспетчер2
· Диспетчер3
· Администратор1
· Администратор2
-- Пользователь - Диспетчер1
USEElevator
CREATEUSERDispatcher1
WITHOUTLOGIN
-- Пользователь - Администратор1
USEElevator
CREATEUSERAdministrator1
WITHOUTLOGIN
Затем пользователи были добавлены в роли:
--добавление членов в роль Dispatchers базы данных
sp_addrolememberDispatchers,
Dispatcher1
sp_addrolememberDispatchers,
Dispatcher2
sp_addrolememberDispatchers,
Dispatcher3
--добавлениечленовврольAdministratorsбазыданных
sp_addrolememberAdministrators,
Administrator1
sp_addrolememberAdministrators,
Administrator2
Таким образом, безопасность базы данных была обеспечена за счет создания необходимого числа учетных записей для различных ролей пользователей БД, ограничения их доступа к таблицам и предоставления им права выполнения хранимых процедур, отвечающих за необходимые им действия.
8. Оптимизация
Несмотря на то, что пользователей у системы немного, это не понижает требования к ее быстродействию.
Первоначально анализ оптимизации проводился на уровне запросов, было выяснено, что в первую очередь надо связывать сущности, у которых меньше строк и больше критериев для соединения, и далее по возрастанию, тогда результирующий набор строк будет формироваться быстрее. Кроме того, по возможности стоит проанализировать все вводимые данные и на их основе сформировать ограничения CHECK.
При реализации процедур и функций по возможности стоит избегать сильной вложенности одних процедур в другие, это замедляет поиск. Триггеры стоит использовать только в крайних случаях, потому что они сильно нагружают систему.
Для того, чтобы поиск по данным и запросы осуществлялись быстрее были введены такие объекты базы данных, как индексы.
Индекс - особый объект БД, создаваемый с целью увеличения производительности поиска данных. По умолчанию в СУБД Microsoft SQL Server создаются кластеризованные индексы. Помимо кластеризованных, в данном проекте были использованы некластеризованные индексы, которые накладывались на внешние ключи, и индексы с ограничением на уникальность.
--TypeOfApplication
CREATE UNIQUE INDEX UniqueTypeOfApplicationIndex
ON TypeOfApplication(TypeOfApp ASC)
--Defect
CREATE UNIQUE INDEX UniqueDefectIndex
ON Defect(TypeOfDefect ASC)
--Elevators
CREATENONCLUSTEREDINDEXElevatortsIDStreet
ONElevators(IDStreetASC)
CREATEUNIQUEINDEXUniqueElevatorsIndex
ONElevators(Building,Door,PersonalNumberASC)
9. Тестирование
Для проверки корректности физической модели и правильности реализованных процедур и функций в хранилище данных были введены тестовые данные для каждой из имеющихся сущностей.
Процедура тестирования заключалась в том, что с помощью скрипта создавалась новая база данных. Далее создавались все декларативные ограничения, накладываемые на эти таблицы. После создавались хранимые процедуры вставки, обновления и удаления; хранимые процедуры и функции, необходимые для формирования отчетом; триггеры; индексы; матрица доступа. Далее запускались тестовые данные для таблиц, затем вызывались функции формирования отчетов. (см. приложение 11)
EXECPStreetINSERT
'Мороозова'
EXECPStreetINSERT
'Лесозаводская'
EXECPStreetINSERT
'Бабушкина'
EXECPElectricianINSERT
'Пупкин Петр Сергеевич','4','Аварийный электромеханик','03.11.1977'
EXECPElectricianINSERT
'Сидоров Сергей Михайлович','1','Основной электромеханик','12.01.1968'
EXECPElectricianINSERT
'Кузнецов Анатолий Александрович','3','Аварийный электромеханик','10.08.1972'
EXECPElectricianINSERT
'Худяев Иосив Абрамовичу','4','Основной электромеханик','24.09.1972'
EXECPDefectINSERT
'Застревание'
EXECPDefectINSERT
'Изношен трос'
EXECPDefectINSERT
'Поломка приводной цепи'
EXECPDefectINSERT
'Поломка буфера'
EXECPElevatorsINSERT
'333','175','3',3
EXECPElevatorsINSERT
'2','111','1',4
EXECPElevatorsINSERT
'6','45','1',5
EXECPElevatorsINSERT
'19','74','2',6
EXECPTypeOfApplicationINSERT
'Поломка'
EXECPTypeOfApplicationINSERT
'Застревание'
EXECPTypeOfApplicationINSERT
'Техосмотр'
EXECPRequestINSERT
'не открывается лифт','01.08.2011 11:10:00:00',0,1,1
EXECPRequestINSERT
'не работает свет','05.07.2011 09:00:00:00',0,4,1
EXECPRequestINSERT
'Технический осмотр','20.01.2012 16:45:00:00',0,5,3
EXECPRequestINSERT
'застрял человек','09.05.2012 14:40:00:00',1,6,2
EXECPOrdersINSERT
'01.08.2011 15:30:00:00',3,13
EXECPOrdersINSERT
'05.07.2011 012:00:00:00',4,14
EXECPOrdersINSERT
'20.01.2012 17:00:00:00',5,15
EXECPOrdersINSERT
'09.05.2012 14:50:00:00',6,16
EXECPDefectsINSERT
6,1
EXECPDefectsINSERT
5,2
EXECPDefectsINSERT
8,3
EXECPDefectsINSERT
7,4
EXECPDefectsINSERT
4,5
EXECPDefectsINSERT
SELECT*FROMprintall
SELECT*FROMprint1El
SELECT*FROMPrintPodr('05.07.2011 012:00:00:00','Основной электромеханик')
SELECT*FROMPrintElevator(6)
Заключение
Данный проект является продолжением проектов по дисциплинам «Управление данными» и «Информационные технологии». В ходе выполнения этих проектов была выбрана и изучена предметная область «Обслуживание лифтов города Сыктывкар компанией ООО «ОТИС-Лайн»», выделены такие основные сущности и процессы, как Street, Electrician, TypeOfApplication, Defect, Elevators, Request, Orders и Defects, была построена логическая модель базы данных, а также определены атрибуты таблиц и выбраны типы данных.
В данном проекте была реализована физическая модель базы данных из вышеперечисленных сущностей, были расставлены ограничения PRIMARY KEY, FOREIGN KEY, UNIQUE, проанализированы данные, которые будут храниться в БД, и на их основе были выделены ограничения CHECK. Помимо декларативной целостности была реализована процедурная целостность, соответствующая всем правилам данной предметной области.
На основе сформированных в проекте по «УД» запросов были реализованы хранимые процедуры и функции, которые обеспечивают управление базой данных, а также предоставление пользователям всех необходимых выходных форм.
Были реализованы все необходимые процедуры добавления и удаления данных, было решено, что функции редактирования нужны не для всех таблиц.Был реализован триггер для таблицы Электромеханик, связанный с запретом понижения разряда электромеханика.
Для обеспечения безопасности и надежности хранилища данных были выделены две основные роли Диспетчеры и Администраторы и в них были включены основные пользователи системы, такие как Диспетчер1, Диспетчер2, Диспетчер3, Администратор1 и Администратор2, и им были предоставлены только необходимые им права на работу с данными хранилища.
В рамках дипломного проекта были протестированы все процедуры ввода, удаления и изменения данных, а так же процедуры создания отчетов. Тестирование БД позволило установить корректность физической модели базы данных, всех процедур и функций, реализованных для данного проекта.
Таким образом, в результате выполнения проекта было создано хранилище данных для информационной системы «Учет обслуживания, технического осмотра и ремонта лифтов в домах города Сыктывкар компанией ООО «ОТИС-Лайн»»необходимое для ее реализации.
Библиографический список
1. Виейра Роберт. Программирование баз данных Microsoft SQL Server 2005 для профессионалов.: Пер. с англ. - М.: ООО «И.Д.Вильямс», 2012. - 1072 с.: ил. - Парал.тит.англ.;
2. К. Дж. Дейт. Введение в системы баз данных.: Пер. с англ. М.: Изд. Вильямс, 2013. - 1328 с.: ил. - Парал. тит. англ.;
3. Коннолли Томас, Бегг Каролин. Базы данных: проектирование, реализация и сопровождение. Теория и практика, 3-е изд.: Пер. с англ. - М.: Издательский дом «Вильямс», 2010. - 1440 с.: ил. - Парал. тит. англ.;
4. Николаева Н.А. Язык структурированных запросов. Лабораторные работы: учебное пособие / Н.А. Николаева, Т.Ю. Калинина. - Ухта: УГТУ, 2010. - 124 с. ил.
Приложениея
Приложение 1
Логическая модель
Приложение 2
Физическая модель БД
Приложение 3
Созданиетаблиц
CREATE DATABASE Elevator
GO
--Созданиетаблиц
CREATE TABLE Street --Улица
(
IDStreet INT IDENTITY NOT NULL,
NameStreetVARCHAR(40) NOT NULL
);
CREATE TABLE TypeOfApplication --Видзаявки
(
IDTypeOfApplication INT IDENTITY NOT NULL,
TypeOfAppVARCHAR(80) NOT NULL
);
CREATE TABLE Electrician --Елекромеханик
(
IDElectrician INT IDENTITY NOT NULL,
FIO VARCHAR(80) NOT NULL,
Class INT NOT NULL,
SpecialityVARCHAR(40) NOT NULL,
Birthday DATETIME NOT NULL
);
CREATE TABLE Defect --Неисправность
(
IDDefect INT IDENTITY NOT NULL,
TypeOfDefectVARCHAR(80) NOT NULL
);
CREATE TABLE Elevators --Лифт
(
IDElevator INT IDENTITY NOT NULL,
PersonalNumberVARCHAR(10) NOT NULL,
Building VARCHAR(10)NOT NULL,
Door INT NOT NULL, --подъезд
IDStreet INT NOT NULL,
); база данные логический запрос
CREATE TABLE Request --Заявка
(
IDRequest INT IDENTITY NOT NULL,
BreakDescriptionVARCHAR(256) NOT NULL,
BreakTime DATETIME NOT NULL,
BreakLevel BIT NOT NULL DEFAULT 0,
IDElevator INT NOT NULL,
IDTypeOfApplication INT NOT NULL,
);
CREATE TABLE Orders --наряд
(
IDOrders INT IDENTITY NOT NULL,
OrdersTime DATETIME,
IDElectrician INT NOT NULL,
IDRequest INT NOT NULL,
);
CREATE TABLE Defects --Неисправности
(
IDOrders INT,
IDDefect INT,
);
Приложение 4
Удаление таблиц
--Удаление таблиц
DROPTABLEStreet;
DROP TABLE Electrician;
DROP TABLE TypeOfApplication;
DROP TABLE Defect;
DROP TABLE Elevator;
DROP TABLE Request;
DROP TABLE Orders;
DROPTABLEDefects;
Приложение 5
Создание ограничений на таблицы
--Создание ограничений на таблицы
ALTERTABLEStreet
WITH CHECK
ADD CONSTRAINT IDStreetPrimary PRIMARY KEY (IDStreet),
CONSTRAINT NameStreetUnique UNIQUE (NameStreet)
;
ALTER TABLE TypeOfApplication
WITH CHECK
ADD CONSTRAINT IDTypeOfApplicationPrimary PRIMARY KEY (IDTypeOfApplication),
CONSTRAINT TypeOfAppUnique UNIQUE (TypeOfApp)
;
ALTER TABLE Electrician
WITH CHECK
ADD CONSTRAINT IDElectricianPrimary PRIMARY KEY (IDElectrician),
CONSTRAINT FIOUnique UNIQUE (FIO)
;
--check
ALTER TABLE Electrician
WITH CHECK
ADD CONSTRAINT ElClassCheck CHECK (Class BETWEEN 1 AND 4),
CONSTRAINT ElectricianBirthdayCheck CHECK (DATEDIFF(year,Birthday,getDate())>20)
;
ALTER TABLE Defect
WITH CHECK
ADD CONSTRAINT IDDefectPrimary PRIMARY KEY (IDDefect),
CONSTRAINT TypeOfDesectUnique UNIQUE (TypeOfDefect)
;
ALTER TABLE Elevators
WITH CHECK
ADD CONSTRAINT DElevatorPrimary PRIMARY KEY (IDElevator),
CONSTRAINT BuildingDoorPersonalNumberUniq UNIQUE (Building,Door,PersonalNumber),
CONSTRAINT ElevatorStreetForeign FOREIGN KEY(IDStreet)
REFERENCES Street ON UPDATE CASCADE ON DELETE CASCADE
;
ALTER TABLE Request
WITH CHECK
ADD CONSTRAINT IDRequestPrimary PRIMARY KEY (IDRequest),
CONSTRAINT RequestEkevatorForeign FOREIGN KEY(IDElevator)
REFERENCES Elevators ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT RequestTypeOfApplicationForeign FOREIGN KEY(IDTypeOfApplication)
REFERENCES TypeOfApplication ON UPDATE CASCADE ON DELETE CASCADE
;
ALTER TABLE Orders
WITH CHECK
ADD CONSTRAINT IDOrdersPrimary PRIMARY KEY (IDOrders),
CONSTRAINT OrdersElectricianForeign FOREIGN KEY(IDElectrician)
REFERENCES Electrician ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT OrdersRequestForeign FOREIGN KEY(IDRequest)
REFERENCES Request ON UPDATE CASCADE ON DELETE CASCADE
;
ALTER TABLE Defects
WITH CHECK
ADD CONSTRAINT DefectsOrdersForeign FOREIGN KEY(IDOrders)
REFERENCES Orders ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT DefectsDefectForeign FOREIGN KEY(IDDefect)
REFERENCES Defect ON UPDATE CASCADE ON DELETE CASCADE
;
Приложение 6
триггер
--триггер, запрещающий исправлять разряд электромеханика в отношении Electrician на менее низкую
CREATE 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<D.Class)
BEGIN
RAISERROR ('Нельзя понижать разряд электромеханика!!!',16,1)
ROLLBACK TRAN
END
--проверка
UPDATE Electrician
SETClass = 1
WHEREFIO='Пупкин Василий Петрович'
Приложение 7
Хранимые процедуры
--------------------------------------------------------------------------------------------
--хранимые процедуры
************************************************Street*************************
--процедура, которая будет вводить данные в таблицу Street
GO
CREATE PROC PStreetINSERT
@NameStreetVARCHAR(40)
AS
INSERT INTO Street
(NameStreet)
VALUES
(@NameStreet)
EXEC PStreetINSERT
'Юбилейная'
EXEC PStreetINSERT
'Ленина'
EXECPStreetINSERT
'Коммунистическая'
--процедура, которая будет обновлять данные в таблице Street
GO
ALTER PROC UpdateStreet
(@IDStreet INT,
@NameStreetVARCHAR(40)
)
AS
UPDATE Street
SET NameStreet = @NameStreet
WHEREIDStreet=@IDStreet
EXECUpdateStreet
'Космотнавтов','Коммунистическая'
--процедура, которая будет удалять данные из таблицы Street
GO
ALTER PROC DeleteStreet
(@IDStreet INT)
AS
DELETE FROM Street
WHERE IDStreet=@IDStreet
--*****************************************************************************
************************************************TypeOfApplication**************
--процедура, которая будет вводить данные в таблицу TypeOfApplication
GO
CREATE PROC PTypeOfApplicationINSERT
@TypeOfAppVARCHAR(80)
AS
INSERT INTO TypeOfApplication
(TypeOfApp)
VALUES
(@TypeOfApp)
EXEC PTypeOfApplicationINSERT
'Поломка'
EXEC PTypeOfApplicationINSERT
'Застревание'
EXECPTypeOfApplicationINSERT
'Техосмотр'
--процедура, которая будет удалять данные из таблицы TypeOfApplication
GO
ALTER PROC DeleteTypeOfApplication
(@IDTypeOfApplication INT)
AS
DELETE FROM TypeOfApplication
WHERE IDTypeOfApplication=@IDTypeOfApplication
*****************************************************************************
************************************************Electrician*********************
-- процедура ввода данных в Electrician
GO
CREATE PROC PElectricianINSERT
@FIO VARCHAR(80),
@Class INT ,
@SpecialityVARCHAR(40),
@Birthday DATETIME
AS
INSERT INTO Electrician
(FIO,
Class,
Speciality,
Birthday)
VALUES
(@FIO,
@Class,
@Speciality,
@Birthday)
EXEC PElectricianINSERT
'Пупкин Василий Петрович','2','Аварийный электромеханик','03.11.1970'
EXEC PElectricianINSERT
'Алешин Генадий Иванович','3','Основной электромеханик','03.11.1985'
--процедура, которая будет обновлять данные в таблице Electrician
GO
ALTER PROC UpdateElectrician
(@IDElectrician INT,
@FIO VARCHAR(80),
@Class INT,
@SpecialityVARCHAR(40),
@Birthday DATETIME)
AS
UPDATE Electrician
SET FIO = @FIO,
Class = @Class,
Speciality=@Speciality,
Birthday=@Birthday
WHEREIDElectrician=@IDElectrician
--процедура, которая будет удалять данные из таблицы Electrician
GO
ALTER PROC DeleteElectrician
(@IDElectrisian INT)
AS
DELETE FROM Electrician
WHERE IDElectrician=@IDElectrisian
--процедура, которая будет вводить данные в таблицу Defect
GO
CREATE PROC PDefectINSERT
@TypeOfDefectVARCHAR(80)
AS
INSERT INTO Defect
(TypeOfDefect)
VALUES
(@TypeOfDefect)
EXEC PDefectINSERT
'Перегорелалампочка'
EXECPDefectINSERT
'Не работают двери'
--процедура, которая будет обновлять данные в таблице Defect
GO
ALTER PROC UpdateDefect
(@IDdefect INT,
@TypeOfDefectVARCHAR(80))
AS
UPDATE Defect
SET TypeOfDefect = @TypeOfDefect
WHEREIDDefect=@IDdefect
--процедура, которая будет удалять данные из таблицы Defect
GO
CREATE PROC DeleteDefect
(@IDDefect INT)
AS
DELETE FROM Defect
WHERE IDDefect = @IDDefect
--процедура, которая будет вводить данные в таблицу Elevator
GO
CREATE PROC PElevatorsINSERT
@PersonalNumberVARCHAR(10),
@Building VARCHAR(10),
@Door INT,
@IDStreet INT
AS
INSERT INTO Elevators
(PersonalNumber,
Building,
Door,
IDStreet)
VALUES
(@PersonalNumber,
@Building,
@Door,
@IDStreet)
EXEC PElevatorsINSERT
'123','121/2','2',1
EXEC PElevatorsINSERT
'21','65','1',2
--процедура, которая будет обновлять данные в таблице Elevstors
GO
ALTER PROC UpdateElevators
(@IDElevator INT,
@PersonalNumberVARCHAR(10),
@Building VARCHAR (10),
@Door INT,
@IDStreet INT)
AS
UPDATE Elevators
SET PersonalNumber = @PersonalNumber,
Building = @Building,
Door = @Door,
IDStreet = @IDStreet
WHEREIDElevator=@IDElevator
--процедура, которая будет удалять данные из таблицы Elevators
GO
ALTER PROC DeleteElevators
(@IDElevator INT)
AS
DELETE FROM Elevators
WHERE IDElevator=@IDElevator
*****************************************************************************
************************************************Request***********************
--процедура, которая будет вводить данные в таблицу Request
GO
CREATE PROC PRequestINSERT
@BreakDescriptionVARCHAR(256),
@BreakTime DATETIME,
@BreakLevel BIT,
@IDElevator INT,
@IDTypeOfApplication INT
AS
INSERT INTO Request
(BreakDescription,
BreakTime,
BreakLevel,
IDElevator,
IDTypeOfApplication)
VALUES
(@BreakDescription,
@BreakTime,
@BreakLevel,
@IDElevator,
@IDTypeOfApplication)
EXECPRequestINSERT
'не работает лифт','01.03.2012 11:10:00:00',0,1,1
EXECPRequestINSERT
'застрялилюди','04.11.2011 15:32:00:00',1,2,2
--процедура, которая будет обновлять данные в таблице Request
GO
ALTER PROC UpdateRequest
(@IDRequest INT,
@BreakDescriptionVARCHAR(256),
@BreakTime DATETIME,
@BreakLevel BIT,
@IDElevator INT,
@IDTypeOfApplication INT)
AS
UPDATE Request
SET BreakDescription = @BreakDescription,
BreakTime = @BreakTime,
BreakLevel = @BreakLevel,
IDElevator = @IDElevator,
IDTypeOfApplication = @IDTypeOfApplication
WHEREIDRequest = @IDRequest
--процедура, которая будет удалять данные из таблицы Request
GO
CREATE PROC DeleteRequest
(@IDRequest INT)
AS
DELETE FROM Request
WHERE IDRequest = @IDRequest
*****************************************************************************
Orders************************
--процедура, которая будет вводить данные в таблицу Orders
GO
CREATE PROC POrdersINSERT
(@OrdersTime DATETIME,
@IDElectrician INT,
@IDRequest INT)
AS
INSERT INTO Orders
(OrdersTime,
IDElectrician,
IDRequest)
VALUES
(@OrdersTime,
@IDElectrician,
@IDRequest)
EXEC POrdersINSERT
'01.03.2012 15:30:00:00',1,4
EXECPOrdersINSERT
'02.02.2012 09:15:00:00',2,5
--процедура, которая будет обновлять данные в таблице Orders
GO
ALTER PROC UpdateOrders
(@OrdersTime DATETIME,
@IDOrders INT,
@IDElectrician INT,
@IDRequest INT)
AS
UPDATE Orders
SET OrdersTime = @OrdersTime,
IDElectrician = @IDElectrician,
IDRequest = @IDRequest
WHERE IDOrders = @IDOrders
--процедура, которая будет удалять данные из таблицы Orders
GO
CREATE PROC DeleteOrders
(@IDOrders INT)
AS
DELETE FROM Orders
WHERE IDOrders = @IDOrders
************************************************Defects***********************
--процедура, которая будет вводить данные в таблицу Defects
GO
CREATE PROC PDefectsINSERT
(@IDOrders INT,
@IDDefect INT
)
AS
INSERT INTO Defects
(IDOrders,
IDDefect)
VALUES
(@IDOrders,
@IDDefect)
EXEC PDefectsINSERT
3,1
EXEC PDefectsINSERT
4,2
--процедура, котораябудетобновлятьданные в таблице Defects
GO
CREATE PROC UpdateDefects
(@IDDefect INT,
@IDOrders INT)
AS
UPDATE Defects
SET IDDefect = @IDDefect
WHEREIDOrders = @IDOrders
--процедура, которая будет удалять данные из таблицы Defects
GO
CREATE PROC DeleteDefects
(@IDOrders INT)
AS
DELETE FROM Defects
WHEREIDOrders = @IDOrders
****************************************************************************
Приложение 8
Отчетные формы
-------------------------Отчетные формы
--Отчет работы всех подразделений сортировка по улицам
CREATE VIEW printall
AS
SELECT NameStreet [Улица],
PersonalNumber [№ лифта],
FIO [ФИО],
TypeOfApp [Видзаявки],
TypeOfDefect [Виднеисправности],
BreakDescription [Описаниеполомки],
BreakLevel [степень],
BreakTime [времяполомки],
Speciality [Специальность]
FROM Street ST INNER JOIN Elevators 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
;
SELECT * FROMprintall
--вывод всех поломанных лифтов с высокой степенью
CREATE VIEW print1El
AS
SELECT NameStreet [Улица],
PersonalNumber [Номерлифта],
FIO [ФИО],
TypeOfApp [Видзаявки],
TypeOfDefect [Виднеисправности],
BreakDescription [Описаниеполомки],
BreakLevel [степеньполомки]
FROM Street ST INNER JOIN Elevators EL
ON ST.IDStreet=EL.IDStreet
Подобные документы
Характеристика основных этапов создания программной системы. Сведения, хранимые в базе данных информационной системы музея. Описание данных, их типов и ограничений. Проектирование базы данных методом нормальных форм. Технические и программные средства.
курсовая работа [1,8 M], добавлен 23.01.2014Разработка системы, автоматизирующей ведение базы данных библиотеки. Основные требования к программному обеспечению. Модели локальных представлений. Архитектура информационной системы. Хранимые процедуры. SQL-скрипт создания базы данных. Текст программы.
дипломная работа [2,2 M], добавлен 28.01.2014Разработка информационной системы, выбор языка программирования, физическое описание базы данных, выбор типа и описание таблиц базы данных. Техническое проектирование, ограничения и значения по умолчанию, представления, хранимые процедуры и триггеры.
курсовая работа [519,8 K], добавлен 25.05.2010Разработка структуры базы данных библиотеки для улучшения качества обслуживания, создания информационной базы и упрощения работы персонала. Создание объектов базы на языке sql-запросов. Создание хранимой процедуры с курсором, демонстрация процедуры.
курсовая работа [1,3 M], добавлен 28.12.2012Разработка логической и физической моделей базы данных предприятия и описание атрибутов. Порядок создания справочников и реквизитов базы данных на основе программы "1С:Предприятие 8.2", назначение связей таблиц. Пример сгенерированных SQL-кодов.
курсовая работа [2,7 M], добавлен 02.12.2015Этапы и принципы проектирования базы данных, структура таблиц и запросов, описание информационной и логической модели. Установление логических связей между таблицами и их заполнение с помощью специальных форм. Механизм создания главной кнопочной формы.
курсовая работа [1,5 M], добавлен 07.02.2016Построение автоматизированной системы контроля произведенных работ в строительной компании. Описание предметной области; создание базы данных: концептуальная и реляционная модель; структура таблиц; встроенные функции, хранимые процедуры, триггеры.
курсовая работа [1,6 M], добавлен 22.08.2012Инфологическое проектирование базы данных. Создание информационной системы "СПОРТ" для автоматизации обработки данных о проводимых соревнованиях и чемпионатах. Описание размещения в файловой системе. Создание таблиц, запросов и форм просмотра данных.
курсовая работа [4,6 M], добавлен 22.05.2012Ограничения, присутствующие в предметной области. Проектирование инфологической модели данных. Описание основных сущностей и их атрибутов. Логический и физический уровни модели данных. Реализация базы данных: представления, триггеры, хранимые процедуры.
курсовая работа [1,7 M], добавлен 10.02.2013Проведение исследования стандартов и основ проектирования базы данных. Особенность создания запросов на языке SQL. Функциональные требования, предъявляемые к программе Microsoft SQL Server. Анализ заполнения таблиц. Создание процедур и запросов.
курсовая работа [2,7 M], добавлен 19.03.2021