惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The GitHub Blog
The GitHub Blog
B
Blog
小众软件
小众软件
Jina AI
Jina AI
WordPress大学
WordPress大学
V
V2EX
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
Y
Y Combinator Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
C
CERT Recently Published Vulnerability Notes
C
Cisco Blogs
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
K
Kaspersky official blog
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
T
Threat Research - Cisco Blogs
S
Securelist
V
Vulnerabilities – Threatpost
雷峰网
雷峰网
F
Fortinet All Blogs
D
DataBreaches.Net
I
Intezer
D
Docker
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
SecWiki News
SecWiki News
MyScale Blog
MyScale Blog
腾讯CDC
博客园_首页
Martin Fowler
Martin Fowler
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Help Net Security
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
Lohrmann on Cybersecurity
I
InfoQ
H
Hacker News: Front Page
T
Threatpost
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
T
Troy Hunt's Blog
Microsoft Security Blog
Microsoft Security Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Почему не Sakila? Создаём современную учебную базу данных для MariaDB
rozhnev · 2026-06-27 · via Все публикации подряд на Хабре

Простой

5 мин

0

Если вы когда-либо преподавали SQL или проходили курс по базам данных, то почти наверняка встречали Sakila - маленькую базу данных видеопроката, которая вот уже почти двадцать лет служит эталонным примером в туториалах по MySQL и MariaDB. Схема чистая, нормализованная, данных достаточно для интересных запросов.

Проблема в другом: Sakila спроектирована в 2006 году под MySQL 5.0.

С тех пор многое изменилось.


Чего Sakila не может показать

Откройте схему Sakila и пересчитайте типы столбцов: INT, VARCHAR, TEXT, ENUM, DATETIME, DECIMAL, TINYINT. Всё. Никакого JSON. Никакого полнотекстового поиска сверх базовой демонстрации. Никакого SET. И совсем никакого VECTOR.

А в MariaDB 11.7 уже есть:

  • нативный тип VECTOR(N) для поиска похожих объектов в эпоху ИИ;

  • богатые JSON-функции - JSON_TABLE, JSON_VALUE, JSON_EXTRACT;

  • оконные функции - RANK, LAG, LEAD, нарастающие агрегаты;

  • рекурсивные CTE;

  • FULLTEXT- поиск с булевым режимом и оценкой релевантности.

Учить SQL на Sakila в 2026 году — всё равно что учить вождению на машине без навигатора, без камеры заднего вида и с ручным подсосом. Основы те же, но половина возможностей современного инструмента остаётся за кадром.

Есть и проблема предметной области. Видеопрокат. Если вам нет сорока, вы, скорее всего, никогда туда не заходили. Ментальная модель не интуитивна, бизнес-правила кажутся надуманными. Зачем таблица payment существует отдельно от rental? На объяснение схемы уходит время, которое должно уходить на объяснение SQL.


Предметная область, понятная каждому

Нужно было выбрать что-то универсальное. Что-то с:

  • очевидными сущностями и связями;

  • несколькими естественными иерархиями (отличный повод для рекурсивных CTE);

  • смесью маленьких справочников и больших транзакционных таблиц;

  • понятной причиной хранить JSON и вектора.

Университет подходит идеально. Студенты, курсы, преподаватели, зачисления, оценки — каждый прожил внутри этой системы. Связи интуитивны. А предметная область естественным образом порождает именно те структуры данных, которые нужны для обучения:

Требование

Что есть в университете

Большая аналитическая таблица

grade_events — 120 000+ строк оценок

Иерархия для рекурсивного CTE

Факультет → Кафедра → Подразделение; цепочки пресреквизитов курсов

JSON для полуструктурированных данных

Расписание преподавателей, контакты студентов, источники финансирования

Полнотекстовый поиск

Описания курсов, аннотации публикаций

Векторный поиск

Эмбеддинги курсов для поиска похожих

Журнал изменений

Каждое зачисление и оценка логируются с JSON-дифами


Как устроена University DB

Схема содержит 16 таблиц в четырёх уровнях:

Справочники (несколько десятков строк): semesters, rooms, scholarships

Основные сущности (до 2 000 строк): departments, faculty, students, courses, course_prerequisites, sections

Транзакционные (до 10 000 строк): enrollments, student_scholarships, research_projects, publications, project_members

Аналитические (большие): grade_events (~120 тыс. строк) и audit_log (~60 тыс. строк, заполняется триггерами)

Все значимые типы данных MariaDB представлены хотя бы один раз:

-- VECTOR на courses - семантические эмбеддинги для поиска похожих курсов
embedding  VECTOR(1536) NULL

-- JSON на faculty - гибкое расписание приёмных часов
office_hours JSON NULL
-- [{"day": "Mon", "start": "10:00", "end": "12:00"}, ...]

-- SET на publications - множественные теги ключевых слов
keywords SET('AI', 'ML', 'Databases', 'Security', 'Bioinformatics', ...)

-- FULLTEXT-индексы на courses и publications
FULLTEXT KEY ft_course (title, description)

