Datenbanken verstehen – Vollständiger Leitfaden

🛠️ Empfohlene Tools für Entwickler

Diese Tools nutze ich selbst – sie helfen Ihnen, Ihre Projekte professionell umzusetzen und zu vermarkten.

🔒 XLS Padlock

Excel-Arbeitsmappen als EXE kompilieren und schützen – perfekt für Datenbank-gestützte Excel-Lösungen.

Jetzt ansehen →

🐍 VBA Padlock

VBA-Code kompilieren und Office-Lösungen verkaufen – ohne Source-Code-Weitergabe.

Jetzt ansehen →

📦 Paquet Builder

Professionelle Windows-Installationsprogramme für Ihre Anwendungen erstellen.

Jetzt ansehen →

⚡ ExeOutput for PHP

PHP-Anwendungen in eigenständige Windows-EXE-Dateien kompilieren.

Jetzt ansehen →

📄 HTML Executable

HTML-Dateien und Websites als eigenständige Windows-EXE-Dateien kompilieren.

Jetzt ansehen →

* Affiliate-Links: Bei einem Kauf über diese Links erhalten wir eine kleine Provision – für Sie entstehen keine zusätzlichen Kosten.

1. Was ist eine Datenbank?

Eine Datenbank ist ein strukturierter Speicher für Informationen. Stellen Sie sich eine Datenbank wie eine digitale Excel-Tabelle vor, die aber viel größer, schneller und sicherer ist.

📊 So sieht eine Datenbank-Tabelle aus

ID Name Stadt Alter
1 Anna Müller Berlin 28
2 Ben Schmidt München 34
3 Clara Wagner Berlin 22
4 David Fischer Hamburg 41
5 Elena Weber Berlin 19

🔑 Die 5 wichtigsten Eigenschaften einer Datenbank

  • Strukturiert: Daten sind in Tabellen organisiert (Zeilen & Spalten)
  • Persistent: Daten bleiben dauerhaft gespeichert
  • Sicher: Nur autorisierte Benutzer können darauf zugreifen
  • Schnell: Milliarden von Datensätzen können in Sekunden durchsucht werden
  • Transaktionssicher: Änderungen können rückgängig gemacht werden (ACID)
✅ Merke: Datenbanken sind das Herz jeder dynamischen Webseite – sie speichern alles von Benutzerdaten bis zu Produktkatalogen!

2. Arten von Datenbanken

📊 Relationale Datenbanken (SQL)

Relationale Datenbanken sind die am häufigsten verwendeten Datenbanken. Sie speichern Daten in Tabellen, die miteinander verknüpft werden können.

  • Beispiele: MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server
  • Sprache: SQL (Structured Query Language)
  • Vorteile: Strukturiert, sicher, ACID-konform, standardisiert
  • Nachteile: Weniger flexibel für unstrukturierte Daten

📦 NoSQL-Datenbanken

NoSQL-Datenbanken sind für unstrukturierte oder flexible Daten gedacht. Sie sind besonders skalierbar.

  • Beispiele: MongoDB (Dokumente), Redis (Key-Value), Cassandra (Spalten), Neo4j (Graph)
  • Vorteile: Flexibel, horizontal skalierbar, schnell für bestimmte Anwendungen
  • Nachteile: Weniger standardisiert, keine ACID-Garantien
Merkmal SQL (Relational) NoSQL
Struktur Tabellen mit festem Schema Flexible Struktur (JSON, Key-Value, Graph)
Sprache SQL Eigene Abfragesprachen
Skalierung Vertikal (stärkere Hardware) Horizontal (mehr Server)
ACID Ja Meist nicht
Beispiele MySQL, PostgreSQL MongoDB, Redis

🎯 Live-Demo: DBMS-Vergleich

Klicke auf einen Button, um mehr über ein DBMS zu erfahren:

Klick auf einen Button...
💡 Tipp: Für Web-Entwickler sind SQL-Datenbanken die wichtigsten – fast alle Web-Anwendungen nutzen MySQL oder PostgreSQL.

3. Tabellen & Beziehungen

In einer relationalen Datenbank bestehen die Daten aus Tabellen. Eine Tabelle hat Spalten (Felder) und Zeilen (Datensätze).

📋 Beispiel: Zwei verknüpfte Tabellen

👤 Tabelle: Kunden

