# Database MetalCircle verwendet PostgreSQL. Das Initialschema liegt in `db/init/01_initial.sql`; spätere Änderungen liegen als nummerierte SQL-Dateien in `db/migrations/`. Die Anwendung stellt beim Start zusätzlich sicher, dass die aktuellen Feature-Tabellen vorhanden sind. Jede Schemaänderung muss als reproduzierbare Migration vorliegen. Wichtige Beziehungen: - `users` ist die Identität für Sessions, Freundschaften, Nachrichten, Kommentare, Attendance, Diary, Badges und Uploads. - `concerts` verweist optional auf `venues`, einen Parent-Event und den Ersteller. - `concert_comments`, `concert_photos` und `concert_attendance` hängen an einem Konzert. - `concert_diary` und `concert_diary_photos` bilden persönliche Konzertnotizen. - `user_badges` enthält Badges und optionale auslösende Konzerte. - `push_devices` bindet Android-FCM-Tokens an Benutzer und die aktuelle Session. - `bug_report_submissions` enthält ausschließlich kurzlebige Status-/Nonce-Metadaten zur Duplicate-Vermeidung, keine vollständigen Issues. - `notification_preferences` enthält DE/EN und individuelle Push-Kategorien (Migration 21). - `push_notifications` enthält transaktionale Aufträge je Gerät/Session, ohne Klartext-Token oder Nachrichteninhalt (Migration 21). Logout löscht sie per Fremdschlüssel; Aufbewahrung siehe [Push Notifications](Push-Notifications.md). - Migration 22 erlaubt per partiellem Unique-Index nur einen Alpha-/Beta-/Early-Bird-Patch je Nutzer. Die datumsabhängige Rückbefüllung erfolgt konfigurierbar beim App-Start. Primäre Indizes unterstützen Konzertdatum, Venue-Suche, Kommentare, Fotos, Attendance, Nachrichten und Einladungen. Backups und Wiederherstellung der PostgreSQL-Daten sind umgebungsabhängig und werden nicht durch diese Repository-Migrationen automatisiert.