munin/internal/store/migrations_control/sqlite/001_init.sql

35 lines
1.5 KiB
SQL

-- SQLite-Fassung. Gegenstück: ../postgres/001_init.sql.
-- Schema der zentralen Kontroll-Datenbank.
--
-- Diese Datei ist bewusst von den Workspace-Dateien getrennt (siehe
-- internal/store/migrations) und enthält nur, was gebraucht wird, BEVOR der
-- Workspace bekannt ist: die Liste der Workspaces selbst, und den Weg von
-- einem Key-Hash zu seinem Workspace.
--
-- Alles andere (Projekte, Einträge, Keys im Volltext, Protokoll) lebt in der
-- jeweiligen Workspace-Datei — siehe AUSBAUSTUFEN.md 4.4.
-- Ein Workspace ist eine Abteilung. Jede hat ihre eigene Datenbankdatei; diese
-- Tabelle ist nur das Verzeichnis darüber.
CREATE TABLE workspaces (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
created_at TEXT NOT NULL
);
-- key_index bildet Key-Hash auf Workspace ab — der einzige Grund, warum diese
-- Datenbank vor dem Öffnen einer Workspace-Datei befragt werden muss.
--
-- Die Zeile hier ist ein Index, keine Wahrheit über den Key selbst: Name,
-- Rolle, Projekt und der Zeitpunkt der letzten Nutzung stehen ausschließlich
-- in der Workspace-Datei. Wird ein Key dort angelegt oder zurückgezogen, muss
-- diese Tabelle im selben Zug nachgezogen werden (siehe ControlStore.IndexKey
-- und ControlStore.RemoveKeyIndex).
CREATE TABLE key_index (
hash TEXT PRIMARY KEY,
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
created_at TEXT NOT NULL
);
CREATE INDEX idx_key_index_workspace ON key_index (workspace_id);