KundenID Vorname Nachname Stadt
1 Anna Müller Berlin
2 Ben Schmidt München
3 Clara Wagner Berlin

📦 Tabelle: Bestellungen

BestellID KundenID Produkt Preis
1 1 Laptop 899.00
2 2 Maus 24.99
3 1 Tastatur 49.90
4 3 Monitor 199.00

🔗 Beziehungen zwischen Tabellen

  • 1:1 (Eins-zu-Eins): Ein Kunde hat genau eine Adresse
  • 1:N (Eins-zu-Viele): Ein Kunde hat viele Bestellungen
  • N:M (Viele-zu-Viele): Produkte haben viele Kategorien und Kategorien haben viele Produkte
✅ Merke: Die Beziehungen zwischen Tabellen sind das, was Datenbanken so mächtig macht – sie vermeiden Daten-Doppelungen!

4. Primär- & Fremdschlüssel

🔑 Primärschlüssel (Primary Key)

Ein Primärschlüssel ist eine eindeutige ID für jeden Datensatz in einer Tabelle.

  • Jeder Datensatz hat einen eindeutigen Primärschlüssel
  • Er darf nie leer sein (NOT NULL)
  • Oft wird eine automatisch hochzählende Zahl verwendet (AUTO_INCREMENT)
  • Beispiel: KundenID in der Kunden-Tabelle

🔗 Fremdschlüssel (Foreign Key)

Ein Fremdschlüssel verbindet zwei Tabellen miteinander. Er verweist auf den Primärschlüssel einer anderen Tabelle.

  • Er stellt die Beziehung zwischen Tabellen her
  • Er stellt sicher, dass die Datenintegrität erhalten bleibt
  • Beispiel: KundenID in der Bestellungen-Tabelle

📊 Beispiel: Primär- und Fremdschlüssel

Kunden
KundenID (Primärschlüssel) | Vorname | Nachname
1 | Anna | Müller
2 | Ben | Schmidt
3 | Clara | Wagner

Bestellungen
BestellID | KundenID (Fremdschlüssel) | Produkt | Preis
1 | 1 | Laptop | 899.00
2 | 2 | Maus | 24.99
3 | 1 | Tastatur | 49.90
4 | 3 | Monitor | 199.00

🔵 KundenID = Primärschlüssel
🔴 KundenID = Fremdschlüssel (verweist auf Kunden)

5. SQL-Grundlagen

SQL (Structured Query Language) ist die Standardsprache für relationale Datenbanken.

📝 Die 5 wichtigsten SQL-Befehle

Befehl Bedeutung Beispiel
SELECT Daten abfragen SELECT * FROM Kunden;
INSERT Daten einfügen INSERT INTO Kunden (Name) VALUES ('Anna');
UPDATE Daten ändern UPDATE Kunden SET Stadt = 'Berlin' WHERE ID = 1;
DELETE Daten löschen DELETE FROM Kunden WHERE ID = 5;
CREATE Tabellen erstellen CREATE TABLE Kunden (ID INT, Name VARCHAR(100));
📄 Beispiel: Tabelle erstellen
-- Tabelle "Kunden" erstellen
CREATE TABLE Kunden (
    KundenID INT PRIMARY KEY AUTO_INCREMENT,
    Vorname VARCHAR(50) NOT NULL,
    Nachname VARCHAR(50) NOT NULL,
    Stadt VARCHAR(50),
    Alter INT
);

6. SELECT – Daten abfragen

📄 Grundlagen
-- Alle Daten abfragen
SELECT * FROM Kunden;

-- Nur bestimmte Spalten
SELECT Vorname, Nachname FROM Kunden;

-- Mit Bedingung (WHERE)
SELECT * FROM Kunden
WHERE Stadt = 'Berlin';

-- Mit Sortierung
SELECT * FROM Kunden
ORDER BY Nachname ASC;

-- Mit Limit (nur die ersten 5)
SELECT * FROM Kunden
LIMIT 5;

🎯 Live-Demo: Datenbank abfragen

Simulierte Datenbank mit Kunden:

Klick auf einen Button...

7. INSERT, UPDATE, DELETE

📝 INSERT – Daten einfügen

📄 sql.sql
-- Einen neuen Kunden einfügen
INSERT INTO Kunden (Vorname, Nachname, Stadt, Alter)
VALUES ('Felix', 'Klein', 'Köln', 27);

