[[..:start|zurück]] # Datenbankstruktur – Bewerbungsnachweis ## Überblick Die Datenbank bildet den vollständigen Lebenszyklus einer Bewerbung ab – von der Firma über die konkrete Stelle bis hin zu Bewerbung, Statusverlauf und zugehörigen Belegen. Ziel der Struktur ist: * klare Trennung der fachlichen Objekte * vollständige Nachvollziehbarkeit aller Änderungen * saubere Referenzen ohne Redundanz * einfache Auswertbarkeit für Druck- und Exportfunktionen Die Datenbank ist **normalisiert**, aber bewusst pragmatisch gehalten. --- ## Übersicht der Tabellen ^ Tabelle ^ Beschreibung ^ | `firma` | Stammdaten der Unternehmen | | `stelle` | Konkrete Stellen/Ausschreibungen | | `bewerbung` | Einzelne Bewerbungen | | `status_verlauf` | Historie aller Statusänderungen | | `dokument` | Zugeordnete Belege | | `v_nachweis_bewerbungen_mit_belegen` | Konsolidierte Nachweissicht (View) | --- ## Tabelle: `firma` Speichert die **Stammdaten der Unternehmen**, bei denen Bewerbungen erfolgen. ### Zweck * Zentrale Pflege von Firmendaten * Mehrfachverwendung für mehrere Stellen/Bewerbungen ### Wichtige Felder ^ Feld ^ Typ ^ Beschreibung ^ | `firma_id` | INT (PK) | Eindeutige ID | | `name` | VARCHAR | Name der Firma | | `ort` | VARCHAR | Ort / Sitz | | `webseite` | VARCHAR | Firmenwebseite | | `notizen` | TEXT | Freie Zusatzinformationen | | `created_at` | DATETIME | Zeitpunkt der Anlage | --- ## Tabelle: `stelle` Repräsentiert eine **konkrete Ausschreibung oder Position** bei einer Firma. ### Zweck * Trennung von Firma und konkreter Stelle * Wiederverwendbarkeit (z. B. mehrere Bewerbungen auf ähnliche Positionen) ### Beziehungen * gehört zu genau **einer Firma** ### Wichtige Felder ^ Feld ^ Typ ^ Beschreibung ^ | `stelle_id` | INT (PK) | Eindeutige ID | | `firma_id` | INT (FK) | Verweis auf `firma` | | `titel` | VARCHAR | Stellentitel | | `referenznummer` | VARCHAR | Interne/öffentliche Referenz | | `stellen_url` | VARCHAR | URL zur Ausschreibung | | `quelle_plattform` | VARCHAR | Quelle (z. B. Portal) | | `ort_text` | VARCHAR | Arbeitsort (Text) | | `arbeitsmodell` | VARCHAR | Vor Ort / Hybrid / Remote | | `beschaeftigung` | VARCHAR | Vollzeit / Teilzeit | | `notizen` | TEXT | Zusatzinfos | --- ## Tabelle: `bewerbung` Zentrale Tabelle für jede **einzelne Bewerbung**. ### Zweck * Verknüpft Stelle, Datum, Kanal und aktuellen Status * Dient als Ausgangspunkt für Statusverlauf und Belege ### Besonderheit Der **aktuelle Status** wird hier redundant gespeichert, um schnelle Abfragen zu ermöglichen. Die vollständige Historie liegt in `status_verlauf`. ### Wichtige Felder ^ Feld ^ Typ ^ Beschreibung ^ | `bewerbung_id` | INT (PK) | Eindeutige ID | | `stelle_id` | INT (FK) | Verweis auf `stelle` | | `bewerbungsdatum` | DATE | Datum der Bewerbung | | `kanal` | VARCHAR | Bewerbungsweg | | `aktueller_status` | VARCHAR | Letzter Status | | `naechstes_nachfassen` | DATE | Erinnerungsdatum | | `betreff` | VARCHAR | Betreff / Titel | | `notizen` | TEXT | Freie Notizen | --- ## Tabelle: `status_verlauf` Speichert **jede Statusänderung** einer Bewerbung als eigenen Datensatz. ### Zweck * Revisionssichere Nachvollziehbarkeit * Keine Überschreibung von Zuständen ### Typische Statuswerte * `offen` * `nachfassen_geplant` * `rueckmeldung` * `einladung` * `absage` * `angebot` * `keine_antwort` * `zurueckgezogen` ### Wichtige Felder ^ Feld ^ Typ ^ Beschreibung ^ | `status_verlauf_id` | INT (PK) | Eindeutige ID | | `bewerbung_id` | INT (FK) | Zugehörige Bewerbung | | `status` | VARCHAR | Neuer Status | | `status_datum` | DATE | Datum der Änderung | | `quelle` | VARCHAR | Quelle (Portal, E-Mail, etc.) | | `notizen` | TEXT | Erläuterungen | --- ## Tabelle: `dokument` Enthält alle **Belege**, die einer Bewerbung zugeordnet sind. ### Zweck * Dokumentation der Nachweise * Verknüpfung von Datei oder externer URL ### Unterstützte Typen (Beispiele) * Anschreiben * Lebenslauf * Stellenanzeige * Portalbestätigung * Einladung * Absage * Sonstiges ### Wichtige Felder ^ Feld ^ Typ ^ Beschreibung ^ | `dokument_id` | INT (PK) | Eindeutige ID | | `bewerbung_id` | INT (FK) | Zugehörige Bewerbung | | `typ` | VARCHAR | Dokumenttyp | | `dateipfad` | VARCHAR | Pfad zur Datei | | `url` | VARCHAR | Alternative externe URL | | `erstellt_am_datum` | DATE | Dokumentdatum | | `notizen` | TEXT | Zusatzinformationen | --- ## View: `v_nachweis_bewerbungen_mit_belegen` Konsolidierte **Lesesicht** für Auswertungen. ### Zweck * Zentrale Datenquelle für: * Dashboard * Drucknachweis * CSV-Export * Entlastung der PHP-Logik ### Enthaltene Informationen * Bewerbungsdaten * Firmenname * Stellentitel * Aktueller Status * Anzahl der zugehörigen Dokumente ### Vorteil Änderungen an der Darstellung können auf Datenbankebene erfolgen, ohne PHP-Code anzupassen. --- ## Referentielle Integrität Alle Tabellen sind über **Foreign Keys logisch verknüpft**: ```text firma └── stelle └── bewerbung ├── status_verlauf └── dokument ``` Löschungen erfolgen **bewusst nicht automatisch**, um Datenverlust zu vermeiden. --- ## Designentscheidungen (bewusst) * Statushistorie als eigene Tabelle (kein Überschreiben) * Dokumente logisch getrennt von Bewerbung * View statt komplexer JOINs im Code * Keine unnötigen ENUMs → erweiterbar * Textfelder für reale Flexibilität --- ## Wartung & Erweiterbarkeit Die Struktur ist vorbereitet für: * zusätzliche Statusarten * weitere Dokumenttypen * statistische Auswertungen * zeitbasierte Reports Ohne strukturelle Änderungen an bestehenden Tabellen. --- ## Zusammenfassung Die Datenbankstruktur ist: * fachlich sauber getrennt * nachvollziehbar aufgebaut * revisionssicher * wartungsfreundlich * langfristig erweiterbar Sie bildet die Grundlage für einen **belastbaren, formalen Bewerbungsnachweis** und ist bewusst **unabhängig von externen Systemen**.