# Technology Candidates – DB-Migrationsstrategie Date: 2026-05-17 Requirements file: requirements.md ## Candidate Table | Name | Beschreibung | Anwendung | Room-Version | Adoption | Req. Coverage | Score | | ---- | ------------ | --------- | ------------ | -------- | ------------- | ----- | | A – Manuelle Migrations | Handgeschriebene `Migration(X, Y)` mit SQL | Jede Schema-Änderung | 1.0+ | Widespread | Alle Must-Haves ✅ | 7 | | B – Auto-Migration | Room generiert SQL aus `@AutoMigration` | Einfache Änderungen | 2.4+ | Moderate | Alle Must-Haves ✅, limitiert bei Renames/Drops | 5 | | C – Hybrid | Auto-Migration + manuelle Migration für Komplexes | Alle Fälle | 2.4+ | Moderate | Alle Must-Haves ✅, alle Should-Haves ✅ | 8 | ## Candidate Details ### A – Manuelle Room-Migrations **Beschreibung:** Für jede Schema-Änderung wird ein `Migration(X, Y)`-Objekt in `Migrations.kt` geschrieben, das die SQL-Statements direkt enthält. **Requirement coverage:** - ✅ Must: Datenerhaltung, Room 2.6.1, testbar, rückwärtskompatibel, minSdk 26 - ✅ Should: Compile-time Validierung (Room prüft Schema), Checkliste vorhanden - ⚠️ Missing: Kein reduzierter Boilerplate für einfache Fälle (ADD COLUMN braucht gleich viel Code wie Table-Rebuild) **Stärken:** - Volle Kontrolle über jeden SQL-Statement - Kein "Magie"-Faktor – alles explizit und reviewbar - Bewährt im Projekt (4 Migrationen funktionieren fehlerfrei) - Funktioniert mit jeder SQLite-Version **Schwächen:** - Boilerplate: Selbst ein simples `ADD COLUMN` braucht ~15 Zeilen Code - Fehleranfällig: SQL-Typos werden erst zur Laufzeit entdeckt - Table-Rebuild-Pattern für Renames/Drops ist aufwändig und repetitiv **Risiken:** Gering. Ist der Status quo, bewährt, keine neuen Abhängigkeiten. --- ### B – Auto-Migration (Room 2.4+) **Beschreibung:** Room generiert Migrations-SQL automatisch aus dem Schema-Diff zwischen zwei `@Database`-Versionen. Konfiguriert über `@AutoMigration(from = X, to = Y)` direkt an der Database-Klasse. **Requirement coverage:** - ✅ Must: Datenerhaltung, Room 2.6.1, testbar, rückwärtskompatibel - ⚠️ Must: minSdk 26 – Auto-Migration generiert intern Table-Rebuilds, aber **Renames und Deletes erfordern `@AutoMigration.Spec`** mit `@RenameColumn`/`@DeleteColumn` Annotationen - ✅ Should: Minimaler Boilerplate für einfache Fälle - ⚠️ Should: Eingeschränkt bei komplexen Fällen (Daten-Transformation, bedingte Migrationen) **Stärken:** - Null Boilerplate für einfache Fälle (ADD COLUMN, neue Tabelle) - Compile-time Fehler wenn Schema-Diff nicht auflösbar - Room generiert korrekten SQL für die jeweilige SQLite-Version **Schwächen:** - **Kann nicht alle Fälle abdecken:** Daten-Transformationen (z.B. Werte umrechnen), bedingte Logik, oder komplexe Multi-Tabellen-Migrationen sind unmöglich - **Rückblick auf bestehende Migrationen:** 2 von 4 bestehenden Migrationen (V1→V2: Rename + Delete + Daten kopieren, V4→V5: Table-Rebuild) hätten Auto-Migration allein nicht bewältigt - Auto-Migration als **alleinige** Strategie wäre für dieses Projekt unzureichend **Risiken:** Hoch als Allein-Strategie. Mindestens 50% der bisherigen Migrationen wären nicht abbildbar gewesen. --- ### C – Hybrid (Auto-Migration + Manuelle Fallbacks) **Beschreibung:** Auto-Migration als Default für einfache Schema-Änderungen (ADD COLUMN, neue Tabellen). Manuelle Migration für alles Komplexe (Renames, Deletes, Daten-Transformationen). Klare Entscheidungsregeln, wann welcher Ansatz. **Requirement coverage:** - ✅ Must: Alle erfüllt - ✅ Should: Reduzierter Boilerplate für einfache Fälle, Compile-time Validierung, klare Checkliste - ✅ Nice: Automatische Schema-Diff-Generierung für einfache Fälle **Stärken:** - Best of both worlds: Wenig Code für einfache Fälle, volle Kontrolle für komplexe - Bestehende manuelle Migrationen bleiben unverändert - Klare Entscheidungsmatrix: "Ist es nur ADD COLUMN / neue Tabelle? → Auto. Sonst → Manuell." - Room 2.6.1 unterstützt beides parallel **Schwächen:** - Leicht erhöhte kognitive Komplexität: Entwickler müssen wissen, wann welcher Ansatz - Zwei Patterns im gleichen Projekt (aber mit klaren Regeln beherrschbar) **Risiken:** Gering. Die Entscheidungsregel ist einfach und die `migration-guide.md` dokumentiert sie.