Проектирование баз данных

Проектирование баз данных. Для обеспечения требуемой функциональности, разрабатываемый программный комплекс должен обрабатывать большие объемы данных, таких как тестовые наборы данных, данные о группах, пользователях и результатах прохождения тестов пользователями, различные служебные данные.

По этой причине к среде хранения данных предъявляются жесткие требования: обеспечение целостности и непротиворечивости хранимых данных, высокая скорость обработки данных, высокая степень защищенно сти данных от посягательств со стороны злоумышленников, поддержка многопользовательского доступа к данным с функциями разрешения или исключения конфликтных ситуаций.

Всем описанным требованиям отвечают реляционные базы данных. В качестве целевой системы управления базой данных (СУБД) выбран Microsoft SQL Server 2005(Standard Edition), который полностью обеспечивает выполнение поставленных выше требования к среде хранения данных. Кроме этого выбранный программный продукт обладает достаточно удобными средствами администрирования баз данных, что существенно упрощает разработку программного комплекса в целом.

Несмотря на то, что проектируемая база данных состоит из взаимосвязанных сущностей, в ней можно выделить две основные подгруппы сущностей. К первой подгруппе отнесем сущности, описывающие хранилища данных о тестах, вопросах и ответах к этим вопросам. Ко второй – сущности пользователей, групп пользователей и результатов прохождения пользователя ми тестов. На рисунке 2.2 представлена ER-модель разрабатываемой базы данных.

Рисунок 2.2 – ER-модель базы данных Опишем входящие в базу данных сущности и их атрибуты Сущность Sections. Информация о разделах тестов. Атрибуты: • Section_id. Тип: integer. Первичный ключ. • Section_name. Тип: text. Наименование раздела тестов. • Section_hidden. Тип: bit. Флаг сокрытия раздела тестов. Принимает значения «1» и «0». При значении «1» раздел тестов удаляется из списка видимых. Информация не удаляется. Сущность Tests. Информация и параметры теста.

Атрибуты: • Test_id. Тип: integer. Первичный ключ таблицы. • Test_description. Тип: text. Описание теста. • Test_section_id. Тип: integer. Хранится идентификатор из сущности Sections. Определяет принадлежность теста к разделу. • Test_name. Тип: text. Имя теста. • Test_type. Тип: integer. Тип теста. Принимает значения «0» и «1». «0» - контрольный тест, «1» - психологический (подсчет баллов). • Test_author. Тип: varchar(128). Автор теста. • Test_questions_count. Тип: integer.

Количество вопросов в тесте. • Test_questions_limit. Тип: integer. Определяет то количество из общего числа вопросов в тесте, которое будет задано пользователю. • Test_is_random_answers. Тип: bit. Флаг перемешивания вариантов ответов. Принимает значения «1» и «0». • Tests_is_time_limit. Тип: bit. Флаг ограничения времени на тест. Принимает значения «1» и «0». • Test_time_limit. Тип: char(8). Ограничение времени на тест. • Test_is_back. Тип: bit. Флаг возможности возврата на предыдущий вопрос.

Принимает значения «1» и «0». Сущность Questions. Вопросы тестов. Атрибуты: • Question_id. Тип: integer. Первичный ключ. • Question_test_id. Тип: integer. Хранится идентификатор из сущности Tests. Определяет принадлежность вопроса к тесту. • Question _number. Тип: integer. Локальный номер вопроса. Нумерация начинается с единицы. • Question_header. Тип: varchar(1024). Заголовок вопроса. Может дублироваться текст вопроса. Используется при ведении истории ответов пользователя. • Question_Text. Тип: text. Текст вопроса.

Поддерживается возможность форматирования текста и использования стандартных OLE-объектов. • Question_time. Тип: char(8). Время на ответ. • Questin_type. Тип: integer. Тип вопроса. «0» - одиночный выбор, « 1» - множественный выбор, «2» -соответствие , «3» - упорядоченный список. «4» - свободный ввод. • Question_weight. Тип: integer. Количество начисляемых баллов в случае правильного ответа на вопрос. Сущность Answers. Варианты ответов к вопросам.

Атрибуты: • Answer_id. Тип: integer. Первичный ключ. • Answer_question_id. Тип: integer. Хранится идентификатор из сущности Questions. Определяет принадлежность варианта ответа к вопросу. • Answer_nu mber. Тип: integer. Локальный номер ответа. Нумерация начинается с единицы. Используется только для ответов на вопрос типа «упорядоченный список» • Answer_text. Тип: varchar(512). Текст варианта ответа. Возможность форматирования текста отсутствует. • Answer_score. Тип: integer. Количество баллов, начисляемых за ответ. Используется при типе теста «Психологический». • Answer_right.

Тип: bit. Флаг правильности ответа. Принимает значения «0» и «1». При типах вопроса «упорядоченный список», «на соответствие» и «свободный ввод» - всегда устанавливается значение «1» • Answer_corresp. Тип: varchar(512). Применяется для определения правильного ответа в вопросах на соответствие. • Answer_picture. Тип: image. Может храниться изображение с вариантом ответа С ущность Groups. Информация о группах пользователей.

Атрибуты: • Group_id. Тип: integer. Первичный ключ. • Group_name. Тип: varchar(512). Наименование группы. • Group_description. Тип: varchar(512). Описание группы. • Group_hidden. Тип: bit. Флаг сокрытия группы. Принимает значения «1» и «0». При значении «1» группа удаляется из списка видимых. Информация не удаляется. Сущность Groupsections. Информация о соответствии группам разделов тестов. Атрибуты: • Id. Тип: integer. Первичный ключ. • Gs_group_id. Тип: integer.

