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:

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