Курсовые работы / ПРИС К_2
.pdfРисунок 2.7 – Логическая модель данных по стандарту IDEF1X
Рисунок 2.8 – Физическая модель данных по стандарту IDEF1X
Отношение находится в третьей нормальной форме (3НФ), если оно находится во второй нормальной форме, и каждый не ключевой атрибут зависит только от первичного ключа и не зависят друг от друга [15].
Данные могут группироваться разными способами в таблицы
(отношения). В качестве исходной (отправной)точки при проектировании БД может использоваться одно какое-то универсальное отношение, в которое включаются все нужные атрибуты. Оно может содержать все данные, которые предполагается размещать в БД.
Алгоритм нормализации (к ЗНФ) [16]:
1.Получить исходное множество функциональных зависимостей для атрибутов рассматриваемой БД.
2.Получить минимальное покрытие множества функциональных зависимостей.
22
3.Определить первичный ключ отношения.
4.Для каждой функциональной зависимости fi создать проекцию исходного отношения Ri = R[Xi], где Xi – объединение атрибутов из левой и правой частей fi.
5.Если первичный ключ исходного отношения не вошел полностью ни в одну проекцию, то создать отдельное отношение из атрибутов ключа.
Проверим сущности «Запчасти», «Отделы», «Профилактика», «Работы», «ПО» и «Заявка» на соответствие 3НФ.
Рассмотрим сущность Запчасти, представленную в таблице 2.2.
Таблица 2.2 – Сущность «Запчасти»
Zapchact
Id |
Z_name |
|
Ed_izm |
kolvo |
Photo |
1 |
Материнская плата |
шт |
|
5 |
pic1.jpg |
2 |
Насос для котла |
шт |
|
3 |
pic2.jpg |
3 |
Процессор |
шт |
|
4 |
pic3.jpg |
4 |
Термообменник вторичный |
шт |
|
2 |
pic1.png |
5 |
Картридж |
шт |
|
5 |
pic2.png |
Ключом данной сущности будет атрибут – Id. Для более краткой записи процесса нормализации введем следующие обозначения: I – код запчасти, Z –
наименование запчасти, E – единица измерения материала, K – количество на складе, P – изображение запчасти. Выпишем функциональные зависимости:
I -> Z, E, K, P; I -> Z; I -> E; I -> K; I -> P.
Рассмотрим отношение R(I, Z, E, K, P) с ключом I. Здесь есть функциональные зависимости I -> Z, I -> E, I -> K, I -> P. Так как каждый не ключевой атрибут зависит от первичного ключа, то отношение R(I, Z, E, K, P)
находится в 3НФ по определению, что и требовалось доказать.
Теперь рассмотрим сущность Отделы, представленную в таблице 2.3.
Таблица 2.3 – Сущность «Отделы»
Otd
Id |
O_name |
Rucovod |
Kab |
Telef |
1 |
Бухгалтерия |
Потапова А.Н. |
102 |
25-36-95 |
2 |
Отдел кадров |
Крюков М.С. |
201 |
29-36-95 |
3 |
Отдел АСУ |
Мохов А.Н. |
109 |
52-66-85 |
4 |
Цех 1 |
Васильев Р.В. |
|
15-25-36 |
5 |
Котельная 1 |
Сухарев П.О. |
|
52-63-29 |
23
Ключом данной сущности будет атрибут – Id. Для более краткой записи процесса нормализации введем следующие обозначения: I – код отдела, O –
наименование отдела, R – руководитель отдела, K – кабинет, T – телефон.
Выпишем функциональные зависимости: I -> O, R, K, T; I -> O; I -> R; I -> K; I -> T
Рассмотрим отношение R(I, O, R, K, T) с ключом I. Здесь есть функциональные зависимости I -> O; I -> R; I -> K; I -> T. Так как каждый не ключевой атрибут зависит от первичного ключа, то отношение R(I, O, R, K, T)
находится в 3НФ по определению, что и требовалось доказать.
Далее рассмотрим сущность Профилактика, представленную в таблице 2.4.
Таблица 2.4 – Сущность «Профилактика»
Profilact
Id |
Date |
Id_otd |
object |
Otm_vipln |
1 |
03.11.2018 |
2 |
Системный блок |
false |
2 |
03.11.2018 |
5 |
Насос для котла |
false |
3 |
03.12.2018 |
4 |
Терморегулятор вторичный |
false |
4 |
118.10.2018 |
1 |
Принтер |
true |
Ключом данной сущности будет атрибут – Id. Для более краткой записи процесса нормализации введем следующие обозначения: Id – код профилактики, D – дата проведения профилактики, IO – код отдела, O – объект профилактики, OV – отметка выполнения. Выпишем функциональные зависимости: Id -> D, IO, O, OV; Id -> D; Id -> IO; Id -> O; Id -> OV
Рассмотрим отношение R(Id, D, IO, O, OV) с ключом Id. Здесь есть функциональные зависимости Id -> D; Id -> IO; Id -> O; Id -> OV. Так как каждый не ключевой атрибут зависит от первичного ключа, то отношение R(Id, D, IO, O, OV) находится в третьей нормальной форме (3НФ) по определению,
что и требовалось доказать.
Рассмотрим сущность Работы, представленную в таблице 2.5.
Таблица 2.5 – Сущность «Работы»
Rabota
Id |
R_name |
Ed_Izm |
Id_Zapchact |
Kolvo_zapch |
1 |
Замена картриджа |
шт |
5 |
1 |
2 |
Ремонт материнской платы |
шт |
1 |
1 |
3 |
Замена теплообменника |
шт |
4 |
2 |
4 |
Установка насоса |
шт |
2 |
1 |
24
Ключом данной сущности будет атрибут – Id. Для более краткой записи процесса нормализации введем следующие обозначения: I – код работы, R –
наименование работы, EI – единица измерения, IZ – код запчасти, KZ –
количество требуемых запчастей. Выпишем функциональные зависимости: I -> R, EI, IZ, KZ; I -> R; I -> EI; I -> IZ; I -> KZ
Рассмотрим отношение R(I, R, EI, IZ, KZ) с ключом I. Здесь есть функциональные зависимости I -> R; I -> EI; I -> IZ; I -> KZ. Так как каждый не ключевой атрибут зависит от первичного ключа, то отношение R((I, R, EI, IZ, KZ) находится в 3НФ по определению, что и требовалось доказать.
Рассмотрим предпоследнюю сущность ПО, представленную в таблице 2.6.
Таблица 2.6 – Сущность «ПО»
Prog
Id |
P_name |
Date |
Id_otd |
Licens |
Date_ok |
1 |
Windows10 |
10.10.2017 |
1 |
false |
10.11.2018 |
2 |
MS Office |
10.09.2017 |
1 |
true |
10.09.2019 |
3 |
Delphi 7 |
15.10.2018 |
3 |
true |
15.10.2019 |
4 |
1С: Предприятие 8. Управление теплосетью |
02.08.2017 |
3 |
true |
20.01.2019 |
5 |
ГИС «Теплосети» |
15.01.2017 |
3 |
true |
15.03.2018 |
Ключом данной сущности будет атрибут – Id. Для более краткой записи процесса нормализации введем следующие обозначения: I – код ПО, Pn –
наименование ПО, D – дата установки, IO – код отдела, L – наличие лицензии, Do – дата окончания действия лицензии. Выпишем функциональные зависимости: I -> Pn, D, IO, L, Do; I -> Pn; I -> D; I -> IO; I -> L; I -> Do
Рассмотрим отношение R(I, Pn, D, IO, L, Do) с ключом I. Здесь есть функциональные зависимости I -> Pn; I -> D; I -> IO; I -> L; I -> Do. Так как каждый не ключевой атрибут зависит от первичного ключа, то отношение R(I, Pn, D, IO, L, Do) находится в 3НФ по определению, что и требовалось доказать.
Рассмотрим последнюю сущность Заявка, представленную в таблице 2.7.
Таблица 2.71 – Сущность «Заявка»
Zaavka
Id |
Date |
Id_otd |
Id_rabot |
Otm_vipln |
|
10.10.2018 |
2 |
1 |
false |
|
28.11.2018 |
4 |
3 |
true |
|
03.12.2018 |
5 |
4 |
false |
|
01.10.2018 |
1 |
2 |
true |
25
Ключом данной сущности будет атрибут – Id. Для более краткой записи процесса нормализации введем следующие обозначения: I – код заявки, D –
дата создания заявки, Io – код отдела, Ir – код работы, Ov – отметка выполнения заявки. Выпишем функциональные зависимости: I -> D, Io, Ir, Ov; I -> D; I -> Io; I -> Ir; I -> Ov
Рассмотрим отношение R(I, D, Io, Ir, Ov) с ключом I. Здесь есть функциональные зависимости I -> D; I -> Io; I -> Ir; I -> Ov. Так как каждый не ключевой атрибут зависит от первичного ключа, то отношение R(I, D, Io, Ir, Ov)
находится в 3НФ по определению, что и требовалось доказать.
Проанализировав данную модель, можно сказать, что для автоматизации процесса автоматизации деятельности сотрудников группы АСУ может потребоваться программа, которая будет хранить базу о таких данных, как справочник профилактики, заявки и другие, а также всю информацию о них.
Выводы по второму разделу
В результате выполнения второго раздела курсового проекта были определены требования к разрабатываемому приложению, а также разработаны модели в различных нотация. Исходя из анализа данных макетов нотаций
IDEF0, DFD и IDEF1X можно сделать вывод, что разрабатываемое web-
приложение автоматизирует работу сотрудников отдела АСУ, упростит документооборот между отделами по вопросам ремонта и профилактики вычислительной техники, помимо этого, будет содержать шесть справочников,
атакже в данном приложении вход будет осуществлять по логину и паролю.
Врезультате проектирования web-приложения был получен проект приложения, содержащий достаточно информации для её реализации.
26
3 РАЗРАБОТКА И ТЕСТИРОВАНИЕ ИС
3.1 Описание структуры базы данных
Rails поддерживает самые распространенные СУБД такие, как Firebird, MySQL, Oracle, MSSQLServer, PostgreSQL и SQLite [17]. По умолчанию СУБД в Rails является SQLite, поэтому при создании данного приложения был указан параметр “--database=postgresql”, который подключает СУБД PostgreSQL.
Разработанная ИС работает именно с СУБД PostgreSQL. В приложении Б представлен план разработки web-приложения в программе ProjectLibre.
Для разрабатываемой ИС «Отдел АСУ» требуется создать 6
справочников и 4 отчета. Списки отделов, работ, выполненных профилактик,
запчастей, установленных ПО, заявок. Отчеты: заявки за заданный период времени, невыполненные заявки, профилактические работы за заданный промежуток времени, документ учета ПО в организации на текущую дату. В
таблицах 3.1-3.6 представлено описание справочников.
Таблица 3.1 – Таблица «Отделы»
Название таблицы |
Название поля |
Тип поля |
Примечание |
otd (Отделы) |
Id |
Integer |
Генерируется самостоятельно |
|
O_name (Название отдела) |
string |
|
|
Rucovod (Руководитель) |
string |
|
|
Telef (Телефон) |
string |
|
|
kab (Кабинет) |
integer |
|
|
status |
boolean |
|
|
s_delete |
boolean |
|
|
created_at |
timestamp |
Генерируется самостоятельно |
|
updated_as |
timestamp |
Генерируется самостоятельно |
Таблица 3.2 – Таблица «Работа»
Название |
Название поля |
Тип поля |
Примечание |
|
rabotum |
Id |
|
Integer |
Генерируется самостоятельно |
(Работа) |
R_name (Название) |
string |
|
|
|
Ed_Izm |
(Единица измерения) |
string |
|
|
zaphact |
(Запчасти) |
Belongs_to |
Берется из таблицы запчасти |
|
Kolvo (Количество) |
intager |
|
|
|
status |
|
boolean |
|
|
s_delete |
|
boolean |
|
|
created_at |
timestamp |
Генерируется самостоятельно |
|
|
updated_as |
timestamp |
Генерируется самостоятельно |
|
|
|
27 |
|
|
Таблица 3.3 – Таблица «Профилактика»
Название |
Название поля |
Тип поля |
Примечание |
profilact |
Id |
Integer |
Генерирует самостоятельно |
(Профилактика) |
Data (Дата) |
date |
|
|
Otd (Отдел) |
Belongs_to |
Берется из таблицы отделы |
|
Object (объект) |
string |
|
|
Otm_v (отметка выполнения) |
boolean |
|
|
status |
boolean |
|
|
s_delete |
boolean |
|
|
created_at |
timestamp |
Генерируется самостоятельно |
|
updated_as |
timestamp |
Генерируется самостоятельно |
Таблица 3.4 – Таблица «Запчасти»
Название |
Название поля |
Тип поля |
Примечание |
zaphact |
Id |
integer |
Генерируется самостоятельно |
(Запчасти) |
|
|
|
Z_name (Наименование) |
string |
|
|
|
Ed_Izm (Единица измерения) |
string |
|
|
Kolvo (Кол-во на складе) |
integer |
|
|
Foto (Изображение) |
string |
|
|
status |
boolean |
|
|
s_delete |
boolean |
|
|
created_at |
timestamp |
Генерируется самостоятельно |
|
updated_as |
timestamp |
Генерируется самостоятельно |
Таблица 3.5 – Таблица «Установленное ПО»
Название |
Название поля |
Тип поля |
Примечание |
|
prog |
Id |
integer |
Генерируется самостоятельно |
|
(установленное |
|
|
|
|
p_name (Наименование) |
string |
|
||
программное |
data (дата установки) |
date |
|
|
обеспечение) |
|
|||
otd (отдел) |
Belongs_to |
Берется из таблицы отделы |
||
|
||||
|
licens (наличие лицензии) |
boolean |
|
|
|
data_ok (окончание лицензии) |
date |
|
|
|
Photo (логотип) |
string |
|
|
|
status |
boolean |
|
|
|
s_delete |
boolean |
|
|
|
created_at |
timestamp |
Генерируется самостоятельно |
|
|
updated_as |
timestamp |
Генерируется самостоятельно |
Таблица 3.6 – Таблица «Заявки»
Название |
Название поля |
Тип поля |
Примечание |
zakaz (Заявки) |
Id |
integer |
Генерируется самостоятельно |
|
|
|
|
|
data (дата создания) |
date |
|
|
otd (отдел) |
Belongs_to |
Берется из таблицы отделы |
|
Rabotum (работа) |
Belongs_to |
Берется из таблицы работы |
|
otm_v (отметка выполнения) |
boolean |
|
|
status |
boolean |
|
|
s_delete |
boolean |
|
|
created_at |
timestamp |
Генерируется самостоятельно |
|
updated_as |
timestamp |
Генерируется самостоятельно |
28
Для создания платформы (scaffold) Otd, которая состоит из модели,
представления и контроллера, записывается в консоли следующая команда: rails
generate scaffold Otd O_name:string Rucovod:string Telef:string Kab:integer status:boolean
s_delete:boolean
При генерации платформы был создан файл-миграция, в нем находятся сведения о структуре таблицы, которые необходимо внести в БД. Для этого
пропишем в консоли следующую команду: rake db:migrate
Создадим остальные платформы. Запишем последовательно в консоли (не
забывая затем выполнять команду добавления миграций в БД (rake db:migrate)):
для |
создания платформы Rabotum: |
rails generate |
scaffold Rabota |
|
R_name:string |
Ed_Izm:string |
zaphact:belongs_to |
Kolvo:integer |
status:boolean |
s_delete:boolean
для создания платформы Profilact: rails generate scaffold Profilact Data:date otd:belongs_to object:string status:boolean Otm_v:boolean s_delete:boolean
для создания платформы Zaphact: rails generate scaffold Zaphact z_name:string Ed_izm:string Kolvo:integer Foto:string status:boolean s_delete:boolean
для создания платформы Prog: rails generate scaffold Prog p_name:string data:date otd:belongs_to licens:boolean data_ok:date Photo:string status:boolean
s_delete:boolean
для создания платформы Zakaz: rails generate scaffold Zakaz data:date otd:belongs_to rabotum:belongs_to otm_v:boolean status:boolean s_delete:boolean
Таким образом, было создано шесть платформ (справочников), которые после выполнения команды rake db:migrate были созданы в БД. Проверить факт наличия таблиц можно, открыв pgAdmin и зайдя в БД «Otdel». Найти их можно в ветке таблицы.
3.2 Описание программных модулей
В данном проекте был спроектирован и создан ряд отдельных программных модулей, выполняющих специфические функции (модули объектов (справочников) и так далее). На рисунке 3.1 представлено дерево
29
программных модулей.
ПМ авторизации
ПМ главного меню
ПМ справочники
ПМ Запчасти
ПМ ввода
ПМ редактирования
ПМ удаление
ПМ просмотра
ПМ Работы
ПМ ввода
ПМ редактирования
ПМ удаление
ПМ просмотра
ПМ Установленное ПО
ПМ ввода
ПМ редактирования
ПМ удаление
ПМ просмотра
ПМ Отделы
ПМ ввода
ПМ редактирования
ПМ удаление
ПМ просмотра
ПМ Профилактика
ПМ ввода
ПМ редактирования
ПМ удаление
ПМ просмотра
ПМ Заявки
ПМ ввода
ПМ редактирования
ПМ удаление
ПМ просмотра
ПМ отчеты
ПМ Отчета1
ПМ обработка и выдача на экран
ПМ Отчета2
ПМ обработка и выдача на экран
ПМ Отчета3
ПМ обработка и выдача на экран
ПМ Отчета4
ПМ обработка и выдача на экран
ПМ экспорт
Рисунок 3.1 – Дерево программных модулей
ПМ пользователи
ПМ просмотра
30
Схема взаимосвязи программных модулей должна содержать базу данных и составные части (модули) и отражать связь между ними. На рисунке 3.2
изображена схема взаимосвязи модулей и массивов данных.
ПМ пользователи |
БД |
|
|
Таблица |
|
ПМ Запчасти |
«Пользователи» |
ПМ авторизации |
|
Таблица |
|
ПМ Работы |
«Запчасти» |
|
|
|
|
|
Таблица «Работы» |
ПМ Отчета1 |
|
|
|
ПМ Заявки |
|
|
|
Таблица «Заявки» |
ПМ Отчета2 |
ПМ Установленное ПО |
Таблица |
|
|
«Установленное ПО» |
ПМ Отчета4 |
ПМ Отделы |
Таблица |
|
«Отделы» |
|
|
|
ПМ Отчета3 |
|
|
|
|
|
Таблица |
|
ПМ Профилактика |
«Профилактика» |
|
Рисунок 3.2 – Схема взаимосвязи модулей и массивов данных
Из рисунка 3.2 видно, что модули отчетов, модули справочников и модуль авторизации при своей работе отправляю запросы в базу данных, а база данных модулям обратно отдает результаты запроса.
3.3 Реализация программных модулей
Отчет – представление требуемых данных в виде удобном для просмотра
ипечати.
Вданном web-приложении реализовано четыре отчета. Рассмотрим отчет
«Заявки за период времени». Данный отчет выводит код, наименование отдела,
название работы, дату создания и отметку выполнения в зависимости от того,
какой период был задан пользователем. Алгоритм работы этого отчета представлен на рисунке 3.3.
31