В схеме есть 7 представлений, 6 хранимых процедур и 7 триггеров - в том числе триггер, блокирующий запись на переполненный курс, и три триггера, которые пишут JSON-диф изменений в таблицу audit_log.


Четыре уровня примеров запросов

Примеры разбиты на четыре файла - база данных подходит и новичкам, и опытным разработчикам:

Уровень 1 - Основы: SELECT, WHERE, GROUP BY, простая агрегация

Уровень 2 - Средний: JOIN по 5 таблицам, коррелированные подзапросы, FULLTEXT, JSON_VALUE

Уровень 3 - Продвинутый: оконные функции, CTE, рекурсивные CTE, JSON_TABLE, FIND_IN_SET, VEC_Distance

Уровень 4 - DBA/Разработчик: EXPLAIN ANALYZE, стратегия индексов, написание хранимых процедур, уровни изоляции транзакций, криминалистика по audit_log

Рекурсивный CTE для получения полной цепочки пресреквизитов курса:

WITH RECURSIVE prereq_chain AS (
    -- Якорь: прямые пресреквизиты
    SELECT cp.prerequisite_id,
           p.code   AS prereq_code,
           p.title  AS prereq_title,
           1        AS depth
    FROM   course_prerequisites cp
    JOIN   courses p ON p.course_id = cp.prerequisite_id
    WHERE  cp.course_id = (SELECT course_id FROM courses WHERE code = 'CS300')

    UNION ALL

    -- Рекурсия: пресреквизиты пресреквизитов
    SELECT cp2.prerequisite_id, p2.code, p2.title, pc.depth + 1
    FROM   course_prerequisites cp2
    JOIN   prereq_chain         pc ON pc.prerequisite_id = cp2.course_id
    JOIN   courses              p2 ON p2.course_id = cp2.prerequisite_id
    WHERE  pc.depth < 10   -- защита от цикличных данных
)
SELECT DISTINCT depth, prereq_code, prereq_title
FROM   prereq_chain
ORDER  BY depth, prereq_code;

Векторный поиск похожих курсов:

SELECT c.code,
       c.title,
       VEC_Distance(ref.embedding, c.embedding) AS distance
FROM   courses ref
JOIN   courses c ON c.course_id <> ref.course_id
WHERE  ref.code = 'CS101'
ORDER  BY distance
LIMIT  5;

Попробуйте прямо сейчас

Устанавливать ничего не нужно.

Запустить запросы к University DB можно прямо в браузере на sqlize.online - онлайн-редакторе SQL с поддержкой MariaDB 11.7. Скопируйте любой запрос из примеров и получите результат мгновенно.

Для структурированной практики с заданиями и проверкой ответов — sqltest.online.


Установка

Весь проект доступен под лицензией MIT:

👉 github.com/rozhnev/university-db

Что входит в репозиторий:

  • 01_schema.sql — DDL всех 16 таблиц

  • 02_objects.sql — представления, процедуры, триггеры

  • 03_seed_small.sql — статические справочные данные

  • generate_data.py — Python-скрипт на Faker, генерирует ~130 000 строк

  • docker-compose.yml — одна команда для запуска

  • queries/level1.sqllevel4.sql — 50+ примеров запросов

git clone https://github.com/rozhnev/university-db.git
cd university-db
cp .env.example .env
# Отредактируйте .env - задайте пароли
docker compose up --build

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


Как поучаствовать в проекте

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

Сообщить о проблеме - нашли ошибку в схеме, некорректный запрос или опечатку в комментарии? Откройте issue на GitHub. Чем конкретнее описание, тем быстрее разберёмся.

Предложить новый пример запроса - если вы написали интересный запрос к этой схеме и хотите поделиться, присылайте pull request в queries/. Особенно ценны примеры для уровней 3–4.

Улучшить генератор данных - generate_data.py намеренно оставлен простым. Можно сделать более реалистичные распределения оценок, добавить новые сценарии, ускорить генерацию через bulk-вставки.

Добавить скрипты для других инструментов - есть готовый Docker Compose, но можно добавить поддержку Kubernetes, Helm-чарт или скрипт для облачных managed-сервисов (RDS, Cloud SQL).

Перевести примеры запросов - комментарии в SQL-файлах сейчас только на английском; если хотите добавить комментарии на другом языке - welcome.

Написать учебные материалы - задачи с решениями, воркшопы, jupyter-ноутбуки - всё, что помогает изучать SQL на этой схеме.

Для начала достаточно сделать fork репозитория и отправить pull request. Код ревью проводится в течение нескольких дней.


Sakila мертва?

Нет. Это по-прежнему рабочая база для изучения базового SQL, а её портируемость на любой MySQL 5.x - настоящее преимущество. Но как основной обучающий инструмент для современной MariaDB она устарела.

University DB закрывает этот пробел - для всех, кто хочет преподавать или изучать SQL на полную мощь MariaDB 11.7: от первого SELECT до векторного поиска внутри рекурсивного CTE внутри хранимой процедуры.

Буду рад фидбеку, вопросам и pull request’ам.


Слава Рожнев - sqlize.online · sqltest.online · GitHub