12. 付録: データベーススキーマ

blunderDB のデータベースは単純な SQLite ファイル(拡張子 .db)です。そのため、blunderDB がなくても、任意の SQLite ファイルエディターやブラウザーで開いて中身を確認できます。

12.1. バージョン管理と移行

データベースのスキーマは バージョン管理されています。現在のスキーマのバージョンは 2.14.0 です ;これはアプリケーションのバージョンとは独立しており、内部構造が変化したときにのみ増加します。開いているデータベースのスキーマのバージョンは、メタデータ パネル(meta コマンド)で確認できます。

重要

以前のバージョンの blunderDB で作成したデータベースを開く前に、必ず .db ファイルをバックアップしてください。

注釈

バージョン 0.10.0 以降、データベースを開くときに すべてのスキーマの移行が自動的に行われます。手動での移行コマンドは不要です。移行はその場で行われます:新しいスキーマに移行されたデータベースは、以前のバージョンの blunderDB では開けなくなります。そのため、事前のバックアップが重要です。

12.2. 主なテーブル

現在のスキーマは次のテーブルを中心に構成されています:

  • ポジションと分析position(重複排除されたポジション)、analysis(関連する分析データ)、comment(コメント)。

  • マッチmatchgamemovemove_analysis は、インポートされたマッチ、そのゲーム、その手、および各手の分析を格納します。

  • コレクションcollectioncollection_position(連結テーブル)は、手動で選択されたポジションをまとめます。

  • トーナメントtournament はマッチをトーナメントにまとめます。

  • 間隔反復(Anki)anki_deckanki_cardanki_review_log は、デッキ、カード、および復習の記録(FSRS アルゴリズム)を管理します。

  • 履歴とその他command_historysearch_history はコマンドと検索の履歴を保持し、filter_library はフィルターライブラリを、metadata はデータベースのメタデータ(スキーマのバージョンを含む)を保持します。

12.3. 設計の原則

スキーマ 2.0.0 以降、いくつかの設計上の選択によって、検索が高速化され、ファイルサイズが削減されます:

  • ポジションの重複排除 :各ポジションは Zobrist ハッシュと一意のインデックスを持つため、複数のインポートで同じポジションが現れても一度しか保存されません。

  • 非正規化されたフィルタリング列 :よく検索される条件(判断タイプ、出目、ピップカウント差、ベアオフしたチェッカー、バックチェッカー、手やキューブのエラー、勝率など)は、高速なフィルタリングのために専用の列にあらかじめ計算されています。

  • ビットボードによる事前フィルタリング :占有列とポイントマスク列により、構造パターンの検索時に非常に高速な整数ベースの事前フィルタリングが可能になります。

  • コンパクトなストレージ :ポジションはコンパクトにエンコードされ、分析データは(zlib で)圧縮されるため、ファイルサイズが大幅に削減されます。

  • WAL ジャーナリング :WAL モードと調整された PRAGMA により、読み書きのパフォーマンスが向上します。