Для того чтобы выбрать целевую СУБД, необходимо провести сравнительный анализ различных СУБД.
Первым вариантом рассмотрим самую популярную СУБД Oracle. Преимущества Oracle состоят в следующем: частые обновление от разработчиков и свежие функционалы, надёжность, высокая скорость выполнения запросов, простота в использовании. Несмотря на всё это, Oracle имеет серьёзный недостаток, который заключается в высокой стоимости продукта.
Вторым вариантом СУБД рассмотрим MySQL. MySQL считается лучшей СУБД после Oracle, поддерживается большим количеством операционных систем. Её преимущества заключаются в том, MySQL имеет бесплатный доступ, частые обновления функционала, простой и понятный интерфейс, высокую производительность, а также хорошую безопасность.
Ещё один из вариантов СУБД является программный продукт MicrosoftSQL-сервер. Интересными особенностями MicrosoftSQL-сервера являются доступ визуализации на мобильных устройствах и взаимодействие с продуктами Microsoft. MicrosoftSQL-сервер также имеет высокую производительность и интуитивно понятный интерфейс. Недостатком же является высокая стоимость.
Итоговое сравнение СУБД приведено в таблице 1.2
Таблица 1.2 - Сравнительный анализ СУБД
|
Характеристика Название СУБД |
Высокая производительность |
Надёжность |
Постоянные обновления от разработчиков |
Бесплатный доступ |
|
|
Oracle |
+ |
+ |
+ |
- |
|
|
MySQL |
+ |
+ |
+ |
+ |
|
|
MicrosoftSQL- сервер |
+ |
+ |
+ |
- |
Как можно заметить из таблицы, все рассмотренные СУБД имеют ряд положительных критериев. Но решающим факторов выбора СУБД является бесплатный доступ к продукту. Таким образом, для разработки ПО целевой была выбрана MySQL.
1.5 Физическое проектирование базы данных
На этапе физического проектирования осуществляется выбор формата физической записи, размещение записей в памяти и выбор метода доступа к данным. Главный принцип при определении структуры физической записи - сохранение содержания логической записи.
«Хранимая запись - совокупность связанных элементов данных, соответствующих одной или нескольким логическим записям. Хранимая запись (физическая запись) состоит из двух частей: служебной части и информационной. Служебная часть хранимой записи используется для идентификации записи, задания ее типа, хранения признака удаления, для хранения указателей на элементы записи, идентификатора длины записи, для установления структурных ассоциаций между записями, для кодирования значений элементов. Пользовательские программы не имеют доступа к служебной части физической записи. Поля информационной части хранимой записи содержат значения элементов данных» [5].
Для того чтобы перенести логическую модель в среду целевой СУБД необходимо спроектировать базовые отношения, спроектировать представление производных данных и спроектировать общие ограничения.
В результате физического проектирования была создана БД, отражение которой находится в таблице 1.3.
Таблица 1.3 - Таблица физического проектирования БД для MySQL
|
Наименование поля |
Содержание поля |
Тип поля |
Размер поля |
Значение по умолчанию |
Условие на значение |
Ключ или индекс |
|
|
Перечень жанров (genres) |
|||||||
|
id |
Код жанра |
INT (Автоинкремент) |
11 |
Уникальное NOTNULL |
ПК |
||
|
name |
Название жанра |
VARCHAR |
50 |
NOTNULL |
|||
|
Перечень издателей (publishers) |
|||||||
|
id |
Код издателя |
INT (Автоинкремент) |
11 |
NOTNULL |
ПК |
||
|
name |
Наименование издателя |
VARCHAR |
50 |
NOTNULL |
|||
|
city |
Город издателя |
VARCHAR |
50 |
NOTNULL |
|||
|
Перечень авторов (autors) |
|||||||
|
id |
Код автора |
INT (Автоинкремент) |
11 |
Уникальное NOTNULL |
ПК |
||
|
name |
Наименование автора |
VARCHAR |
50 |
NOTNULL |
|||
|
Перечень книг (books) |
|||||||
|
id |
Код книги |
INT (Автоинкремент) |
11 |
ПК |
|||
|
name |
Наименование книги |
VARCHAR |
50 |
NOTNULL |
|||
|
Id_publisher |
Код издателя |
INT |
11 |
NOTNULL |
ВК |
||
|
Id_autor |
Код автора |
INT |
11 |
NOTNULL |
ВК |
||
|
count |
Количество |
INT |
11 |
NOTNULL |
|||
|
Сопоставление книга-жанры (book_genres) |
|||||||
|
Id_book |
Идентификатор книги |
INT |
11 |
ВК |
|||
|
Id_genre |
Название жанра |
INT (Автоинкремент) |
11 |
ВК |
|||
|
Перечень читательских билетов (readers_tickets) |
|||||||
|
id |
Номер чит. билета |
INT (Автоинкремент) |
11 |
ПК |
|||
|
phone_number |
Телефонный номер |
VARCHAR |
50 |
NOTNULL |
|||
|
adress |
Адрес |
VARCHAR |
50 |
NOTNULL |
|||
|
surname |
Фамилия |
VARCHAR |
50 |
NOTNULL |
|||
|
name |
Имя |
VARCHAR |
50 |
NOTNULL |
|||
|
patronymic |
Отчество |
VARCHAR |
50 |
||||
|
Перечень работников библиотеки (workers) |
|||||||
|
id |
Код работника |
INT (Автоинкремент) |
11 |
ПК |
|||
|
surname |
Фамилия |
VARCHAR |
50 |
NOTNULL |
|||
|
name |
Имя |
VARCHAR |
50 |
NOTNULL |
|||
|
patronymic |
Отчество |
VARCHAR |
50 |
||||
|
Перечень пользователей (users) |
|||||||
|
id |
Код пользователя |
INT (Автоинкремент) |
11 |
ПК |
|||
|
login |
Логин |
VARCHAR |
50 |
NOTNULL |
|||
|
password |
Пароль |
VARCHAR |
50 |
NOTNULL |
|||
|
id_ticket |
Идентификатор чит. билета |
INT |
11 |
ВК |
|||
|
id_profile |
Идентификатор работника |
INT |
11 |
ВК |
|||
|
type |
Тип пользователя |
INT |
11 |
||||
|
Перечень выданных книг (granted_books) |
|||||||
|
id |
Код выдачи |
INT (Автоинкремент) |
11 |
ПК |
|||
|
id_ticket |
Идентификатор чит. билета |
INT |
11 |
NOTNULL |
ВК |
||
|
id_book |
Идентификатор книги |
INT |
11 |
NOTNULL |
ВК |
||
|
granted_date |
Дата выдачи |
DATE |
NOTNULL |
||||
|
return_date |
Дата возвращения |
DATE |
NOTNULL |
||||
|
returned |
Книга возвращена? |
TINYINT |
1 |
NOTNULL |
|||
|
Перечень зарезервированных книг (reserved_books) |
|||||||
|
id |
Код выдачи |
INT (Автоинкремент) |
11 |
ПК |
|||
|
id_ticket |
Идентификатор чит. билета |
INT |
11 |
NOTNULL |
ВК |
||
|
id_book |
Идентификатор книги |
INT |
11 |
NOTNULL |
ВК |
Для более наглядного представления реализации физического проектирования БД на рисунке 1.16 представлена физическая модель, на которой также отображены наименование поля, тип и размер поля, внешние и первичные ключи.
Рисунок 1.16 - Физическая модель базы данных
1.6 Выводы по главе
В данной главе были рассмотрены существующие программные аналоги по теме системы кадров, составлены локальные и глобальная ER-модели, составлена логическая модель ПО, рассмотрены варианты СУБД и выбран наиболее подходящий вариант, составлена таблица физического проектирования БД.
2. Разработка приложения
В первой части была создана база данных, теперь стоит задача в том, чтобы разработать интерфейс интуитивно понятный для пользователя. Функциональность интерфейса должна соответствовать поставленным задачам.
2.1 Структура программной системы
Для приложения было создано 1 форма:
- «Родительская форма» (MyLibrary).
Так же было разработано 11 элементов управления (User Control):
- «Добавить чит. билет» (AddTicket);
- «Добавить/изменить чит. билеты» (AddTickets);
- «Добавление/удаление сотрудника/изменение данных о сотруднике» (Admin);
- «Авторизация пользователя» (Autorization);
- «Регистрация пользователя» (Registration);
- «Добавление/удаление/изменение книг и атрибутов» (BooksDesigner);
- «Добавление выданных книг/формирование отчёта/отметить возвращенные книги» (GrantedBooks);
- «Просмотр каталога книг/резервация книг» (Library);
- «Просмотр/редактирование списка зарезервированных книг» (ReservedBooks);
- «Родительский элемент управления - имитатор PageControl» (Worker);
- «Графики завозимых жанров и авторов» (Charts).
При открытии приложения пользователь попадает в главное меню MyLibrary, где без регистрации/авторизации ему доступен только каталог книг, в котором можно проводить поиск по названию, автору и издателю книги, а так же фильтрацию по жанрам, которые отображены в списке checkBoxList. Если обычный пользователь авторизуется/зарегистрирует, а так-же создаст свой читательский билет, то он получит возможность резервировать книги, и количество книг автоматически понижаеться на одну, из каталога, который отображается с помощью DataGridView.
Если пользователь авторизовался под учётной записью работника, то ему открывается возможность открывать вкладки «Добавление книг» и «Работник». В первой вкладке можно редактировать книги и их атрибуты. Можно добавлять, удалять книги, изменять информацию о них, увеличивать и уменьшать их количество. Такие же операции, кроме изменения количества, можно производить и с тремя списками атрибутов: «Жанры», «Авторы», «Издатели». Что список книг, что списки атрибутов отображаются через DataGridView, которые черпают данные из БД.
Вкладка «Работник» состоит из ещё 4-х вкладок: «Выданные книги», «Зарезервированные книги», «Читательские билеты», «Графики», между которыми можно переключаться одним нажатием, что должно эмулировать элемент управления из Delphy - PageControl.
Вкладка «Выданные книги» содержит список, структура которого содержит данные читательского билета, взятую человеком книгу, а также информация о том, возвращена ли книга. Данный список можно фильтровать при помощи трёх элементов radioButton и отобразить либо список возвращенных, либо список не возвращённых книг. Так же можно отобразить сразу весь список без фильтра. С помощью специальной кнопки можно отметить, что книга возвращена. Так же можно добавлять в список новые элементы с помощью удобного конструктора, на котором отображены списки читательских билетов и книг и необходимо просто выбрать по 1-му элементу из каждого списка.
На вкладке «Зарезервированные книги» можно найти список зарезервированных книг, с которым можно взаимодействовать только посредством кнопок: «Забрали», «Не пришли», первая из которых просто удаляет элемент списка, а вторая удаляет и прибавляет к количеству этих книг в таблице books одну книгу. А заполнением этой таблицы занимаются авторизованные пользователи с читательским билетом, которые резервируют книги.
Вкладка «Читательские билеты» содержит список читательских билетов, отображаемых с помощью DataGridView. Имеется возможность вносить правки в существующие билеты и добавлять новые для читателей, которые не пользуются данным программным продуктом.
На вкладке «Графики» расположены 2 графика. Первый - какие жанры, в большей части, имеются в библиотеке, а второй - наиболее распространённые в библиотеке авторы. Графики отображаются с помощью элемента управления chart.
При авторизации под аккаунтом администратора открывается возможность открыть вкладку «Администратор», где можно регистрировать работников в приложении, указывая их логин и пароль, чтобы потом сообщить им данные для входа в систему. Так же есть возможность редактирования и удаления работников из списка.
Интеграция с БД происходит с помощью DataSet1, на которой расположены Таблицы, адаптеры и запросы к БД, которые используются в программе.
2.2 Реализация бизнес-правил
Бизнес-правила представляют собой конкретные требования и условия для функций, задающие поведение данных. В практике проектирования бизнес-правила используются для поддержки целостности данных в базе данных. В общем случае существует три типа правил:
- правило вывода (derivationrule) преобразует полученную информацию в возвращаемые значения. Правила этого типа допускают изменения, и поэтому, прежде чем с ними можно было работать, их требуется выделить.
- правило ограничения (constraintrule) проверяет значения транзакции или операции на непротиворечивость. Кроме того, могут применяться вместе с булевыми результатами. Если они не истинны, то мы не сможем продолжить или завершить операцию.
- инвариантные правила (invariantrules) проверяют множественные изменения и обеспечивают непротиворечивость итоговых результатов [6].
Данный программный продукт должен подчиняться следующим правилам:
- Администратор должен иметь возможность добавлять, изменять и удалять данные о сотрудниках;
- Пользователь должен иметь возможность просматривать каталог книг библиотеки и, имея читательский билет, зарезервировать книгу.
- Работник должен иметь возможность добавлять, изменять, удалять элементы из списка книг, авторов, издателей, выданных книг и отмечать взятые или не взятые книги, из тех, что были зарезервированы.
На рис. 2.1 показана диаграмма прецедентов, отражающая данные правила.
На рисунке 2.2 показана диаграмма активности, показывающая, как программа реализует авторизацию пользователя.
При организации бизнес-правил важно учитывать, чтобы посторонний человек не мог зайти в систему, а обычный пользователь не имел прав доступа к функциональным возможностям администратора.
Алгоритм проверки данных для входа в систему, происходящий в Form1, представлен в листинге 2.1.
Листинг 2.1 - Проверка верных данных и наличие прав доступа
SQL: GetUserType(int id):
SELECT type
FROM users
WHERE (id = ?)
C#:
int type = Convert.ToInt32(Program.Queries.GetUserType(id));
Рисунок 2.1 - UML-диаграмма прецедентов
Рисунок 2.2 - Диаграмма активности
Для удобство просмотра каталога книг был добавлен поиск по названию, автору и издателю, а так же фильтрация по жанрам (листинг 2.2).
Листинг 2.2 - поиск по названию, автору и издателю, фильтрация по жанрам
SQL:
books_catalog_viewTableAdapter.GetData():
SELECT id, Автор, Название, Жанры, Издатель, Количество
FROM books_catalog_view
books_catalog_searchTableAdapter.GetData(string, string, string, string, string)
SELECT Автор, Название, Жанры, Издатель
FROM books_catalog_view
WHERE ((LOCATE(?, Автор) > 0) OR
(LOCATE(?, Название) > 0) OR
(LOCATE(?, Издатель) > 0)) AND ((LOCATE(?, Жанры) > 0) OR (? = 'Все'))
C#:
private void textBoxSearch_TextChanged(object sender, EventArgs e)
{
string pr = ((TextBox)sender).Text;
string gr = checkedListBoxGenres.CheckedItems[0].ToString();
if ((pr == "" || pr == " ") & gr == "Все")
dataGridView1.DataSource = view_Adapter.GetData();