PostgreSQL - Constraints: Your Friendly Guide to Data Integrity

Hallo zusammen, zukünftige Datenbank-Zauberer! ? Heute tauchen wir in die wunderbare Welt der PostgreSQL Constraints ein. Keine Sorge, wenn ihr neu seid; wir gehen schrittweise vor, und am Ende werdet ihr Daten wie ein Profi einschränken können! Lassen Sie uns gemeinsam auf diese aufregende Reise gehen.

PostgreSQL - Constraints

Was sind Constraints?

Bevor wir loslegen, sprechen wir darüber, was Constraints sind. Stellt euch vor,你们的房子是由扑克牌建造的。每张牌都需要精确放置,否则整个结构可能会崩溃。数据库中的约束就像建造扑克牌房子的规则 - 它们确保我们的数据被正确地构建并保持其完整性。

Arten von Constraints

PostgreSQL bietet verschiedene Arten von Constraints. Lassen Sie uns jeden mit Beispielen und Erklärungen erkunden.

Constraint-Typ Beschreibung
NOT NULL Stellt sicher, dass eine Spalte keinen NULL-Wert haben kann
UNIQUE Stellt sicher, dass alle Werte in einer Spalte unterschiedlich sind
PRIMARY KEY Einzigartige Identifizierung jeder Zeile in einer Tabelle
FOREIGN KEY Verknüpft Daten zwischen Tabellen
CHECK Stellt sicher, dass alle Werte in einer Spalte eine bestimmte Bedingung erfüllen
EXCLUSION Stellt sicher, dass, wenn zwei Zeilen anhand der angegebenen Spalten mit den angegebenen Operatoren verglichen werden, nicht alle Vergleiche TRUE zurückgeben

NOT NULL Constraint

Die NOT NULL Constraint ist wie ein strenger Lehrer, der keine leeren Antworten auf einer Prüfung akzeptiert. Sie stellt sicher, dass eine Spalte immer einen Wert enthalten muss.

Lassen Sie uns eine Tabelle für unseren imaginären Buchladen erstellen:

CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
price DECIMAL(10, 2)
);

In diesem Beispiel sind title und author NOT NULL, was bedeutet, dass jedes Buch einen Titel und einen Autor haben muss. Der price kann jedoch NULL sein, vielleicht für Bücher, die noch nicht bewertet wurden.

UNIQUE Constraint

Die UNIQUE Constraint ist wie das Vergeben einzigartiger Spitznamen an deine Freunde. Keine zwei können denselben Spitznamen haben.

Lassen Sie uns eine UNIQUE Constraint zu unserer books Tabelle hinzufügen:

ALTER TABLE books
ADD CONSTRAINT unique_isbn UNIQUE (isbn);

Wenn wir nun versuchen, zwei Bücher mit der gleichen ISBN hinzuzufügen:

INSERT INTO books (title, author, isbn) VALUES ('Book 1', 'Author 1', '1234567890');
INSERT INTO books (title, author, isbn) VALUES ('Book 2', 'Author 2', '1234567890');

Der zweite INSERT wird fehlschlagen, unsere Daten sauber und einzigartig zu halten!

PRIMARY KEY Constraint

Eine PRIMARY KEY ist wie der Kapitän eines Sportteams - einzigartig und unerlässlich. Sie identifiziert jede Zeile in einer Tabelle eindeutig.

Wir haben bereits eine PRIMARY KEY in unserer books Tabelle (book_id) definiert, aber lassen Sie uns eine andere Tabelle erstellen, um dies zu demonstrieren:

CREATE TABLE customers (
customer_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE
);

Hier ist customer_id unsere PRIMARY KEY. Sie wird automatisch erhöht und ist für jeden neuen Kunden einzigartig.

FOREIGN KEY Constraint

FOREIGN KEYs sind wie Verbindungen in einem sozialen Netzwerk. Sie verknüpfen Daten zwischen Tabellen.

Lassen Sie uns eine orders Tabelle erstellen, die auf unsere customers Tabelle verweist:

CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_id INTEGER,
order_date DATE NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

Jetzt können wir keine Bestellung für einen Kunden hinzufügen, der nicht in der customers Tabelle existiert. Es ist, als würde man ein Brief an eine nicht existierende Adresse senden!

CHECK Constraint

Die CHECK Constraint ist wie ein Türsteher in einem Club, der sicherstellt, dass nur die richtigen Daten hineingelassen werden.

Lassen Sie uns eine CHECK Constraint zu unserer books Tabelle hinzufügen, um sicherzustellen, dass alle Buchpreise positiv sind:

ALTER TABLE books
ADD CONSTRAINT positive_price CHECK (price > 0);

Wenn wir nun versuchen, ein Buch mit einem negativen Preis hinzuzufügen:

INSERT INTO books (title, author, price) VALUES ('Cheap Book', 'Frugal Author', -5.99);

PostgreSQL wird höflich ablehnen, unsere Daten logisch und konsistent zu halten.

EXCLUSION Constraint

Die EXCLUSION Constraint ist wie eine komplexe Regel in einem Brettspiel. Es ist fortgeschritten, aber mächtig, wenn man es braucht.

Stellen wir uns vor, wir planen Veranstaltungen und möchten sicherstellen, dass keine zwei Veranstaltungen im selben Raum重叠:

CREATE TABLE events (
event_id SERIAL PRIMARY KEY,
room_no INTEGER,
event_start TIMESTAMP,
event_end TIMESTAMP,
EXCLUDE USING gist (room_no WITH =, tsrange(event_start, event_end) WITH &&)
);

Dies stellt sicher, dass für jede zwei Zeilen, es nicht wahr ist, dass sowohl die Raumnummern gleich sind UND die Zeitbereiche sich überlappen.

Constraints entfernen

Manchmal müssen wir Constraints entfernen, wie das Ändern der Regeln unseres Spiels. Hier ist, wie wir Constraints entfernen können:

-- Entfernen eines benannten Constraints
ALTER TABLE books DROP CONSTRAINT unique_isbn;

-- Entfernen einer PRIMARY KEY
ALTER TABLE books DROP CONSTRAINT books_pkey;

-- Entfernen eines FOREIGN KEY
ALTER TABLE orders DROP CONSTRAINT orders_customer_id_fkey;

Denken Sie daran, Constraints sorgfältig zu entfernen, da dies die Datenintegrität beeinflussen kann!

Schlussfolgerung

Glückwunsch! Sie haben gerade eine großartige Tour durch PostgreSQL Constraints gemacht. Von NOT NULL bis EXCLUSION haben Sie jetzt die Werkzeuge, um Ihre Daten sauber, konsistent und gut strukturiert zu halten. Denken Sie daran, Constraints zu verwenden, ist wie das Erstellen eines starken Fundaments für ein Haus - es mag initially mehr Aufwand erfordern, aber es spart Ihnen viel Ärger auf dem Weg.

Während Sie Ihre PostgreSQL Reise fortsetzen, experimentieren Sie weiterhin mit diesen Constraints. Versuchen Sie, sie auf verschiedene Weise zu kombinieren, und Sie werden bald in der Lage sein, robuste und zuverlässige Datenbankdesigns zu erstellen. Viel Spaß beim Einschränken!

Credits: Image by storyset