Daten gibt's jede Menge, aber nicht alle davon sind wirklich nützlich. Damit deine Tabelle nicht zur Müllhalde wird, kannst du in PostgreSQL Constraints setzen. Das sind so einfache Regeln, damit niemand zum Beispiel Zahlen ins Feld "Name" schreibt oder es einfach leer lässt.
Was sind Constraints?
Constraints in PostgreSQL sind wie Verhaltensregeln in der Armee. Wenn es keine gibt, kann jeder machen, was er will: das Alter eines Users als -999 angeben, einen leeren String statt eines Namens eintragen oder denselben Studenten zweimal mit unterschiedlichen id speichern. Damit das nicht passiert, bietet PostgreSQL Kontrollmechanismen, die Constraints genannt werden.
Constraints helfen dir dabei:
- Daten valide und konsistent zu halten.
- Sicherzustellen, dass die Daten bestimmten Regeln entsprechen (zum Beispiel: Das Alter einer Person darf nicht negativ sein).
- Fehler schneller zu finden, wenn die Daten nicht deinen Erwartungen entsprechen.
Heute schauen wir uns die zwei am häufigsten genutzten Constraints an: NOT NULL und UNIQUE.
Constraint NOT NULL
Das NOT NULL-Constraint sagt PostgreSQL: "Hey, dieses Feld muss immer einen Wert haben. Unklarheiten gibt's hier nicht!". Wenn du versuchst, eine Zeile mit NULL in die Tabelle einzufügen, gibt PostgreSQL einen Fehler aus. Das ist besonders praktisch für Felder, die Pflicht sind, wie zum Beispiel Name oder Geburtsdatum eines Studenten.
Beispiel für NOT NULL
CREATE TABLE teachers (
id SERIAL PRIMARY KEY, -- Einzigartige Kennung
name VARCHAR(100) NOT NULL, -- Name des Lehrers (Pflichtfeld)
subject VARCHAR(50) NOT NULL -- Fach, das er unterrichtet (Pflichtfeld)
);
In diesem Beispiel dürfen die Spalten name und subject nicht leer bleiben. Wenn du versuchst, eine Zeile ohne Werte für diese Spalten einzufügen, bekommst du einen Fehler.
INSERT INTO teachers (name, subject)
VALUES (NULL, 'Mathematik');
Ergebnis: Fehler! Du hast keinen Namen für den Lehrer angegeben, aber name verlangt einen Wert.
Constraint UNIQUE: Einzigartigkeit ist Pflicht
Das UNIQUE-Constraint stellt sicher, dass Werte in einer Spalte oder einer Kombination von Spalten nicht doppelt vorkommen. Das ist praktisch, wenn du zum Beispiel sicherstellen willst, dass zwei Studenten nicht dieselbe Matrikelnummer haben.
Wenn NOT NULL so ist wie "alle Gäste müssen angezogen sein", dann ist UNIQUE "keine gleichen Kleider auf der Party".
Beispiel für UNIQUE
CREATE TABLE departments (
id SERIAL PRIMARY KEY, -- Einzigartige Kennung
name VARCHAR(100) UNIQUE -- Name des Departments muss einzigartig sein
);
Jetzt kannst du nicht zwei Departments mit demselben Namen hinzufügen.
INSERT INTO departments (name) VALUES ('Mathematik');
INSERT INTO departments (name) VALUES ('Mathematik');
Ergebnis: Fehler! Versuch, einen doppelten Wert in der Spalte name einzufügen.
Kombiniertes UNIQUE-Constraint
Du kannst auch Einzigartigkeit für eine Kombination aus zwei (oder mehr) Spalten festlegen. Zum Beispiel:
CREATE TABLE enrollments (
id SERIAL PRIMARY KEY, -- Einzigartige Kennung für den Eintrag
student_id INTEGER NOT NULL, -- Kennung des Studenten
course_id INTEGER NOT NULL, -- Kennung des Kurses
UNIQUE (student_id, course_id) -- Ein Student kann sich nicht zweimal für denselben Kurs anmelden
);
Jetzt muss jedes Paar aus student_id und course_id einzigartig sein. Wenn jemand versucht, denselben Studenten zweimal für denselben Kurs einzutragen, blockt PostgreSQL das ab.
Constraints kombinieren: NOT NULL und UNIQUE
Du kannst NOT NULL und UNIQUE für eine Spalte kombinieren. Zum Beispiel:
CREATE TABLE users (
username VARCHAR(50) NOT NULL UNIQUE, -- Einzigartiger Login, Pflichtfeld
email VARCHAR(100) NOT NULL UNIQUE -- Einzigartige E-Mail-Adresse, Pflichtfeld
);
Hier müssen Login und E-Mail-Adresse einzigartig sein und dürfen nicht leer bleiben.
Typische Fehler bei der Verwendung von Constraints
Wenn du UNIQUE auf eine Spalte anwendest, aber kein NOT NULL hinzufügst, kannst du mehrere Zeilen mit leeren NULL-Werten einfügen, weil PostgreSQL NULL nicht als gleich zu einem anderen NULL betrachtet. Wenn du leere Werte verbieten willst, füge NOT NULL hinzu.
Der Versuch, einen doppelten Wert in eine Spalte mit UNIQUE-Constraint einzufügen, führt zu einem Fehler. Prüfe immer deine Eingabedaten, bevor du INSERT ausführst.
Zu viele Constraints können die Performance beim Einfügen von Daten verschlechtern.
Wozu das Ganze?
Mit Constraints kannst du viele Probleme vermeiden, wie doppelte Daten, leere Zeilen und andere Fehler, die durch den Faktor Mensch entstehen. Sie machen deine Datenbank quasi "selbstschützend" und bei größeren Projekten spart das richtig viel Zeit. Bei Vorstellungsgesprächen wird oft nach Constraints gefragt, also ist das Wissen über NOT NULL und UNIQUE nicht nur praktisch, sondern kann auch Eindruck bei zukünftigen Arbeitgebern machen.
In der nächsten Vorlesung schauen wir uns das DEFAULT-Constraint an, mit dem du Standardwerte für Spalten festlegen kannst, falls der User nichts angibt. Bis dann!
GO TO FULL VERSION