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 строк) большие таблицы

Ключевые особенности:

  • VECTORembedding VECTOR(1536) в таблице courses для семантического поиска похожих курсов.
  • JSONoffice_hours JSON в таблице faculty для гибкого расписания.
  • SETkeywords SET(...) в таблице publications.
  • FULLTEXT – индексы ft_course и ft_publication для полнотекстового поиска с оценкой релевантности.
  • 7 представлений, 6 хранимых процедур, 7 триггеров (например, логирование изменений в audit_log).

Как использовать новые возможности?

  1. Векторный поиск
    sql SELECT course_id, title FROM courses WHERE embedding <=> VECTOR(0.12, 0.45, …) < 0.3 ORDER BY distance; Позволяет находить курсы, похожие по содержанию, без ручного сравнения.
  2. 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; Упрощает работу с расписаниями, которые меняются часто.
  3. Рекурсивные 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; Позволяет строить иерархии, например, факультет → кафедра → подразделение.
  4. Полнотекстовый поиск
    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 Тестировщик

Если все пункты пройдены, можно перейти к миграции учебных курсов и практических заданий на новую схему.

Практический чеклист

  1. Установить MariaDB 11.7 и убедиться, что сервер запущен.
  2. Создать схему University DB по описанию в статье.
  3. Заполнить тестовыми данными (не более 10 000 строк) для проверки производительности.
  4. Проверить работу VECTOR: вставить эмбеддинг и выполнить поиск.
  5. Тестировать JSON‑функции: добавить расписание и запросить его через JSON_TABLE.
  6. Проверить полнотекстовый поиск: добавить несколько описаний и выполнить поиск с булевыми условиями.

После выполнения чеклиста вы сможете использовать базу для обучения и разработки, не тратя время на адаптацию старой схемы.

Дополнительные примеры для углублённого изучения

Для закрепления материала рассмотрим несколько более сложных сценариев, которые демонстрируют преимущества новой схемы.

Семантический поиск с использованием 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 рекомендуется для всех учебных заведений, стремящихся идти в ногу со временем.

Источники

Что почитать дальше