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) undcomment(die Kommentare).Matches:
match,game,moveundmove_analysisspeichern die importierten Matches, ihre Partien, ihre Züge und die Analyse jedes Zuges.Sammlungen:
collectionundcollection_position(Verknüpfungstabelle) fassen manuell ausgewählte Positionen zusammen.Turniere:
tournamentfasst Matches zu Turnieren zusammen.Verteilte Wiederholung (Anki):
anki_deck,anki_cardundanki_review_logverwalten die Stapel, die Karten und das Protokoll der Wiederholungen (FSRS-Algorithmus).Verlauf und Verschiedenes:
command_historyundsearch_historybewahren den Verlauf der Befehle und der Suchen auf,filter_librarydie Filterbibliothek undmetadatadie 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.