Eine Datenbank soll nicht nur Daten speichern, sondern auch sicherstellen, dass die Daten konsistent und eindeutig bleiben.
Dafür gibt es Schlüssel und Constraints (Einschränkungen).

🔹 Primärschlüssel (Primary Key)

Jede Tabelle braucht meist einen Primärschlüssel, der jeden Datensatz eindeutig identifiziert.

Beispiel:

CREATE TABLE kunden (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE
);

👉 id ist Primärschlüssel → automatisch eindeutige Werte.

🔹 Fremdschlüssel (Foreign Key)

Ein Fremdschlüssel verknüpft Tabellen miteinander.

Beispiel: Bestellungen gehören zu Kunden:

CREATE TABLE bestellungen (
    id SERIAL PRIMARY KEY,
    kunde_id INT REFERENCES kunden(id),
    produkt VARCHAR(100),
    datum DATE DEFAULT CURRENT_DATE
);

👉 kunde_id muss auf eine gültige kunden.id verweisen.

🔹 NOT NULL Constraint

Eine Spalte darf nicht leer bleiben:

name VARCHAR(100) NOT NULL

🔹 UNIQUE Constraint

Ein Wert darf nur einmal vorkommen (z. B. E-Mail):

name VARCHAR(100) NOT NULL

🔹 UNIQUE Constraint

Ein Wert darf nur einmal vorkommen (z. B. E-Mail):

email VARCHAR(150) UNIQUE

🔹 CHECK Constraint

Bedingungen erzwingen:

ALTER TABLE bestellungen
ADD CONSTRAINT check_datum CHECK (datum >= '2000-01-01');

👉 Verhindert ungültige Daten.

🔹 DEFAULT Werte

Standardwerte setzen:

erstellt_am TIMESTAMP DEFAULT CURRENT_TIMESTAMP

🔹 Zusammengesetzter Primärschlüssel

Manchmal identifiziert die Kombination mehrerer Spalten einen Datensatz.

CREATE TABLE lagerbestand (
    produkt_id INT,
    lager_id INT,
    menge INT,
    PRIMARY KEY (produkt_id, lager_id)
);

🔹 Unterschiede zu MySQL/MariaDB

PostgreSQL ist bei Constraints strenger – falsche Daten werden sofort abgelehnt.

CHECK-Constraints werden in Postgres konsequent geprüft (in MySQL teilweise ignoriert).

Zusammengesetzte Schlüssel sind in Postgres üblich, in MySQL etwas seltener.

🔹 Übungen

1. Erstelle die Tabelle kunden mit:

id SERIAL PRIMARY KEY

name VARCHAR(100) NOT NULL

email VARCHAR(150) UNIQUE

2. Erstelle die Tabelle bestellungen mit:

id SERIAL PRIMARY KEY

kunde_id als Fremdschlüssel auf kunden(id)

produkt VARCHAR(100)

datum DATE DEFAULT CURRENT_DATE

3. Füge zwei Kunden und je eine Bestellung ein.

4. Bonus: Ergänze in bestellungen ein CHECK-Constraint, das datum nicht in der Vergangenheit erlaubt.

✅ Zusammenfassung

  • Primary Key → eindeutige Identifikation
  • Foreign Key → Verknüpfung zwischen Tabellen
  • NOT NULL, UNIQUE, CHECK sichern Datenqualität
  • DEFAULT setzt Standardwerte
  • PostgreSQL ist strenger und prüft Constraints konsequenter als MySQL

👉 Im nächsten Kapitel kümmern wir uns um Indizes & Performance – wie du Abfragen beschleunigen kannst.

 

📚 Inhaltsverzeichnis

👉 psql Kapitel 1: Installation & Anmeldung mit psql
👉 psql Kapitel 2: Benutzer & Rollen in PostgreSQL
👉 psql Kapitel 3: Datenbanken & Tabellen erstellen
👉 psql Kapitel 4: CRUD-Befehle (SELECT, INSERT, UPDATE, DELETE)
👉 psql Kapitel 5: Schlüssel & Constraints in PostgreSQL
👉 psql Kapitel 6: Indizes & Performance
👉 psql Kapitel 7: Erweiterungen & Spezialfunktionen
👉 psql Kapitel 8: Backups & Restore in PostgreSQL

⭐ Bonus-Kapitel

👉 psql Kapitel 9 (Bonus): Admin-Tipps & Best Practices für PostgreSQL