Г. Семенов, С. Саргсян, С. Науменко.

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.