PostgreSQL erzwingt Datenintegrität durch Constraints — Regeln für Tabellendaten. Neben den standardmäßigen Constraints (, , , , , ) bietet Postgres leistungsstarke Optionen wie -Constraints und flexible -Ausdrücke.
PostgreSQL erzwingt Datenintegrität durch Constraints — Regeln für Tabellendaten. Neben den standardmäßigen Constraints (, , , , , ) bietet Postgres leistungsstarke Optionen wie -Constraints und flexible -Ausdrücke.
PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECKDEFAULTCHECKCREATE TABLE bookings (
id SERIAL PRIMARY KEY, -- unique identifier
room_id INT NOT NULL REFERENCES rooms(id), -- foreign key (referential integrity)
email VARCHAR(255) UNIQUE NOT NULL, -- unique + required
guests INT CHECK (guests > 0 AND guests <= 10), -- value constraint
status TEXT DEFAULT 'pending' -- default value
);
PRIMARY KEY → unique row identifier
FOREIGN KEY → references another table (referential integrity, with ON DELETE options)
UNIQUE → no duplicate values
NOT NULL → must have a value
CHECK → value must satisfy a condition
DEFAULT → default value when not provided
CHECK (price > 0)
CHECK (end_date > start_date) -- logical consistency between columns
CHECK (status IN ('active', 'inactive', 'pending'))
CHECK (email ~ '^[^@]+@[^@]+\.[^@]+$') -- regex validation
Postgres CHECK-Constraints können umfangreiche Geschäftsregeln erzwingen, einschließlich spaltenübergreifender Bedingungen und Regex-Mustern.
-- prevent OVERLAPPING bookings for the same room (impossible with UNIQUE alone!)
CREATE TABLE bookings (
room_id INT,
during TSRANGE, -- a time range
EXCLUDE USING GIST (room_id WITH =, during WITH &&) -- no two rows where room_id is
); -- equal AND time ranges OVERLAP
EXCLUDE-Constraints (ein Postgres-spezifisches Feature) verhindern Zeilen, die nach einem benutzerdefinierten Operator in Konflikt stehen — besonders bekannt dafür, dass sie überlappende Zeitbereiche verhindern (Doppelbuchungen), was ein UNIQUE-Constraint nicht kann.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Constraints sind wesentlich für Datenintegrität — sie erzwingen Datenregeln auf Datenbankebene (die letzte Verteidigungslinie, immer erzwungen, unabhängig vom Anwendungscode), daher ist das Verständnis der Constraint-Unterstützung von PostgreSQL wichtig für die Gestaltung robuster Datenbanken.
Kenntnis der Standard-Constraints (PRIMARY KEY, FOREIGN KEY mit referenzieller Integrität, UNIQUE, NOT NULL, CHECK, DEFAULT) und was jedes erzwingt, ist grundlegend für das Schema-Design und bietet Datenbankebene-Garantien (Eindeutigkeit, gültige Referenzen, erforderliche Werte, gültige Daten), die vor Bugs, Race Conditions und inkonsistenten Daten auf Weise schützen, die nur der Anwendungscode nicht kann.
Postgres CHECK-Constraints sind besonders leistungsfähig und erzwingen umfangreiche Geschäftsregeln, einschließlich spaltenübergreifender Bedingungen (logische Konsistenz wie end_date > start_date) und sogar Regex-Mustern — ermöglichend es Ihnen, Geschäftsregeln direkt im Schema zu codieren.
Besonders wertvoll ist das Postgres-spezifische EXCLUDE-Constraint, das Konflikt-Zeilen nach benutzerdefinierten Operatoren verhindert — besonders überlappende Zeitbereiche verhindernd (Doppelbuchungen für einen Raum/eine Ressource), eine leistungsstarke Fähigkeit, die ein Standard-UNIQUE-Constraint nicht bereitstellen kann und die elegant ein verbreitetes reales Problem (Planung, Reservierungen) auf Datenbankebene löst.
Verständnis der Constraints — die Standard-Constraints für Integrität, Postgres's flexible CHECK-Ausdrücke und das leistungsstarke EXCLUDE zur Konflikt-Vermeidung — ist wichtig für die Gestaltung von Datenbanken, die Korrektheit automatisch erzwingen.
Da Datenintegrität kritisch ist und Constraints Garantien bieten, die der Anwendungscode nicht kann, und da Postgres leistungsstarke Optionen bietet (reiche CHECK, EXCLUDE für Überlappungen) über die Grundlagen hinaus, ist Verständnis der Constraint-Unterstützung von PostgreSQL wertvoll, praktisch relevantes Wissen zum Aufbau robuster Datenbanken, wobei das EXCLUDE-Constraint insbesondere eine charakteristische, nützliche Postgres-Fähigkeit ist, die für Planungs-/Reservierungssysteme worth knowing ist.