Benutzer-Werkzeuge

Webseiten-Werkzeuge


it-themen:projekt:dokumentation:bewerbungsnachweis_datenbankstruktur_sql

**Dies ist eine alte Version des Dokuments!**

zurück

 /* Bewerbungsnachweis – SQL-DDL Engine: InnoDB Charset: utf8mb4 Hinweis: Diese DDL entspricht der finalen Struktur (firma, stelle, bewerbung, status_verlauf, dokument + View). */

SET NAMES utf8mb4;
SET time_zone = '+00:00';

-- =========================
-- Tabelle: firma
-- =========================
CREATE TABLE IF NOT EXISTS firma (
firma_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
ort VARCHAR(200) NULL,
webseite VARCHAR(300) NULL,
notizen TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (firma_id),
KEY idx_firma_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================
-- Tabelle: stelle
-- =========================
CREATE TABLE IF NOT EXISTS stelle (
stelle_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
firma_id INT UNSIGNED NOT NULL,
titel VARCHAR(250) NOT NULL,
referenznummer VARCHAR(120) NULL,
stellen_url VARCHAR(500) NULL,
quelle_plattform VARCHAR(150) NULL,
ort_text VARCHAR(200) NULL,
arbeitsmodell VARCHAR(80) NULL,
beschaeftigung VARCHAR(80) NULL,
notizen TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (stelle_id),
KEY idx_stelle_firma (firma_id),
KEY idx_stelle_titel (titel),
CONSTRAINT fk_stelle_firma
FOREIGN KEY (firma_id) REFERENCES firma(firma_id)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================
-- Tabelle: bewerbung
-- =========================
CREATE TABLE IF NOT EXISTS bewerbung (
bewerbung_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
stelle_id INT UNSIGNED NOT NULL,
bewerbungsdatum DATE NOT NULL,
kanal VARCHAR(40) NOT NULL,
aktueller_status VARCHAR(40) NOT NULL DEFAULT 'offen',
naechstes_nachfassen DATE NULL,
betreff VARCHAR(250) NULL,
notizen TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (bewerbung_id),
KEY idx_bew_stelle (stelle_id),
KEY idx_bew_datum (bewerbungsdatum),
KEY idx_bew_status (aktueller_status),
KEY idx_bew_nachfassen (naechstes_nachfassen),
CONSTRAINT fk_bewerbung_stelle
FOREIGN KEY (stelle_id) REFERENCES stelle(stelle_id)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================
-- Tabelle: status_verlauf
-- =========================
CREATE TABLE IF NOT EXISTS status_verlauf (
status_verlauf_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
bewerbung_id INT UNSIGNED NOT NULL,
status VARCHAR(40) NOT NULL,
status_datum DATE NOT NULL,
quelle VARCHAR(80) NULL,
notizen TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (status_verlauf_id),
KEY idx_sv_bew (bewerbung_id),
KEY idx_sv_datum (status_datum),
KEY idx_sv_status (status),
CONSTRAINT fk_statusverlauf_bewerbung
FOREIGN KEY (bewerbung_id) REFERENCES bewerbung(bewerbung_id)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================
-- Tabelle: dokument
-- =========================
CREATE TABLE IF NOT EXISTS dokument (
dokument_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
bewerbung_id INT UNSIGNED NOT NULL,
typ VARCHAR(60) NOT NULL,
dateipfad VARCHAR(600) NULL,
url VARCHAR(600) NULL,
erstellt_am_datum DATE NOT NULL,
notizen TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (dokument_id),
KEY idx_doc_bew (bewerbung_id),
KEY idx_doc_typ (typ),
KEY idx_doc_datum (erstellt_am_datum),
CONSTRAINT fk_dokument_bewerbung
FOREIGN KEY (bewerbung_id) REFERENCES bewerbung(bewerbung_id)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================
-- View: v_nachweis_bewerbungen_mit_belegen
-- =========================
DROP VIEW IF EXISTS v_nachweis_bewerbungen_mit_belegen;

CREATE VIEW v_nachweis_bewerbungen_mit_belegen AS
SELECT
b.bewerbung_id AS bewerbung_id,
b.bewerbungsdatum AS bewerbungsdatum,
f.name AS firma,
s.titel AS stelle,
b.kanal AS kanal,
b.aktueller_status AS status,
b.naechstes_nachfassen AS naechstes_nachfassen,
s.referenznummer AS referenznummer,
COUNT(d.dokument_id) AS anzahl_belege
FROM bewerbung b
JOIN stelle s ON s.stelle_id = b.stelle_id
JOIN firma f ON f.firma_id = s.firma_id
LEFT JOIN dokument d ON d.bewerbung_id = b.bewerbung_id
GROUP BY
b.bewerbung_id,
b.bewerbungsdatum,
f.name,
s.titel,
b.kanal,
b.aktueller_status,
b.naechstes_nachfassen,
s.referenznummer;

Hinweise zur DDL

RESTRICT bei FKs: verhindert versehentliche Loeschungen (amtstauglich = kein Datenverlust).

aktuellerstatus ist bewusst redundant (Performance + einfache Auswertungen); Historie liegt in statusverlauf.

dokument.dateipfad und dokument.url koennen optional sein; mindestens eines sollte befuellt sein (Validierung macht PHP).

it-themen/projekt/dokumentation/bewerbungsnachweis_datenbankstruktur_sql.1770361128.txt.gz · Zuletzt geändert: von lars