12. Приложение: Схема базы данных

База данных blunderDB — это обычный файл SQLite (расширение .db). Поэтому при отсутствии blunderDB её можно открыть и просмотреть в любом редакторе или обозревателе файлов SQLite.

12.1. Версионирование и миграции

Схема базы данных версионирована. Текущая версия схемы — 2.14.0; она не зависит от версии приложения и увеличивается только при изменении внутренней структуры. Версию схемы открытой базы можно увидеть в панели Метаданные (команда meta).

Важно

Всегда создавайте резервную копию файла .db перед открытием базы, созданной более ранней версией blunderDB.

Примечание

Начиная с версии 0.10.0, все миграции схемы выполняются автоматически при открытии базы данных. Никакой команды ручной миграции не требуется. Миграция выполняется на месте: база, перенесённая на более новую схему, больше не может быть открыта более старыми версиями blunderDB, отсюда важность предварительного резервного копирования.

12.2. Основные таблицы

Текущая схема строится вокруг следующих таблиц:

  • Позиции и анализ: position (позиции, дедуплицированные), analysis (связанные данные анализа) и comment (комментарии).

  • Матчи: match, game, move и move_analysis хранят импортированные матчи, их партии, ходы и анализ каждого хода.

  • Коллекции: collection и collection_position (связующая таблица) объединяют позиции, выбранные вручную.

  • Турниры: tournament объединяет матчи в турниры.

  • Интервальное повторение (Anki): anki_deck, anki_card и anki_review_log управляют колодами, карточками и журналом повторений (алгоритм FSRS).

  • История и прочее: command_history и search_history хранят историю команд и поисков, filter_library — библиотеку фильтров, а metadata — метаданные базы (включая версию схемы).

12.3. Принципы проектирования

Начиная со схемы 2.0.0, несколько проектных решений ускоряют поиск и уменьшают размер файла:

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

  • Денормализованные колонки фильтрации: часто искомые критерии (тип решения, кости, разница пипкаунта, снятые шашки, отставшие шашки, ошибка хода или куба, шансы на выигрыш…) предварительно вычисляются в выделенных колонках для быстрой фильтрации.

  • Предварительная фильтрация по bitboards: колонки занятости и масок пунктов обеспечивают очень быструю целочисленную предварительную фильтрацию при поиске структурных шаблонов.

  • Компактное хранение: позиции кодируются компактно, а данные анализа сжимаются (zlib), что значительно уменьшает размер файла.

  • Журналирование WAL: режим WAL и настроенные PRAGMA улучшают производительность при чтении и записи.