-- Mehrere Datensätze auf einmal
INSERT INTO Kunden (Vorname, Nachname, Stadt, Alter)
VALUES
    ('Greta', 'Bauer', 'Leipzig', 26),
    ('Hanna', 'Schulz', 'Dresden', 31);

📝 UPDATE – Daten ändern

📄 sql.sql
-- Die Stadt eines Kunden ändern
UPDATE Kunden
SET Stadt = 'Frankfurt'
WHERE KundenID = 6;

-- Mehrere Felder ändern
UPDATE Kunden
SET Stadt = 'Düsseldorf', Alter = 30
WHERE KundenID = 6;

📝 DELETE – Daten löschen

📄 sql.sql
-- Einen Kunden löschen
DELETE FROM Kunden
WHERE KundenID = 6;

-- Achtung: Ohne WHERE werden ALLE Datensätze gelöscht!
DELETE FROM Kunden;  -- Leert die ganze Tabelle!
⚠️ Achtung: Bei UPDATE und DELETE immer WHERE verwenden – sonst werden alle Datensätze geändert/gelöscht!

8. Verknüpfungen (JOIN)

Mit JOIN verbinden Sie Daten aus mehreren Tabellen.

📄 sql.sql
-- Kunden mit ihren Bestellungen
SELECT
    Kunden.Vorname,
    Kunden.Nachname,
    Bestellungen.Produkt,
    Bestellungen.Preis
FROM Kunden
JOIN Bestellungen
    ON Kunden.KundenID = Bestellungen.KundenID;

-- Mit Aliase (kurze Schreibweise)
SELECT
    k.Vorname,
    k.Nachname,
    b.Produkt,
    b.Preis
FROM Kunden AS k
JOIN Bestellungen AS b
    ON k.KundenID = b.KundenID;

🎯 Live-Demo: JOIN in Aktion

Zeige Kunden mit ihren Bestellungen:

Klick auf den Button...

9. Aggregatfunktionen

Aggregatfunktionen führen Berechnungen auf Daten durch.

Funktion Beschreibung Beispiel
COUNT(*) Zählt die Zeilen SELECT COUNT(*) FROM Kunden; → 5
SUM(Spalte) Summiert die Werte SELECT SUM(Alter) FROM Kunden; → 144
AVG(Spalte) Durchschnitt SELECT AVG(Alter) FROM Kunden; → 28.8
MIN(Spalte) Kleinster Wert SELECT MIN(Alter) FROM Kunden; → 19
MAX(Spalte) Größter Wert SELECT MAX(Alter) FROM Kunden; → 41
📄 sql.sql
-- Anzahl der Kunden pro Stadt
SELECT
    Stadt,
    COUNT(*) AS Anzahl
FROM Kunden
GROUP BY Stadt;

-- Durchschnittsalter pro Stadt
SELECT
    Stadt,
    AVG(Alter) AS Durchschnittsalter
FROM Kunden
GROUP BY Stadt;

🎯 Live-Demo: Aggregatfunktionen

Klick auf einen Button...

10. Indizes & Performance

Indizes sind wie das Register eines Buches – sie machen die Suche in der Datenbank viel schneller.

📝 Index erstellen

📄 sql.sql
-- Einen Index auf die Spalte "Stadt" erstellen
CREATE INDEX idx_stadt
ON Kunden (Stadt);

-- Einen eindeutigen Index (keine Duplikate erlaubt)
CREATE UNIQUE INDEX idx_email
ON Kunden (Email);

🚀 Tipps für bessere Performance

  • Indizes auf häufig abgefragte Spalten
  • Nur benötigte Spalten abfragen (SELECT * vermeiden)
  • WHERE mit indizierten Spalten verwenden
  • JOINs auf indizierte Fremdschlüssel
  • LIMIT für große Ergebnismengen
  • Datenbank-Normalisierung (Daten nicht doppelt speichern)
💡 Tipp: Für kleine Datenbanken (unter 10.000 Zeilen) sind Indizes oft nicht nötig – bei großen Datenbanken sind sie unverzichtbar!

11. Datenbank-Design

Ein gutes Datenbank-Design ist die Grundlage für jede erfolgreiche Anwendung.

