db/create_verbindung.sql
Rama master · réplica de lectura del repositorio original.
-- ============================================================================
-- db/create_verbindung.sql — Eigenständiges CREATE-Skript für die laufende DB
-- ============================================================================
--
-- Zweck
-- -----
-- Legt die Tabelle `verbindung` samt Indizes auf einer bereits laufenden
-- Datenbank an, ohne den Server neu zu starten.
--
-- Dieses Skript ist NICHT die Single Source of Truth. Die ist und bleibt
-- db/init.sql (Handbuch §9); dort steht dieselbe Definition wortgleich im
-- Kern-Tabellen-Block hinter pipeline_log. init.sql wird bei jedem
-- Server-Start durch schema_migrieren() (server/main.py:64) ohnehin gegen die
-- Live-Datenbank ausgeführt — dieses Skript ist die Handanwendung für den
-- Fall, dass kein Neustart erwünscht ist.
--
-- Anwendung
-- ---------
-- docker exec -i ki_postgres psql -U ki -d gedaechtnis < db/create_verbindung.sql
--
-- Alle Statements sind idempotent. Mehrfache Ausführung ist folgenlos.
--
-- Vorbedingung: die Tabelle lzg_knoten existiert (Fremdschlüssel-Ziel von
-- lzg_id). Sie wird in db/init.sql angelegt.
--
-- Spezifikation: docs/novaberg-charakter-resonanz_k.md §12, Bauteil 1b.
-- ============================================================================
-- ───────────────────────────────────────────────
-- verbindung — Brücke Turn ↔ Gedächtnis-Eintrag
-- ───────────────────────────────────────────────
-- Abweichung gegenüber dem Schema-Entwurf in §12:
-- kzg_id ist NOT NULL — eine Zeile ohne Gedächtnis-Key belegt nichts.
-- lzg_id trägt ON DELETE SET NULL wie im Entwurf (§11, E1).
--
-- Kein UNIQUE auf turn_id oder lzg_id (n:m ist zwingend, §A5-Befund).
-- Kein Fremdschlüssel von turn_id auf turn_roh (Pfad 1 schreibt früher).
CREATE TABLE IF NOT EXISTS verbindung (
id SERIAL PRIMARY KEY,
turn_id VARCHAR(100) NOT NULL,
kzg_id TEXT NOT NULL,
lzg_id INTEGER REFERENCES lzg_knoten(id) ON DELETE SET NULL,
erstellt_am TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_verbindung_turn ON verbindung (turn_id);
CREATE INDEX IF NOT EXISTS idx_verbindung_kzg ON verbindung (kzg_id);
CREATE INDEX IF NOT EXISTS idx_verbindung_lzg ON verbindung (lzg_id);