12. Appendice: Schema del database

Un database blunderDB è un semplice file SQLite (estensione .db). In assenza di blunderDB, può quindi essere aperto e ispezionato con qualsiasi editor o browser di file SQLite.

12.1. Versionamento e migrazioni

Lo schema del database è versionato. La versione corrente dello schema è 2.14.0; è indipendente dalla versione dell’applicazione e viene incrementata solo quando la struttura interna evolve. La versione dello schema di un database aperto è visibile nel pannello Metadati (comando meta).

Importante

Salvate sempre il vostro file .db prima di aprire un database creato con una versione precedente di blunderDB.

Nota

A partire dalla versione 0.10.0, tutte le migrazioni dello schema vengono effettuate automaticamente all’apertura di un database. Non è necessario alcun comando di migrazione manuale. La migrazione avviene sul posto: un database migrato verso uno schema recente non può più essere aperto da versioni più vecchie di blunderDB, da cui l’importanza del salvataggio preliminare.

12.2. Tabelle principali

Lo schema corrente si articola attorno alle seguenti tabelle:

  • Posizioni e analisi: position (le posizioni, deduplicate), analysis (i dati di analisi associati) e comment (i commenti).

  • Match: match, game, move e move_analysis memorizzano i match importati, le loro partite, le loro mosse e l’analisi di ciascuna mossa.

  • Collezioni: collection e collection_position (tabella di collegamento) raggruppano posizioni scelte manualmente.

  • Tornei: tournament raggruppa i match in tornei.

  • Ripetizione dilazionata (Anki): anki_deck, anki_card e anki_review_log gestiscono i mazzi, le carte e il registro delle revisioni (algoritmo FSRS).

  • Cronologia e varie: command_history e search_history conservano la cronologia dei comandi e delle ricerche, filter_library la libreria di filtri e metadata i metadati del database (tra cui la versione dello schema).

12.3. Principi di progettazione

A partire dallo schema 2.0.0, diverse scelte di progettazione accelerano la ricerca e riducono la dimensione del file:

  • Deduplicazione delle posizioni: ogni posizione porta un hash di Zobrist e un indice univoco, in modo che una stessa posizione incontrata in più import venga memorizzata una sola volta.

  • Colonne di filtraggio denormalizzate: criteri frequentemente ricercati (tipo di decisione, dadi, differenza di corsa, pedine uscite, pedine arretrate, errore di mossa o di cubo, probabilità di vittoria…) sono precalcolati in colonne dedicate per un filtraggio rapido.

  • Prefiltro tramite bitboard: colonne di occupazione e di maschere di punti consentono un prefiltro intero molto rapido durante le ricerche di motivi di struttura.

  • Archiviazione compatta: le posizioni sono codificate in modo compatto e i dati di analisi sono compressi (zlib), il che riduce fortemente la dimensione del file.

  • Journaling WAL: la modalità WAL e i PRAGMA regolati migliorano le prestazioni in lettura e in scrittura.