📐 Normalisierung (Daten nicht doppelt speichern)

❌ Schlecht (Redundanz):

Bestellungen: BestellID | Kunde | KundenStadt | Produkt
1 | Anna | Berlin | Laptop
2 | Anna | Berlin | Tastatur

✅ Gut (Normalisiert):

Kunden: KundenID | Name | Stadt
1 | Anna | Berlin

Bestellungen: BestellID | KundenID | Produkt
1 | 1 | Laptop
2 | 1 | Tastatur

📝 Best Practices für Datenbank-Design

  • Eindeutige IDs (Primärschlüssel) für jede Tabelle
  • Nicht doppelt speichern – Daten normalisieren
  • Aussagekräftige Namen für Tabellen und Spalten
  • Fremdschlüssel für alle Beziehungen
  • NOT NULL für Pflichtfelder
  • Datentypen passend wählen (VARCHAR, INT, DATE, etc.)

12. ACID – Transaktionssicherheit

ACID ist ein Akronym für die vier Eigenschaften, die eine sichere und zuverlässige Datenbank-Transaktion ausmachen.

🔵 Atomicity (Atomarität)
Eine Transaktion wird entweder vollständig ausgeführt oder gar nicht. Kein halber Zustand.
🟢 Consistency (Konsistenz)
Die Datenbank bleibt nach jeder Transaktion in einem gültigen Zustand. Alle Regeln werden eingehalten.
🟡 Isolation (Isolation)
Gleichzeitige Transaktionen beeinflussen sich gegenseitig nicht. Jede läuft isoliert ab.
🔴 Durability (Dauerhaftigkeit)
Einmal gespeicherte Daten bleiben dauerhaft erhalten – auch bei Stromausfall oder Absturz.

📝 Beispiel: Banküberweisung (ACID in Aktion)

-- Beispiel: 100€ von Konto A nach Konto B überweisen
BEGIN TRANSACTION;

-- Schritt 1: Geld von Konto A abziehen (Atomicity)
UPDATE Konten SET Saldo = Saldo - 100 WHERE KontoID = 1;

-- Schritt 2: Geld auf Konto B hinzufügen (Atomicity)
UPDATE Konten SET Saldo = Saldo + 100 WHERE KontoID = 2;

-- Schritt 3: Prüfen, ob alle Regeln eingehalten wurden (Consistency)
-- (z.B. Saldo darf nicht negativ sein)

-- Schritt 4: Transaktion abschließen (Durability)
COMMIT;

Wenn ein Schritt fehlschlägt, macht ROLLBACK alle Änderungen rückgängig – die Datenbank bleibt konsistent.

🎯 Live-Demo: ACID verstehen

Simulierte Überweisung mit ACID-Eigenschaften:

Klick auf einen Button...

13. Datenbank-Sicherheit

Die Sicherheit Ihrer Datenbank ist entscheidend für den Schutz Ihrer Daten vor unbefugtem Zugriff und Angriffen.

🔒 Wichtige Sicherheitsmaßnahmen

  • Starke Passwörter: Verwenden Sie lange, komplexe Passwörter für Datenbank-Benutzer
  • Prinzip der geringsten Rechte: Jeder Benutzer hat nur die notwendigen Rechte
  • SQL-Injection-Schutz: Verwenden Sie Prepared Statements
  • Datenbank-Firewall: Blockieren Sie unerwünschte Zugriffe
  • Verschlüsselung: Verschlüsseln Sie sensible Daten (z.B. Passwörter, Kreditkarten)
  • Regelmäßige Backups: Sichern Sie Ihre Datenbank regelmäßig
  • Updates: Halten Sie Ihre Datenbank-Software aktuell
  • Audit-Logs: Protokollieren Sie alle Änderungen und Zugriffe

🛡️ Beispiel: Sichere Passwort-Speicherung

-- Passwörter niemals im Klartext speichern!
-- Stattdessen: Passwort hashen und salzen

-- INSERT mit gehashtem Passwort (z.B. mit bcrypt)
INSERT INTO Benutzer (Benutzername, PasswortHash)
VALUES ('admin', '$2y$10$...');

