12. Anhang: Datenbankschema

Eine blunderDB-Datenbank ist einfach eine SQLite-Datei (Endung .db). Auch ohne blunderDB kann sie somit mit einem beliebigen SQLite-Editor oder -Browser geöffnet und untersucht werden.

12.1. Versionierung und Migrationen

Das Schema der Datenbank ist versioniert. Die aktuelle Version des Schemas ist 2.14.0; sie ist unabhängig von der Version der Anwendung und wird nur dann erhöht, wenn sich die interne Struktur ändert. Die Schemaversion einer geöffneten Datenbank ist im Panel Metadaten (Befehl meta) sichtbar.

Wichtig

Sichern Sie immer Ihre .db-Datei, bevor Sie eine mit einer älteren Version von blunderDB erstellte Datenbank öffnen.

Bemerkung

Seit Version 0.10.0 werden alle Schemamigrationen automatisch durchgeführt, wenn eine Datenbank geöffnet wird. Es ist kein manueller Migrationsbefehl erforderlich. Die Migration erfolgt an Ort und Stelle: Eine auf ein neueres Schema migrierte Datenbank kann nicht mehr von älteren Versionen von blunderDB geöffnet werden, daher ist die vorherige Sicherung so wichtig.

12.2. Wichtigste Tabellen

Das aktuelle Schema gliedert sich um die folgenden Tabellen:

  • Positionen und Analysen: position (die deduplizierten Positionen), analysis (die zugehörigen Analysedaten) und comment (die Kommentare).

  • Matches: match, game, move und move_analysis speichern die importierten Matches, ihre Partien, ihre Züge und die Analyse jedes Zuges.

  • Sammlungen: collection und collection_position (Verknüpfungstabelle) fassen manuell ausgewählte Positionen zusammen.

  • Turniere: tournament fasst Matches zu Turnieren zusammen.

  • Verteilte Wiederholung (Anki): anki_deck, anki_card und anki_review_log verwalten die Stapel, die Karten und das Protokoll der Wiederholungen (FSRS-Algorithmus).

  • Verlauf und Verschiedenes: command_history und search_history bewahren den Verlauf der Befehle und der Suchen auf, filter_library die Filterbibliothek und metadata die Metadaten der Datenbank (darunter die Schemaversion).

12.3. Gestaltungsprinzipien

Ab Schema 2.0.0 beschleunigen mehrere Gestaltungsentscheidungen die Suche und verringern die Dateigröße:

  • Deduplizierung der Positionen: Jede Position trägt einen Zobrist-Hash und einen eindeutigen Index, sodass ein und dieselbe Position, die in mehreren Importen vorkommt, nur ein einziges Mal gespeichert wird.

  • Denormalisierte Filterspalten: Häufig gesuchte Kriterien (Entscheidungstyp, Würfel, Differenz im Rennstand, herausgetragene Steine, zurückliegende Steine, Fehler beim Zug oder beim Doppler, Gewinnchancen …) werden in dedizierten Spalten vorberechnet, um ein schnelles Filtern zu ermöglichen.

  • Vorfilter über Bitboards: Belegungs- und Punktmasken-Spalten ermöglichen einen sehr schnellen ganzzahligen Vorfilter bei der Suche nach Strukturmustern.

  • Kompakte Speicherung: Die Positionen werden kompakt kodiert und die Analysedaten komprimiert (zlib), was die Dateigröße stark verringert.

  • WAL-Journaling: Der WAL-Modus und angepasste PRAGMA verbessern die Lese- und Schreibleistung.