43 lines
2.3 KiB
SQL
43 lines
2.3 KiB
SQL
-- Änderungshistorie: die überschriebene Fassung eines Eintrags geht nicht
|
|
-- mehr verloren.
|
|
--
|
|
-- ── Warum? ───────────────────────────────────────────────────────────────────
|
|
--
|
|
-- entries.version zählt bei jeder Änderung hoch, aber der alte Inhalt wird
|
|
-- nirgends aufgehoben. Überschreibt ein Agent etwas Richtiges mit etwas
|
|
-- Falschem — oder ein Mensch verwechselt sich beim Bearbeiten —, ist das
|
|
-- Richtige weg, ohne Wiederherstellungsweg.
|
|
--
|
|
-- ── Aufbau ───────────────────────────────────────────────────────────────────
|
|
--
|
|
-- entries bleibt die aktuelle Fassung. entry_versions hält die SUPERSEDED
|
|
-- Fassungen: bei jedem Schreibvorgang, der eine bestehende Zeile ändert (nicht
|
|
-- beim erstmaligen Anlegen), wird der bisherige Stand hier abgelegt, bevor er
|
|
-- überschrieben wird. version trägt dabei die Nummer, die die Fassung VOR der
|
|
-- Änderung hatte — Fassung 1 ist also das, was durch das Schreiben zu Fassung 2
|
|
-- wurde.
|
|
--
|
|
-- Schlagworte stehen hier bewusst als kommagetrennter Text statt in einer
|
|
-- eigenen Tabelle wie bei entries/entry_tags: Eine historische Fassung wird nie
|
|
-- gefiltert oder durchsucht, sie wird nur ganz gelesen — eine Nebentabelle
|
|
-- brächte dafür keinen Nutzen, nur eine weitere Stelle, die beim Schreiben
|
|
-- mitgepflegt werden müsste.
|
|
CREATE TABLE entry_versions (
|
|
id TEXT PRIMARY KEY,
|
|
entry_id TEXT NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
|
|
project_id TEXT NOT NULL,
|
|
version INTEGER NOT NULL,
|
|
title TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
tags TEXT NOT NULL DEFAULT '',
|
|
author TEXT NOT NULL DEFAULT '',
|
|
source TEXT NOT NULL,
|
|
curated INTEGER NOT NULL DEFAULT 0,
|
|
-- Zeitpunkt, zu dem diese Fassung abgelöst wurde — nicht, wann sie
|
|
-- entstand (das wüssten wir hier nicht mehr, ohne die Kette rückwärts
|
|
-- aufzurollen; für die Historie reicht "abgelöst am").
|
|
created_at TEXT NOT NULL,
|
|
UNIQUE (entry_id, version)
|
|
);
|
|
|
|
CREATE INDEX idx_entry_versions_entry ON entry_versions (entry_id, version);
|