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 улучшают производительность при чтении и записи.