База данных University (MariaDB): схема, таблицы и SQL-задачи
University — учебная база MariaDB об университете: факультеты, преподаватели, студенты, курсы, учебные группы, записи на курсы, оценки и научная работа.
На SQLtest.online с ней можно работать прямо в браузере: решать задачи с автоматической проверкой и писать свои запросы в песочнице, ничего не устанавливая.
University — современная учебная база для MariaDB 11, задуманная как более богатая альтернатива классической Sakila. Она нормализована до третьей нормальной формы и использует многие типы данных MariaDB: JSON, ENUM и SET, полнотекстовые индексы и столбцы VECTOR для эмбеддингов.
Данных достаточно для настоящей аналитики: около 25 тысяч записей на курсы, 300 тысяч оценок и журнал изменений больше чем на полмиллиона строк. При этом предметная область знакома каждому, кто учился в вузе.
ER-диаграмма
Диаграмма показывает таблицы University и связи между ними по внешним ключам. Нажмите, чтобы открыть её в полном размере.
Из чего состоит база
Таблицы делятся на три группы.
Люди и структура
departments (дерево), faculty, students и rooms.
Учёба
courses с course_prerequisites, semesters, sections, enrollments и grade_events.
Наука и деньги
research_projects, project_members, publications, scholarships и student_scholarships, а также audit_log.
Главное, что стоит запомнить: студент записывается не на курс, а на группу — конкретный поток курса в семестре. Поэтому путь от студента к курсу такой: enrollments → sections → courses. Семь представлений, например v_student_gpa и v_course_pass_rate, содержат готовые отчёты.
Сколько данных в таблицах:
Таблица
Строк
Что хранит
students
2 000
студенты
faculty
250
преподаватели
departments
25
факультеты и кафедры
courses
116
курсы
course_prerequisites
49
обязательные предшествующие курсы
semesters
20
семестры
sections
1 715
учебные группы курса в семестре
rooms
48
аудитории
enrollments
24 981
записи на курсы
grade_events
307 081
оценки за задания и экзамены
research_projects
200
научные проекты
project_members
876
участники проектов
publications
500
публикации
scholarships
20
стипендии
student_scholarships
773
назначенные стипендии
audit_log
664 124
журнал изменений
Структура таблиц
Нажмите на таблицу, чтобы увидеть её столбцы, пример строки и ключи.
Список таблиц
semesters - таблица учебных семестров.
semester_idуникальный идентификатор записи (ПК, TINYINT)
termтип периода: Fall, Spring или Summer (ENUM)
academic_yearучебный год (тип YEAR)
nameназвание семестра (например, 'Fall 2024')
start_dateпервый день семестра
end_dateпоследний день семестра
enroll_deadlineпоследний день записи студентов на курсы
is_activeявляется ли семестр текущим (BOOLEAN)
semester_id
term
academic_year
name
start_date
end_date
enroll_deadline
is_active
1
Fall
2024
Fall 2024
2024-09-02
2024-12-20
2024-09-13
1
PRIMARY KEY, btree (semester_id)
UNIQUE KEY (term, academic_year)
rooms - аудитории и лаборатории кампуса.
room_idуникальный идентификатор записи (ПК, SMALLINT)
buildingназвание корпуса
room_numberномер или обозначение аудитории
capacityмаксимальное количество мест (SMALLINT)
room_typeтип аудитории: lecture, seminar, lab, computer_lab или online (ENUM)
has_projectorналичие проектора в аудитории (BOOLEAN)
has_videoналичие оборудования для видеоконференций (BOOLEAN)
room_id
building
room_number
capacity
room_type
has_projector
has_video
1
Science Hall
101
120
lecture
1
0
PRIMARY KEY, btree (room_id)
UNIQUE KEY (building, room_number)
scholarships - доступные стипендии.
scholarship_idуникальный идентификатор записи (ПК, SMALLINT)
nameназвание стипендии
amountразмер выплаты (DECIMAL)
frequencyпериодичность выплаты: one-time, annual или per-semester (ENUM)
eligibilityкритерии допуска в формате JSON — например, {"min_gpa": 3.5, "need_based": true}
is_activeпредоставляется ли стипендия в настоящее время (BOOLEAN)
publications - научные публикации с поддержкой полнотекстового поиска.
publication_idуникальный идентификатор записи (ПК, INT)
project_idидентификатор связанного научного проекта (ВК, допускает NULL)
titleназвание публикации
abstractаннотация публикации (MEDIUMTEXT, индекс FULLTEXT вместе с title)
pub_yearгод публикации (YEAR)
venueназвание журнала или конференции (допускает NULL)
doiцифровой идентификатор объекта (DOI, допускает NULL)
keywordsключевые теги — одно или несколько значений: AI, ML, Data Science, Networking, Security, Algorithms, Databases, HCI, Theory, Bioinformatics, Systems, Mathematics, Physics, Chemistry, Biology (SET)
total_amountсуммарная сумма по полю amount_awarded по всем стипендиям
rank_position
student_id
student_number
first_name
last_name
total_scholarships
total_amount
1
1
S000123
James
Miller
2
8500.00
v_publication_stats - количество публикаций и цитирований по кафедрам и годам.
department_idидентификатор кафедры
department_nameназвание кафедры
pub_yearгод публикации
paper_countколичество опубликованных статей
total_citationsсуммарное количество цитирований по всем статьям
department_id
department_name
pub_year
paper_count
total_citations
3
Computer Science
2024
12
87
v_prerequisite_tree - непосредственные предварительные требования для каждого курса.
course_idидентификатор курса
course_codeкод курса
course_titleназвание курса
prerequisite_idидентификатор курса-prerequisite
prerequisite_codeкод курса-prerequisite
prerequisite_titleназвание курса-prerequisite
is_mandatoryявляется ли предварительный курс обязательным или рекомендуемым
course_id
course_code
course_title
prerequisite_id
prerequisite_code
prerequisite_title
is_mandatory
5
CS401
Advanced Database Systems
1
CS301
Database Systems
1
Примеры запросов
Эти запросы показывают, как связаны данные. Скопируйте любой и запустите в песочнице.
Студент, курс и оценка — от записи через группу к курсу и семестру:
SELECT s.first_name, s.last_name, c.code, sem.name AS semester, e.final_grade
FROM enrollments e
JOIN students s ON s.student_id = e.student_id
JOIN sections sec ON sec.section_id = e.section_id
JOIN courses c ON c.course_id = sec.course_id
JOIN semesters sem ON sem.semester_id = sec.semester_id
WHERE e.final_grade IS NOT NULL
ORDER BY e.enrollment_id
LIMIT 3;
first_name
last_name
code
semester
final_grade
Alexis
Collier
MATH111
Fall 2024
B+
Alexis
Collier
NURS102
Fall 2024
B
Alexis
Collier
MATH106
Summer 2024
B
Часы приёма из JSON — значение из JSON-столбца через JSON_VALUE:
SELECT first_name, last_name,
JSON_VALUE(office_hours, '$[0].day') AS day,
JSON_VALUE(office_hours, '$[0].start') AS starts_at
FROM faculty
ORDER BY faculty_id
LIMIT 3;
first_name
last_name
day
starts_at
Danielle
Johnson
Tue
09:00
Jason
Hahn
Fri
08:00
Kathleen
Cannon
Fri
08:00
SQL-задачи по темам
Задач на базе University пока немного — 5, но их число растёт. Решение проверяется автоматически на настоящей MariaDB.
Число справа — количество задач в теме, цветные метки — диапазон сложности.
Нужно ли устанавливать MariaDB, чтобы работать с University?
Нет. Задачи и песочница на SQLtest.online выполняют запросы на сервере, достаточно браузера. В песочнице University доступна в MariaDB 11.8.
Какие возможности MariaDB в ней используются?
Столбцы JSON, типы ENUM и SET, полнотекстовые индексы, столбцы VECTOR для эмбеддингов, представления и иерархия факультетов для рекурсивных запросов.
Можно ли изменять данные?
В песочнице база доступна только для чтения, чтобы у всех были одинаковые данные. Чтобы потренировать INSERT, UPDATE и DELETE на своих таблицах, выберите в песочнице обычную версию MariaDB.