# 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:
* 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.