Buchungszeilen bekommen ein neues, boolesches Feld "abgeglichen" (Standard: false). Ein Klick auf eine Zeile im Dashboard schaltet den Wert per AJAX sofort um; abgeglichene Zeilen werden grün hinterlegt. |
||
|---|---|---|
| .. | ||
| 0001_add_abgeglichen.sql | ||
| README.md | ||
| run_migrations.php | ||
Datenbank-Migrationen
Migrationen liegen hier als .sql-Dateien, benannt nach dem Schema:
0001_kurze_beschreibung.sql
0002_naechste_aenderung.sql
update.sh ruft migrations/run_migrations.php <pfad-zur-config.php> auf. Das Skript:
- legt bei Bedarf die Tabelle
schema_migrationsan (Spaltefilenameals Primary Key), die protokolliert, welche Dateinamen bereits angewendet wurden - führt alle noch nicht angewendeten
.sql-Dateien in Dateinamen-Reihenfolge aus - bricht beim ersten Fehler sofort ab (die fehlgeschlagene Datei wird NICHT als angewendet markiert, alle vorherigen bleiben es)
Regeln für neue Migrationen
- Immer die nächste freie, vierstellige Nummer verwenden (
0003_...). Eine bereits vergebene Nummer nie wiederverwenden, eine bereits angewendete Datei nachträglich nicht mehr ändern (neue Migration statt Änderung der alten). - So schreiben, dass sie keine Breaking Changes verursachen, z. B.:
CREATE TABLE IF NOT EXISTS ...stattCREATE TABLE ...- Neue Spalten nullable oder mit
DEFAULTanlegen, statt bestehendeNOT NULL-Constraints nachträglich zu erzwingen - Kein
DROP TABLE/DROP COLUMNohne vorherige Rücksprache
- Migrationen möglichst idempotent halten (
IF NOT EXISTS), damit ein erneuter Lauf nach einem Teilfehler nicht sofort wieder bricht.
Historie
init.sql (Ausgangsschema für Neuinstallationen) und update.sql (bereits manuell eingespieltes Aktien-Modul) liegen bewusst außerhalb dieses Verzeichnisses, da beide bereits auf allen bekannten Servern produktiv sind. Ab jetzt werden neue Schema-Änderungen ausschließlich als nummerierte Migration hier abgelegt.
Hinweis
run_migrations.php bindet die produktive config.php per require ein, um die bestehende $pdo-Verbindung wiederzuverwenden. Da config.php session_start() aufruft, legt der CLI-Lauf dabei eine kurzlebige, ungenutzte Session-Datei an — das ist unschädlich, aber erwähnenswert.