12. Anexo: Esquema de la base de datos
Una base de datos de blunderDB es un simple archivo SQLite (extensión .db). En ausencia de blunderDB, puede así abrirse e inspeccionarse con cualquier editor o navegador de archivos SQLite.
12.1. Versionado y migraciones
El esquema de la base de datos está versionado. La versión actual del esquema es 2.14.0; es independiente de la versión de la aplicación y solo se incrementa cuando la estructura interna evoluciona. La versión del esquema de una base abierta es visible en el panel Metadatos (comando meta).
Importante
Guarde siempre una copia de su archivo .db antes de abrir una base creada con una versión anterior de blunderDB.
Nota
Desde la versión 0.10.0, todas las migraciones de esquema se efectúan automáticamente al abrir una base de datos. No es necesario ningún comando de migración manual. La migración se realiza in situ: una base migrada a un esquema reciente ya no puede abrirse con versiones más antiguas de blunderDB, de ahí la importancia de la copia de seguridad previa.
12.2. Tablas principales
El esquema actual se articula en torno a las siguientes tablas:
Posiciones y análisis:
position(las posiciones, deduplicadas),analysis(los datos de análisis asociados) ycomment(los comentarios).Matches:
match,game,moveymove_analysisalmacenan los matches importados, sus partidas, sus jugadas y el análisis de cada jugada.Colecciones:
collectionycollection_position(tabla de enlace) agrupan posiciones elegidas manualmente.Torneos:
tournamentagrupa matches en torneos.Repetición espaciada (Anki):
anki_deck,anki_cardyanki_review_loggestionan los mazos, las tarjetas y el registro de repasos (algoritmo FSRS).Historial y varios:
command_historyysearch_historyconservan el historial de comandos y de búsquedas,filter_libraryla biblioteca de filtros, ymetadatalos metadatos de la base (incluida la versión del esquema).
12.3. Principios de diseño
A partir del esquema 2.0.0, varias decisiones de diseño aceleran la búsqueda y reducen el tamaño del archivo:
Deduplicación de posiciones: cada posición lleva un hash de Zobrist y un índice único, de modo que una misma posición encontrada en varias importaciones se almacena una sola vez.
Columnas de filtrado desnormalizadas: criterios buscados con frecuencia (tipo de decisión, dados, diferencia de carrera, fichas retiradas, fichas atrasadas, error de jugada o de cubo, probabilidades de victoria…) se precalculan en columnas dedicadas para un filtrado rápido.
Prefiltrado por bitboards: columnas de ocupación y de máscaras de puntos permiten un prefiltrado entero muy rápido en las búsquedas de patrones de estructura.
Almacenamiento compacto: las posiciones se codifican de forma compacta y los datos de análisis se comprimen (zlib), lo que reduce fuertemente el tamaño del archivo.
Registro WAL: el modo WAL y unos PRAGMA ajustados mejoran el rendimiento de lectura y escritura.