University DB для MariaDB 11.7: замена Sakila с VECTOR и JSON
Что изменилось в MariaDB 11.7?
В 2026‑м году MariaDB 11.7 уже не ограничивается простыми типами данных.
Новый тип VECTOR(N) позволяет хранить векторные эмбеддинги и быстро находить похожие объекты.
JSON‑данные теперь обрабатываются полноценно: JSON_TABLE, JSON_VALUE, JSON_EXTRACT.
Оконные функции RANK, LAG, LEAD и рекурсивные CTE открывают возможности сложных аналитических запросов.
Полнотекстовый поиск получил булевый режим и оценку релевантности.
Источник: Habr
Почему Sakila не подходит?
Sakila – база данных видеопроката, созданная в 2006‑м году под MySQL 5.0.
В ней есть только типы INT, VARCHAR, TEXT, ENUM, DATETIME, DECIMAL, TINYINT.
Отсутствуют JSON, SET, VECTOR и продвинутый полнотекстовый поиск.
Для обучения современным SQL‑техникам, особенно тем, которые используют векторный поиск и JSON‑структуры, Sakila не даёт нужных примеров.
Что предлагает University DB?
Новая учебная схема – «University DB» – состоит из 16 таблиц, разбитых на четыре уровня:
| Уровень | Типы таблиц | Примеры |
|---|---|---|
| Справочники | semesters, rooms, scholarships |
несколько десятков строк |
| Основные сущности | departments, faculty, students, courses, course_prerequisites, sections |
до 2 000 строк |
| Транзакционные | enrollments, student_scholarships, research_projects, publications, project_members |
до 10 000 строк |
| Аналитические | grade_events (≈120 000 строк), audit_log (≈60 000 строк) |
большие таблицы |
Ключевые особенности:
- VECTOR –
embedding VECTOR(1536)в таблицеcoursesдля семантического поиска похожих курсов. - JSON –
office_hours JSONв таблицеfacultyдля гибкого расписания. - SET –
keywords SET(...)в таблицеpublications. - FULLTEXT – индексы
ft_courseиft_publicationдля полнотекстового поиска с оценкой релевантности. - 7 представлений, 6 хранимых процедур, 7 триггеров (например, логирование изменений в
audit_log).
Как использовать новые возможности?
- Векторный поиск
sql SELECT course_id, title FROM courses WHERE embedding <=> VECTOR(0.12, 0.45, …) < 0.3 ORDER BY distance;Позволяет находить курсы, похожие по содержанию, без ручного сравнения. - JSON‑таблицы
sql SELECT faculty_id, day, start, end FROM JSON_TABLE(faculty.office_hours, '$[*]' COLUMNS ( day VARCHAR(10) PATH '$.day', start VARCHAR(5) PATH '$.start', end VARCHAR(5) PATH '$.end' )) AS oh;Упрощает работу с расписаниями, которые меняются часто. - Рекурсивные CTE
sql WITH RECURSIVE dept_path AS ( SELECT dept_id, name, parent_id FROM departments WHERE parent_id IS NULL UNION ALL SELECT d.dept_id, d.name, d.parent_id FROM departments d JOIN dept_path dp ON d.parent_id = dp.dept_id ) SELECT * FROM dept_path;Позволяет строить иерархии, например, факультет → кафедра → подразделение. - Полнотекстовый поиск
sql SELECT title, MATCH(description) AGAINST ('+AI -ML' IN BOOLEAN MODE) AS score FROM courses WHERE MATCH(title, description) AGAINST ('+AI -ML' IN BOOLEAN MODE);Быстрый поиск по описаниям курсов с оценкой релевантности.
Что проверить и как перейти?
| Что проверить | Как проверить | Кто отвечает |
|---|---|---|
| Версия MariaDB | SELECT VERSION(); |
DBA |
| Поддержка VECTOR | SHOW VARIABLES LIKE 'have_vector'; |
DBA |
| Наличие JSON‑функций | SELECT JSON_VALUE('{"a":1}', '$.a'); |
DBA |
| Размер таблиц | SELECT table_name, data_length FROM information_schema.tables WHERE table_schema='university'; |
DBA |
| Производительность запросов | EXPLAIN ANALYZE на типовых запросах |
DBA/Разработчик |
| Логи изменений | Проверить audit_log |
Тестировщик |
Если все пункты пройдены, можно перейти к миграции учебных курсов и практических заданий на новую схему.
Практический чеклист
- Установить MariaDB 11.7 и убедиться, что сервер запущен.
- Создать схему University DB по описанию в статье.
- Заполнить тестовыми данными (не более 10 000 строк) для проверки производительности.
- Проверить работу VECTOR: вставить эмбеддинг и выполнить поиск.
- Тестировать JSON‑функции: добавить расписание и запросить его через
JSON_TABLE. - Проверить полнотекстовый поиск: добавить несколько описаний и выполнить поиск с булевыми условиями.
После выполнения чеклиста вы сможете использовать базу для обучения и разработки, не тратя время на адаптацию старой схемы.
Дополнительные примеры для углублённого изучения
Для закрепления материала рассмотрим несколько более сложных сценариев, которые демонстрируют преимущества новой схемы.
Семантический поиск с использованием VECTOR
Предположим, у нас есть эмбеддинг для курса "Machine Learning Basics". Чтобы найти похожие курсы, можно выполнить следующий запрос:
SELECT c1.course_id, c1.title, c1.embedding <=> c2.embedding AS distance
FROM courses c1
JOIN courses c2 ON c1.course_id <> c2.course_id
WHERE c1.title = 'Machine Learning Basics'
ORDER BY distance
LIMIT 5;
Этот запрос возвращает пять курсов, наиболее близких по семантическому содержанию к заданному.
Анализ расписания с JSON
Допустим, нужно найти всех преподавателей, у которых есть приёмные часы в понедельник:
SELECT f.faculty_id, f.name, oh.day, oh.start, oh.end
FROM faculty f
JOIN JSON_TABLE(f.office_hours, '$[*]' COLUMNS (
day VARCHAR(10) PATH '$.day',
start VARCHAR(5) PATH '$.start',
end VARCHAR(5) PATH '$.end'
)) AS oh
WHERE oh.day = 'Monday';
Этот запрос демонстрирует гибкость работы с JSON-данными без необходимости создавать отдельные таблицы для расписания.
Иерархический анализ с рекурсивными CTE
Для построения полной иерархии подразделений университета можно использовать следующий запрос:
WITH RECURSIVE dept_hierarchy AS (
SELECT dept_id, name, parent_id, 0 AS level
FROM departments
WHERE parent_id IS NULL
UNION ALL
SELECT d.dept_id, d.name, d.parent_id, dh.level + 1
FROM departments d
JOIN dept_hierarchy dh ON d.parent_id = dh.dept_id
)
SELECT dept_id, name, level
FROM dept_hierarchy
ORDER BY level, name;
Результат покажет структуру подразделений с указанием уровня вложенности.
Полнотекстовый поиск с оценкой релевантности
Для поиска курсов, связанных с искусственным интеллектом, но исключающих машинное обучение, используйте булевый режим:
SELECT title, MATCH(description) AGAINST ('+AI -ML' IN BOOLEAN MODE) AS relevance
FROM courses
WHERE MATCH(title, description) AGAINST ('+AI -ML' IN BOOLEAN MODE)
ORDER BY relevance DESC
LIMIT 10;
Этот запрос возвращает десять наиболее релевантных курсов, соответствующих заданным критериям.
Заключение
University DB предоставляет современную учебную платформу для изучения MariaDB 11.7, включая поддержку VECTOR, JSON, рекурсивных CTE и полнотекстового поиска. В отличие от устаревшей Sakila, новая схема позволяет осваивать актуальные технологии и готовит студентов к реальным задачам в области управления данными. Переход на University DB рекомендуется для всех учебных заведений, стремящихся идти в ногу со временем.
Источники
- Почему не Sakila? Создаём современную учебную базу данных для MariaDB
- Статья на Habr: Почему не Sakila? Создаём современную учебную базу данных для MariaDB
- Официальная документация MariaDB 11.7
- Руководство по VECTOR в MariaDB
Что почитать дальше
- 8 сервисов для проверки бензина: где есть топливо сейчас
- DARPA предлагает ИИ-модель за данные заводов: риски и выгоды
- LLM-база знаний с кодирующими агентами: как исключить ручной поиск
- Mistral OCR 4: структурированные данные из сканов для RAG и поиска
- NLP для LinkedIn: 4 функции, которые экономят часы и повышают конверсию