12. Liite: Tietokannan skeema

blunderDB-tietokanta on yksinkertainen SQLite-tiedosto (pääte .db). Ilman blunderDB:tä se voidaan siten avata ja tarkastella millä tahansa SQLite-editorilla tai -tiedostoselaimella.

12.1. Versiointi ja migraatiot

Tietokannan skeema on versioitu. Skeeman nykyinen versio on 2.14.0; se on riippumaton sovelluksen versiosta ja sitä kasvatetaan vain, kun sisäinen rakenne muuttuu. Avatun tietokannan skeeman versio näkyy Metatiedot-paneelissa (komento meta).

Tärkeä

Varmuuskopioi aina .db-tiedostosi ennen kuin avaat aiemmalla blunderDB:n versiolla luodun tietokannan.

Muista

Versiosta 0.10.0 alkaen kaikki skeeman migraatiot suoritetaan automaattisesti tietokantaa avattaessa. Manuaalista migraatiokomentoa ei tarvita. Migraatio tehdään paikan päällä: uudempaan skeemaan migroitua tietokantaa ei enää voi avata blunderDB:n vanhemmilla versioilla, mistä johtuu etukäteisvarmuuskopioinnin tärkeys.

12.2. Päätaulut

Nykyinen skeema rakentuu seuraavien taulujen ympärille:

  • Asemat ja analyysit: position (asemat, deduplikoituina), analysis (niihin liittyvät analyysitiedot) ja comment (kommentit).

  • Ottelut: match, game, move ja move_analysis tallentavat tuodut ottelut, niiden pelit, siirrot ja kunkin siirron analyysin.

  • Kokoelmat: collection ja collection_position (liitostaulu) ryhmittelevät manuaalisesti valittuja asemia.

  • Turnaukset: tournament ryhmittelee otteluita turnauksiksi.

  • Välitoisto (Anki): anki_deck, anki_card ja anki_review_log hallitsevat pakkoja, kortteja ja kertausten lokia (FSRS-algoritmi).

  • Historia ja muut: command_history ja search_history säilyttävät komentojen ja hakujen historian, filter_library suodatinkirjaston ja metadata tietokannan metatiedot (mukaan lukien skeeman version).

12.3. Suunnitteluperiaatteet

Skeemasta 2.0.0 alkaen useat suunnitteluratkaisut nopeuttavat hakua ja pienentävät tiedoston kokoa:

  • Asemien deduplikointi: jokaisella asemalla on Zobrist-tiiviste ja uniikki indeksi, joten sama asema, joka kohdataan useissa tuonneissa, tallennetaan vain kerran.

  • Denormalisoidut suodatussarakkeet: usein haetut kriteerit (päätöstyyppi, nopat, pip-ero, pelistä poistetut nappulat, takana olevat nappulat, siirto- tai kuutiovirhe, voiton mahdollisuudet…) esilasketaan omiin sarakkeisiinsa nopeaa suodatusta varten.

  • Esisuodatus bitboardeilla: miehityssarakkeet ja pistemaskisarakkeet mahdollistavat erittäin nopean kokonaislukupohjaisen esisuodatuksen rakennemotiivien hakujen aikana.

  • Kompakti tallennus: asemat koodataan kompaktisti ja analyysitiedot pakataan (zlib), mikä pienentää tiedoston kokoa merkittävästi.

  • WAL-lokitus: WAL-tila ja säädetyt PRAGMA:t parantavat luku- ja kirjoitussuorituskykyä.