Объект "Подразделы курса" включает в себя информацию о подразделах курсов. Он обладает свойствами: Идентификатор подраздела курса, № курса, № подраздела, Ссылка загрузки подраздела, Описание подраздела, Название теста по подразделу, Количество вопросов в тесте. Все указанные свойства, кроме свойства Идентификатор подраздела курса, являются динамическими, т.е. могут меняться. Поле Идентификатор подраздела курса - статическое.
Объект "Преподаватели" включает в себя информацию о преподавателях курсов ДО. Он обладает свойствами: Идентификатор преподавателя, Фамилия Имя Отчество преподавателя, Ученая степень преподавателя, Адрес электронной почты преподавателя, Информация о преподавателе, Фото преподавателя. Все указанные свойства, кроме свойства Идентификатор преподавателя, являются динамическими, т.е. могут меняться. Поле Идентификатор преподавателя - статическое.
Объект "Курсы пользователей" включает в себя информацию о курсах ДО, на которые зарегистрировались пользователи системы. Он обладает свойствами: Идентификатор курса, Логин, № курса, Статус курса, Дата регистрации курса. Все указанные свойства, кроме свойств Идентификатор курса и Дата регистрации курса, являются динамическими, т.е. могут меняться. Поля Идентификатор курса и Дата регистрации курса - статические, их значение не меняется.
Объект "Тесты пользователей" включает в себя информацию о результатах тестирования зарегистрированных студентов. Он обладает свойствами: Идентификатор теста, № курса пользователя, Число попыток теста, Процент лучшего результата теста, Дата последнего тестирования. Все указанные свойства, кроме свойства Идентификатор теста, являются динамическими, т.е. могут меняться. Поле Идентификатор теста - статическое.
Объект "Допустимые шифры" содержит шифры студентов, имеющих возможность дистанционного обучения. Он обладает свойством: Шифр студента. Это поле не изменяется - оно статическое.
Объект "Вопросы тестов" содержит вопросы для тестов. Он обладает свойствами: Идентификатор вопроса, № подраздела курса, Контекст вопроса. Все указанные свойства, кроме свойства Идентификатор вопроса, являются динамическими, т.е. могут меняться. Поле Идентификатор вопроса - статическое.
Объект "Ответы на вопросы тестов" содержит ответы на вопросы тестов. Он обладает свойствами: Идентификатор ответа, № вопроса, Контекст ответа, Флаг правильного ответа. Все указанные свойства, кроме свойства Идентификатор ответа, являются динамическими, т.е. могут меняться. Поле Идентификатор ответа - статическое.
Объект "Новости" содержит информацию для вывода новостей. Он обладает свойствами: Идентификатор новости, Название новости, Дата новости, Контекст новости, Автор новости. Все указанные свойства, кроме свойства Идентификатор новости, являются динамическими, т.е. могут меняться. Поле Идентификатор новости - статическое.
Объекты "Пользователи" и "Курсы пользователей" связаны между собой связью "один-ко-многим", объекты "Пользователи" и "Допустимые шифры" - связью "один-к-одному", объекты "Курсы пользователей" и "Курсы ДО" - связью "многие-к-одному", объекты "Курсы пользователей" и "Тесты пользователей" - связью "один-ко-многим", объекты "Курсы пользователей" и "Тесты пользователей" - связью "один-ко-многим", объекты "Курсы ДО" и "Преподаватели" - связью "многие-к-одному", объекты "Курсы ДО" и "Подразделы курса" - связью "один-ко-многим", объекты "Тесты пользователей" и "Подразделы курса" - связью "многие-к-одному", объекты "Подразделы курса" и "Вопросы тестов" - связью "один-ко-многим", объекты "Вопросы тестов" и "Ответы на вопросы тестов" - связью "один-ко-многим", объект "Новости" не связан с другими объектами.
На основании анализа предметной области и построенной инфологической модели разработана реляционная база данных RLI_test. Для реляционной базы данных проектирование физической структуры заключается в том, чтобы разбить всю информацию по таблицам, а также определить состав полей для каждой из этих таблиц и установить связи между таблицами.
В каждой таблице присутствует уникальное идентификационное поле, которое позволяет однозначно идентифицировать запись таблицы. Такая структура исключает избыточность данных, позволяет ускорить отбор записей по условию, исключает вероятность конфликтов при совместной работе нескольких пользователей.
Одной из основных таблиц является таблица "users". В ней хранится вся информация о пользователях, зарегистрированных в системе. Таблица содержит поля - login- идентификационное поле, идентифицирующее единственным образом студента при входе в систему. Passwd- пароль для доступа к подсистеме обучения. Пароль кодируется шифром md5, алгоритм которого реализован в языке PHP. Кодирование позволяет защитить пароль от просмотра заинтересованными пользователями. По этим двум параметрам осуществляется вход в систему.
Поле n_group хранит информацию о названии учебной группы студента. Поле registration_date содержит дату регистрации студента в системе, это поле заполняется автоматически текущей датой при успешной регистрации в системе. Поле sex хранит пол студента - женский или мужской. В поле student_code хранится шифр студента. По этому полю система проверяет, может ли студент обучаться дистанционно или нет. Запретить обучение может администратор системы. Проверка осуществляется поиском значения шифра в таблице student_codes.
Поле u_admin идентифицирует данного пользователя как администратора или обычного пользователя. Если пользователь является администратором, он обладает дополнительными правами по редактированию базы данных, просмотру статистики, успеваемости, редактированию данных курсов и редактированию базы тестов.
Ключевым полем в таблице users является поле login. По полю login данная таблица связана с таблицей "user_courses" связью "один-ко-многим", по полю student_code- c таблицей "student_codes" связью "один-к-одному". Типы данных полей таблицы "users" представлены в таблице 2.1
Таблица 2.1 - Структура таблицы "users"
№п/п | Описание | Поле | Тип данных | Дополнительные параметры |
1 | Логин студента | login | char(16) | Ключевое |
2 | Пароль | passwd | char(128) | NOT NULL |
3 | Фамилия | lastname | char(40) | NOT NULL |
4 | Имя | firstname | char(40) | NOT NULL |
5 | Отчество | middlename | char(40) | NOT NULL |
6 | Учебная группа | n_group | char(40) | NOT NULL |
7 | Дата регистрации в системе | registration_date | date | |
8 | Пол | sex | enum('мужской', 'женский') | |
9 | Адрес электронной почты | char(128) | NOT NULL | |
10 | Шифр студента | student_code | char(10) | NOT NULL, UNIQUE |
11 | Флаг администратора | u_admin | enum('y', 'n') | DEFAULT 'n' |
В таблице "courses" хранится информация о курсах дистанционного обучения. Ключевым полем в таблице является поле id_course. Таблица связана по полю id_course с таблицей "user_courses" и таблицей "course_parts" связью "один-ко-многим", по полю n_teacher с таблицей "teachers" связью "многие-к-одному". Поле course_period содержит информацию о продолжительности курса в месяцах. Если студент не прошел курс с даты регистрации в течение числа месяцев, указанных в course_period курс считается не сданным. Структура таблицы с описанием типов полей приведена в таблице 2.2
Таблица 2.2 - Структура таблицы "courses"
№п/п | Описание | Поле | Тип данных | Дополнительные параметры |
1 | Идентификатор курса | id_course | int | Ключевое, AUTO_INCREMENT |
2 | Название курса | course_name | char(128) | NOT NULL |
3 | Аннотация курса | course_annotation | text | |
4 | Ссылка на файл описания курса | course_full_description | char(128) | |
5 | Ссылка на файл картинки курса | course_picture_link | char(128) | |
6 | Продолжительность курса | course_period | float | |
7 | Преподаватель курса | n_teacher | int | NOT NULL |
В таблице "course_parts" хранится информация о подразделах курсов дистанционного обучения. Ключевым полем в таблице является поле id_course_part. Таблица связана по полю id_course_part с таблицей "questions" и таблицей "user_tests" связью "один-ко-многим", по полю n_course с таблицей "courses" связью "многие-к-одному". Структура таблицы с описанием типов полей приведена в таблице 2.3
Таблица 2.3 - Структура таблицы "course_parts"
№п/п | Описание | Поле | Тип данных | Дополнительные параметры |
1 | Идентификатор подраздела курса | id_course_part | int | Ключевое, AUTO_INCREMENT |
2 | Курс | n_course | int | NOT NULL |
3 | Подраздел курса | n_part | int | NOT NULL |
4 | Ссылка на файл загрузки подраздела курса | download_link | char(128) | NOT NULL |
5 | Описание ссылки загрузки | download_description | text | |
6 | Название теста | test_name | char(128) | |
7 | Количество вопросов, выводимых при тестировании | test_question_count | int | NOT NULL, DEFAULT 5 |
В таблице "questions" хранится информация о вопросах тестов. Ключевым полем в таблице "questions" является поле id_question. Таблица связана по полю id_question с таблицей "answers" связью "один-ко-многим", по полю n_course_part с таблицей "course_parts" связью "многие-к-одному". Структура таблицы с описанием типов полей приведена в таблице 2.4