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) ecomment(i commenti).Match:
match,game,moveemove_analysismemorizzano i match importati, le loro partite, le loro mosse e l’analisi di ciascuna mossa.Collezioni:
collectionecollection_position(tabella di collegamento) raggruppano posizioni scelte manualmente.Tornei:
tournamentraggruppa i match in tornei.Ripetizione dilazionata (Anki):
anki_deck,anki_cardeanki_review_loggestiscono i mazzi, le carte e il registro delle revisioni (algoritmo FSRS).Cronologia e varie:
command_historyesearch_historyconservano la cronologia dei comandi e delle ricerche,filter_libraryla libreria di filtri emetadatai 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.