Идентификатор группы. • Gs_section_id. Тип: integer. Идентификатор раздела тестов. Сущность Users. Информация о пользователях. Атрибуты: • User_id. Тип: integer. Первичный ключ. • User_group_id. Тип: integer. Хранится идентификатор из сущности Groups. Определяет принадлежность пользователя к группе. • User_name. Тип: varchar(512). Имя пользователя в формате ФИО. • User_code. Тип: varchar(128). Дополнительное поле для идентификатора пользователя (например, номера зачетной книжки). • User_password.

Тип: varchar(128). Пароль пользователя. Хранится в закодированном виде. Алгоритм кодирования – md5. • User_desable_test. Тип: bit. Флаг, позволяющий временно запретить данному пользователю тестироваться • User_garants. Тип: integer. Кодирует права доступа пользователя. «0» - тестирующийся, «1» - редактор тестов, «2» - администратор • User_info. Тип: varchar(512). Информация о пользователе. • User_deleted Тип: bit. Флаг удаления пользователя. Принимает значения «1» и «0». При значении «1» становится невозможным использование учетной записи, данные сохраняются. • User_mail. Тип: varchar(128). Адрес e-mail пользователя.

Сущность User_results. Хранение результатов тестирования. Атрибуты: • User_result_id. Тип: integer. Первичный ключ. • User_result_completed. Тип: bit. Флаг окончания теста (ответ на все имеющиеся вопросы). Принимает значения «1» и «0». • User_result_time_begin. Тип: smalldatetime. Время начала тестирования. • User_result_time_end. Тип: smalldatetime.

Время окончания тестирования. • User_result _cmpleted_questions. Тип: integer. Количество пройденных вопросов. • User_result_right_questions. Тип: integer. Количество правильных ответов. • User_result_score. Тип: integer. Количество заработанных баллов. • User_result_percent_right. Тип: real. Процент правильных ответов. • User_result_total_questions. Тип: integer. Всего вопросов в тесте. • User_result_test_title. Тип: varchar( 128). Название теста • User_id. Тип: integer. Хранится идентификатор из сущности Users. Определяет принадлежность результата к конкретному пользователю.

Сущность User_answers. Лог прохождения теста, может быть показан в отчете. Атрибуты: • User_answer_user_result_id. Тип: integer. Первичный ключ. • User_answer_qnumber. Тип: integer. Номер вопроса. • User_answer_question. Тип: varchar(512). Текст вопроса с элементами разметки гипертекста для корректного вывода в поле отчета. • User_answer_answer. Тип: varchar(512). Текст ответа с элементами разметки гипертекста для корректного вывода в поле отчета. • User_answer_time. Тип: char(8). Время ответа на вопрос. • User_answer_is_right.

Тип: bit. Флаг правильности ответа. Принимает значения «T» и «F». • User_answer_score. Тип: integer. Полученные баллы. • User_answer_answerd. Тип: bit. Флаг ответа на вопрос. Принимает значения «1» и «0». Поддержка целостности и непротиворечивости данных осуществляется средствами целевой СУБД MS SQL Server 2005. При возникновении конфликтной ситуации СУБД генерирует соответствующее сообщение, которое автоматически будет транслировано в клиентское приложение и показано пользователю.

Вызвавшая исключительную ситуацию транзакция выполнена не будет, а набор данных будет возвращен в предыдущее непротиворечивое состояние. Резервное копирование данных, настройка и иные административные функции выполняются средствами администрирования, такими, как SQL Server Management Studio и SQL Server Business Intelligence Development Studio. Наличие описанных механизмов поддержки целостности и непротиворечивости данных, а так же средств администрирования базы данных, делает обоснованным использование SQL Server 2005 в качестве целевой СУБД. 2.3 Разработка и описание рабочих алго ритмов В виду того, что модули разрабатываемого программного комплекса должны работать в многопользовательской среде, алгоритмы их работы должны обладать низкой ресурсоемкостью и малым временем выполнения.

Необходимо отметить, что в модуле редактирования тестов и модуле администрирования наличие каких-либо сложных вычислительных алгоритмов не предполагается.

По сути, эти модули являются средствами просмотра и редактирования содержимого базы данных. Возникающие в процессе работы этих модулей задержки обусловлены лишь задер жкой, связанной с пересылкой результатов запроса от СУБД к программному модулю, которая в свою очередь может меняться в зависимости от условий эксплуатации модулей: параметров сервера базы данных и качества линии связи между программным модулем и сервером базы данных.

В модуле тестирования пользователя помимо задержек, связанных с пересылкой запросов от сервера к клиенту, дополнительно могут возникнуть задержки при обработке и анализе ответа пользователя. Рассмотрим общий алгоритм работы модуля тестиров ания пользователей. Рисунок 2.3 – Алгоритм работы модуля тестирования Рисунок 2.4 – Алгоритм работы модуля тестирования (продолжение) С целью приблизительной оценки задержки при работе модуля тестирования в многопользовательском режиме был произведен эксперимент, результаты которого приведенные в таблице 2.1 Таблица 2.1 Результаты тестирования на быстродействие в многопользовательском режиме. № Тестовый сервер Кол-во пользователей Время выполнения, с 1 Intel Celeron200 0, 2Гб ОЗУ PC-3200 10 0,013-0,015 20 0,012-0,016 Количество замеров для обоих случаев равно пяти. Как видим, полученные задержки малы, что обусловлено малой вероятностью выполнения сервером одновременно нескольких запросов к базе данных.

Для этого нужно было бы, чтобы запросы пришли одновременно с точностью 0.01с. 2.4