SQL-тренажер по дисциплине «Управление данными»
Дисциплина «Управление данными» является базовой дисциплиной профессионального цикла направления ВПО 230400 «Информационные системы и технологии», при изучении которой студенты овладевают технологией баз данных, которая является одной из наиболее важных информационных технологий.
Дистанционное обучение занимает всё большую роль в модернизации образования. Согласно приказу № 137 Министерства образования и науки РФ от 06.05.2005 «Об использовании дистанционных образовательных технологий», итоговый контроль при обучении с помощью дистанционных образовательных технологий можно проводить как очно, так и дистанционно.
Были проанализированы существующие открытые информационно-образовательные системы для дистанционного обучения и установлено, что среди множества разнообразных систем дистанционного образования предпочтительной является платформа Moodle, которая принята в нашем университете (РХТУ им. Д.И.Менделеева).
Однако данная система не содержит модуля для реализации тренажера, предназначенного для работы с базами данных. Поэтому возникла необходимость разработки web-тренажера для работы с базами данных и сопутствующими ему информационно-образовательными ресурсами, которые могут быть использованы как при очном обучении, так и при дистанционном обучении по курсу «Управление данными». Образование в области информационных технологий, прежде всего, предполагает формирование устойчивых практических навыков. В курсе «Управление данными» основные темы связаны с проектированием и администрированием баз данных, а также разработкой приложений, использующих базы данных. Базовым навыком здесь является владение языком структурированных запросов (SQL).
В интернете существуют ресурсы [1, 2], позволяющие приобрести или повысить свои навыки в написании операторов манипуляции данными языка SQL. Данный проект, по нашему мнению, предназначен для профессионалов в области баз данных с целью повышения квалификации. Однако для дистанционного обучения его невозможно применить, поскольку для преподавателя здесь нет возможности контроля обучения и модификации заданий.
Цель данного проекта — разработка электронного тренажера для манипулирования данными в базах данных (SQL-тренажер) для обучения (тренинга) и контроля знаний студента и внедрение тренажера в учебный процесс.
Концептуальная модель SQL-тренажера
Тренажер состоит из трех основных компонентов: модуля для обучения и контроля знаний студента, модуля преподавателя для создания и редактирования задач и модуля помощи.
Особенностью данного SQL-тренажера является то, что обучение языку запросов ведется на реально существующих базах данных, размещенных на сервере, посредством web-клиента, что позволяет студенту и преподавателю работать с тренажером на любом компьютере, подключенном к сети Интернет.
Обучение состоит в том, что студент, выполняя задание, пишет оператор на языке SQL (SQL-запрос), который должен извлечь или изменить данные, требуемые заданием. В случае неправильного ответа студент может узнать, какие данные возвращает правильный запрос, а также увидеть, что вернул его сформированный SQL-запрос. Задания разбиты на категории по темам и по уровню сложности. Манипуляции с данными могут проводиться над несколькими учебными базами данных в зависимости от варианта.
Модуль преподавателя обеспечивает преподавателю возможность контролировать успеваемость, модифицировать задания и варианты, что позволяет обеспечить дистанционное и очное обучение по стандарту языка SQL в виде лабораторного практикума.
Одним из требований к данной системе является возможность интеграции с модульной объектно-ориентированной динамической учебной средой Moodle, с целью комплексного контроля успеваемости студентов по другим разделам изучаемой дисциплины.
Разработанные требования к электронному тренажеру и разработанная архитектура обучающей системы позволяет наращивать новые функции и модули.
Архитектура системы «SQL-тренажер»
Доступ к данным осуществляется по клиент-серверной архитектуре (рис.1). Клиентами являются браузеры студентов и преподавателя, серверная часть состоит из нескольких компонентов и размещена на выделенном сервере с постоянным IP-адресом (сервер ИКТ).
Рис.1. Архитектура системы«SQL-тренажер»
Сервер состоит из компонентов:
-Web-сервер(nginx) – осуществляет доступ клиентов к html-странице web-интерфейса;
-Фреймворк Django – свободный фреймворк для веб-приложений на языке Python. Такая технология программирования связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных», в которой модель данных описывается классами объектно-ориентированного языка Python, и по ней генерируется схема базы данных.
-Система управления базами данных (СУБД) работает с данными из служебной и учебной баз данных (БД).
Фреймворк является каркасом для создания web-приложений, он уже содержит множество готовых функций. Выбор пал на кроссплатформенный фреймворк Django 1.3. Основные причины такого решения: высокая скорость разработки приложения и высокое быстродействие работы системы.
Существует множество диалектов SQL, но все они реализуют стандартное подмножество ANSI SQL. В качестве СУБД была выбрана MySQL. Эта СУБД достаточно популярна в web-разработках, поскольку является бесплатной, обладает высокой скоростью выполнения запросов и работает с множеством языков программирования.
При разработке web-приложений в настоящее время критически важными являются быстродействие системы, минимизация трафика, обновление данных без перезагрузки страницы.
При разработке web-приложения был использован не простой POST-запрос (метод POST применяется для передачи пользовательских данных заданному ресурсу), а AJAX -POST-запрос (технология AJAX заключается в фоновом обмене данными браузера с web-сервером, в результате чего, при обновлении данных, web-страница не перезагружается полностью, и web-приложения становятся более быстрыми и удобными). При использовании обычного POST-запроса страница будет перегружаться, что в нашем случае может привести к потере данных. AJAX-POST-запрос асинхронно подгружает нужную информацию без перезагрузки страницы. Это позволяет сохранить код SQL-запроса, написанного с ошибкой: в случае отправки такого кода на проверку исходный вариант сохраняется и может быть исправлен. Использование ajax-запросов также позволяет уменьшить нагрузку на сервер.
В качестве web-сервера был использован сервер nginx, работающий на Unix-подобных операционных системах (web-сервер работает под операционной системой Linux), поскольку данный web-сервер прост в использовании, кроме того web-сервер nginx удобен для запуска на сервере Django-приложений.
Принцип работы интерфейса студента построен на GET-запросах (метод GET используется для запроса содержимого указанного ресурса) и AJAX-POST-запросах (рис. 2). При запуске страницы студента автоматически подгружается из служебной базы список задач. При выборе задачи AJAX-POST-запросом посылаются данные на сервер, сервер обрабатывает и отдает условие задачи обратно. По условию задачи пишется SQL-код, при нажатии кнопки выполнить, посылается AJAX-POST-запросом на сервер SQL-код, сервер отправляет код в СУБД MySQL, которая взаимодействует с учебной БД, обратно посылаются данные о выполнении SQL-кода; в web-приложении формируется таблица результата запроса (если SQL-код правильный) и отсылается на страницу студента.
Рис.2. Схема работы интерфейса студента
Базы данных
Служебная база Django
Служебная база данных состоит из: базы данных заданий (рис. 3а), базы данных учебного материала (рис. 3б).
Рис. 3. Инфологическая модель служебной базы данных Django: а - база данных заданий, б – база данных учебного материала
Тестовая база данных состоит из 4-х связанных между собой таблиц (рис. 3а):
• Group(группы)
o Group – себе название групп вопросов;
o Active – активность данной группы, переменная булевского типа, принимающая два значения: 1 или 0.
• Task(задачи)
o Taskname – название задачи, например: Задача 1;
o Group – название группы к которой принадлежит данная задача, связана с таблицей Group по внешнему ключу;
o Tasktext – условие данной задачи;
o Active – активность данной задачи, переменная булевского типа, принимающая два значения: 1 или 0;
o SQLcode – в данном поле хранится SQL-запрос;
o Result – в данном поле хранится ответ данной задачи.
• User(пользователи)
o username – логин пользователя;
o first_name – имя пользователя;
o last_name – фамилия пользователя;
o email – email пользователя;
o password – пароль пользователя;
o is_staff – статус персонала, переменная булевского типа, принимающая два значения: 1 или 0;
o is_active – активность пользователя, переменная булевского типа, принимающая два значения: 1 или 0;
o is_superuser – супер пользователь, переменная булевского типа, принимающая два значения: 1 или 0;
o last_login – последний вход в систему данного пользователя.
• Score(оценки)
o Score – поле с оценкой студента;
o Student – пользователь, который получил оценку, связана внешним ключом с таблицей User;
o Task – название задачи, на которую ответил студент, связана внешним ключом с таблицей Task.
База данных учебного материла, состоит из одной таблицы (рис. 3.2. б):
• Books
o Bookname – название учебного материала;
o Html – html-ссылка на внешние источники информации;
o Booktext – текст данного материала;
o Active – активность данного материала, переменная булевского типа, принимающая два значения: 1 или 0.
Учебная база данных
Учебная база данных моделирует учет успеваемости студентов при сдаче экзаменов и состоит из пяти таблиц, где хранятся данные о предметной области: экзаменах, группах, предметах, преподавателях и студентах.
Рис. 4. Инфологическая модель учебной базы
Рис. 5. Даталогическая модель учебной базы
Структура таблиц учебной базы данных (рис. 5):
• Grup(группы)
o Id_Group – первичный ключ для таблицы Grup;
o Name_Group – имя группы.
• Subject(дисциплины)
o Id_Sub – первичный ключ для таблицы Subject;
o Name – название дисциплины;
o Semestr – семестр, в котором преподается данная дисциплина.
• Student(студенты)
o Is_Stud – первичный ключ для таблицы Student;
o Last_Name – фамилия студента;
o First_Name – имя студента.
• Lecturer(лекторы)
o Id_Lect – первичный ключ для таблицы Lecturer;
o Last_Name – фамилия преподавателя (лектора);
o First_Name – имя преподавателя (лектора);
o Post – должность преподавателя (лектора).
• Exams(экзамены)
o Date_Exam – дата экзамена;
o Id_Group – внешний ключ;
o Id_Stud – внешний ключ;
o Id_Sub – внешний ключ;
o Id_Lect – внешний ключ;
o Rating – оценку, которую получил студент на экзамене;
o Semestr – семестр, в котором проходил экзамен.
Первая версия проекта ориентируется на стандартный ANSI SQL 1992, и задачи, связанные с извлечением данных, делятся на следующие категории [3, 4]:
1. Однотабличные запросы
2. Многотабличные запросы
3. Сложные запросы использующие: вложенные запросы, объединения
4. Запросы с группировкой
5. Вычисляемые запросы.
Примеры задач однотабличных запросов:
1. Задача: Выведите преподавателей, которые являются профессорами из таблицы лекторов (Lecturer). Примечание: должность (Post) — 'Professor'.
Соответствующий SQL-код:
SELECT * FROM Lecturer WHERE Post = 'Professor';
2. Задача: Вывести все предметы, которые преподаются после 5 семестра из таблицы(Subject).
Соответствующий SQL-код:
SELECT * FROM Subject WHERE Semestr > 5;
Задача: Выведите всех студентов, чьи фамилии(Last_Name) начинаются на букву 'A'.
Соответствующий SQL-код:
SELECT * FROM Student WHERE Last_Name LIKE 'A%';
3. Задача: Вывести максимальную оценку (Rating), которая была получена на экзамене в 3 семестре (Semestr) из таблицы экзаменов (Exams).
Соответствующий SQL-код:
SELECT MAX (Rating) FROM Exams WHERE Semestr = '3';
4. Задача: Вывести имена, фамилии и оценки всех студентов.
Соответствующий SQL-код:
SELECT Student.First_Name, Student.Last_Name, Exams.Rating
FROM Student, Exams
WHERE Exams.Id_Stud = Student.Id_Stud.
Примеры задач на многотабличные запросы:
5. Задача: Вывести имена, фамилии и оценки всех студентов (Примечание: оценки (Rating) в таблице экзаменов (Exams).
Соответствующий SQL-код:
SELECT Student.First_Name, Student.Last_Name, Exams.Rating
FROM Student, Exams
WHERE Exams.Id_Stud = Student.Id_Stud;
6. Задача: Вывести имена и фамилии преподавателей и дисциплины, по которым они принимали экзамен, исключить повторы (Exams - таблица экзаменов, Lecturer - таблица преподавателей, Subject - таблица дисциплин).
Соответствующий SQL-код:
SELECT DISTINCT Lecturer.Last_Name, Lecturer.First_Name, Subject.Name
FROM Exams, Lecturer, Subject
WHERE Subject.Id_Sub = Exams.Id_Sub
AND Lecturer.Id_Lect = Exams.Id_Lect;
Примеры задач на вложенные запросы:
7. Задача: Вывести дату экзаменов, когда лектор "Filipova" принимала экзамены.
Соответствующий SQL-код:
SELECT Date_Exam FROM Exams WHERE Id_lect = (
SELECT Id_Lect FROM LecturerWHERE Last_Name = 'Filipova' );
В дальнейшем система может развиваться в направлении включения более широкого множества элементов языка SQL-операторов модификации данных, возможностей работы с XML-данными, процедур, триггеров, представлений и в направлении изучения особенностей диалектов MySQL и PL/SQL (Oracle), а также в направлении интеграции с системой дистанционного образования Moodle.
Литература:
1. Практическое владение языком SQL. [Электронный ресурс]. Режим доступа: http://www.sql-ex.ru. – Заглавие с экрана (дата обращения 16.11.11).
2. SQL Задачи и решения Учебник. Сергей Моисеенко [Электронный ресурс]. Режим доступа: http://www.sql-tutorial.ru. – Заглавие с экрана (дата обращения 16.11.11).
3. М. Грубер. Понимание SQL. – М.: Диалектика, 1993. – 291 c.
4. Дейт К. SQL и реляционная теория. Как грамотно писать код на SQL/ Пер. с англ.— М.; Символ-Плюс, 2010. – 480 c.