-- Beim Login: eingegebenes Passwort hashen und mit Datenbank vergleichen
SELECT * FROM Benutzer
WHERE Benutzername = 'admin'
AND PasswortHash = '$2y$10$...';
⚠️ Wichtig: Speichern Sie Passwörter niemals im Klartext! Verwenden Sie immer moderne Hashing-Algorithmen wie bcrypt oder Argon2.
💡 Tipp: Für Web-Anwendungen sollten Sie immer Parameterized Queries (Prepared Statements) verwenden – das ist der beste Schutz gegen SQL-Injection!

14. Praxis-Beispiele

📝 Beispiel 1: Blog-Datenbank

📄 sql.sql
-- Tabellen für einen einfachen Blog
CREATE TABLE Benutzer (
    BenutzerID INT PRIMARY KEY AUTO_INCREMENT,
    Benutzername VARCHAR(50) UNIQUE NOT NULL,
    Email VARCHAR(100) UNIQUE NOT NULL,
    PasswortHash VARCHAR(255) NOT NULL,
    ErstelltAm DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE Beiträge (
    BeitragID INT PRIMARY KEY AUTO_INCREMENT,
    BenutzerID INT NOT NULL,
    Titel VARCHAR(200) NOT NULL,
    Inhalt TEXT NOT NULL,
    ErstelltAm DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (BenutzerID) REFERENCES Benutzer(BenutzerID)
);

📝 Beispiel 2: E-Commerce-Datenbank

📄 sql.sql
-- Tabellen für einen Online-Shop
CREATE TABLE Produkte (
    ProduktID INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(100) NOT NULL,
    Preis DECIMAL(10,2) NOT NULL,
    Lagerbestand INT DEFAULT 0
);

CREATE TABLE Bestellungen (
    BestellID INT PRIMARY KEY AUTO_INCREMENT,
    KundenID INT NOT NULL,
    Bestelldatum DATETIME DEFAULT CURRENT_TIMESTAMP,
    Gesamtpreis DECIMAL(10,2) NOT NULL
);

CREATE TABLE Bestellpositionen (
    PositionID INT PRIMARY KEY AUTO_INCREMENT,
    BestellID INT NOT NULL,
    ProduktID INT NOT NULL,
    Menge INT NOT NULL,
    Preis DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (BestellID) REFERENCES Bestellungen(BestellID),
    FOREIGN KEY (ProduktID) REFERENCES Produkte(ProduktID)
);

📝 Beispiel 3: Wichtige SQL-Abfragen

📄 sql.sql
-- Top 5 Kunden mit den meisten Bestellungen
SELECT
    k.Vorname,
    k.Nachname,
    COUNT(b.BestellID) AS AnzahlBestellungen
FROM Kunden k
LEFT JOIN Bestellungen b
    ON k.KundenID = b.KundenID
GROUP BY k.KundenID
ORDER BY AnzahlBestellungen DESC
LIMIT 5;

-- Produkte, die nie bestellt wurden
SELECT p.Name
FROM Produkte p
LEFT JOIN Bestellpositionen bp
    ON p.ProduktID = bp.ProduktID
WHERE bp.PositionID IS NULL;

-- Kunden mit ihrem Umsatz (Summe aller Bestellungen)
SELECT
    k.Vorname,
    k.Nachname,
    SUM(b.Preis) AS Gesamtumsatz
FROM Kunden k
JOIN Bestellungen b
    ON k.KundenID = b.KundenID
GROUP BY k.KundenID
ORDER BY Gesamtumsatz DESC;

15. Übungen zum Mitmachen

📝 Übung 1: SELECT-Abfragen

Schreibe eine SQL-Abfrage, die alle Kunden aus Berlin anzeigt, sortiert nach Nachname.

💡 Lösung:
SELECT * FROM Kunden
WHERE Stadt = 'Berlin'
ORDER BY Nachname ASC;

📝 Übung 2: INSERT

Füge einen neuen Kunden ein: "Mia", "Koch", "Hamburg", 25.

💡 Lösung:
INSERT INTO Kunden (Vorname, Nachname, Stadt, Alter)
VALUES ('Mia', 'Koch', 'Hamburg', 25);

📝 Übung 3: UPDATE

Ändere die Stadt von Kunde mit ID 3 auf "Leipzig".

💡 Lösung:
UPDATE Kunden
SET Stadt = 'Leipzig'
WHERE KundenID = 3;

📝 Übung 4: Aggregatfunktion

Wie viele Kunden wohnen in Berlin?

💡 Lösung:
SELECT COUNT(*) FROM Kunden
WHERE Stadt = 'Berlin';

📝 Übung 5: JOIN

Zeige alle Kunden mit ihren Bestellungen (Vorname, Nachname, Produkt, Preis).

💡 Lösung:
SELECT
    k.Vorname,
    k.Nachname,
    b.Produkt,
    b.Preis
FROM Kunden k
JOIN Bestellungen b
    ON k.KundenID = b.KundenID;

📝 Übung 6: ACID (Fortgeschritten)

Warum ist ACID wichtig für eine Banking-Datenbank?

💡 Lösung:

ACID stellt sicher, dass eine Überweisung entweder komplett ausgeführt wird (Atomicity), die Datenbank konsistent bleibt (Consistency), gleichzeitige Transaktionen sich nicht beeinflussen (Isolation) und die Daten dauerhaft gespeichert werden (Durability).

16. Tipps & Best Practices

✅ WHERE nicht vergessen: Bei UPDATE und DELETE immer WHERE verwenden – sonst werden alle Daten geändert!
✅ Indizes nutzen: Für häufige Abfragen mit WHERE und JOIN sollten Indizes erstellt werden.
✅ SELECT * vermeiden: Fragen Sie nur die Spalten ab, die Sie wirklich brauchen – das spart Ressourcen.
✅ Prepared Statements: Verwenden Sie immer Prepared Statements oder Parameterized Queries für sichereren Code gegen SQL-Injection.
⚠️ Daten sichern: Machen Sie immer Backups Ihrer Datenbank bevor Sie größere Änderungen durchführen!
✅ Fremdschlüssel: Verwenden Sie Fremdschlüssel für die Datenintegrität – sie verhindern inkonsistente Daten.
✅ Test-Daten: Arbeiten Sie mit einer Test-Datenbank bevor Sie Änderungen auf der Live-Datenbank durchführen.
🚀 Fortgeschrittenen-Tipp: Lernen Sie Transaktionen (BEGIN, COMMIT, ROLLBACK) für sichere Datenbank-Operationen – das ist besonders für Banking, Bestellungen und andere kritische Anwendungen wichtig!

17. Weiterführende Ressourcen

📚 Online-Lernplattformen

  • SQLZoo – Interaktive SQL-Übungen direkt im Browser
  • W3Schools SQL – Schritt-für-Schritt-Anleitung mit Beispielen
  • LeetCode SQL – SQL-Herausforderungen für Fortgeschrittene
  • Khan Academy SQL – Kostenloser interaktiver Kurs
  • Mode Analytics SQL Tutorial – Ausführliches SQL-Tutorial

📖 Empfohlene Bücher

  • "SQL für Dummies" – Allen G. Taylor
  • "SQL – Das umfassende Handbuch" – Thomas Theis
  • "Learning SQL" – Alan Beaulieu
  • "Datenbanken – Das umfassende Handbuch" – Andreas K. Schmid

🛠️ Kostenlose Übungs-Datenbanken

  • SQLite – Einfache Datei-Datenbank zum Üben
  • MySQL Community Edition – Kostenlose Datenbank für lokale Tests
  • PostgreSQL – Leistungsstarke Open-Source-Datenbank
  • DB Browser for SQLite – Grafische Oberfläche für SQLite
  • DBeaver – Universeller Datenbank-Client
💡 Tipp: Für den Anfang ist SQLite + DB Browser die einfachste Kombination – keine Installation nötig, einfach loslegen!
← Zurück zu den Grundlagen
Datenschutz-Übersicht
digitale-start-hilfe.de

Auf dieser Website werden Cookies verwendet, um deine Nutzererfahrung zu verbessern. Du kannst in den {setting}Einstellungen{/setting} mehr erfahren oder Cookies jederzeit ablehnen.

Eine vollständige Liste aller Cookies findest du in unserer Cookie-Erklärung.

Weitere Informationen findest du in unserer Datenschutzerklärung.

Notwendige Cookies & Chatbot

Diese Cookies sind für den Betrieb der Website unbedingt erforderlich und können nicht deaktiviert werden. Dazu gehören auch grundlegende Funktionen wie der WebChatAgent (Chatbot) von WebChatAgent.com, der die direkte Kommunikation mit uns ermöglicht.