Το PostgreSQL επιβάλλει την ακεραιότητα των δεδομένων μέσω — κανόνων για τα δεδομένα του πίνακα. Πέρα από τους τυπικούς (, , , , , ), το Postgres προσθέτει ισχυρές επιλογές όπως constraints και ευέλικτες εκφράσεις .
Το PostgreSQL επιβάλλει την ακεραιότητα των δεδομένων μέσω — κανόνων για τα δεδομένα του πίνακα. Πέρα από τους τυπικούς (, , , , , ), το Postgres προσθέτει ισχυρές επιλογές όπως constraints και ευέλικτες εκφράσεις .
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
Οι CHECK constraints του Postgres μπορούν να επιβάλλουν πλούσιους κανόνες επιχειρήσεων, συμπεριλαμβανομένων συνθηκών που διασχίζουν στήλες και regex patterns.
-- 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 (ένα χαρακτηριστικό ειδικό του Postgres) εμποδίζουν γραμμές που έρχονται σε σύγκρουση από έναν προσαρμοσμένο τελεστή — περίφημα, εμποδίζουν επικαλυπτόμενα χρονικά εύρη (διπλές κρατήσεις), κάτι που ένας UNIQUE περιορισμός δεν μπορεί να κάνει.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Οι περιορισμοί είναι ουσιώδεις για την ακεραιότητα των δεδομένων — επιβάλλουν κανόνες δεδομένων στο επίπεδο της βάσης δεδομένων (η τελευταία γραμμή άμυνας, πάντα επιβάλλεται ανεξάρτητα από τον κώδικα εφαρμογής), επομένως η κατανόηση της υποστήριξης περιορισμών του PostgreSQL είναι σημαντική για το σχεδιασμό ισχυρών βάσεων δεδομένων.
Η γνώση των τυπικών περιορισμών (PRIMARY KEY, FOREIGN KEY με referential integrity, UNIQUE, NOT NULL, CHECK, DEFAULT) και αυτό που καθένας επιβάλλει είναι θεμελιώδης για το σχεδιασμό σχήματος, παρέχοντας εγγυήσεις σε επίπεδο βάσης δεδομένων (μοναδικότητα, έγκυρες αναφορές, υποχρεωτικές τιμές, έγκυρα δεδομένα) που προστατεύουν από σφάλματα, συνθήκες ανταγωνισμού και ασυνεπή δεδομένα με τρόπους που ο κώδικας εφαρμογής μόνος του δεν μπορεί.
Οι CHECK περιορισμοί του PostgreSQL είναι ιδιαίτερα ικανοί, επιβάλλοντας πλούσιους κανόνες επιχειρήσεων συμπεριλαμβανομένων συνθηκών που διασχίζουν στήλες (λογική συνέπεια όπως end_date > start_date) και ακόμη και regex patterns — σας επιτρέποντας να κωδικοποιήσετε κανόνες domain απευθείας στο σχήμα.
Ιδιαίτερα πολύτιμος είναι ο περιορισμός EXCLUDE ειδικός του Postgres, ο οποίος εμποδίζει συγκρουόμενες γραμμές από προσαρμοσμένους τελεστές — πιο αξιοσημείωτα εμποδίζει επικαλυπτόμενα χρονικά εύρη (διπλές κρατήσεις για ένα δωμάτιο/πόρο), μια ισχυρή δυνατότητα που ένας τυπικός περιορισμός UNIQUE δεν μπορεί να παρέχει και που κομψά λύνει ένα συνηθισμένο πραγματικό πρόβλημα (χρονοδιάγραμμα, κρατήσεις) στο επίπεδο της βάσης δεδομένων.
Η κατανόηση των περιορισμών — των τυπικών για ακεραιότητα, των ευέλικτων CHECK εκφράσεων του Postgres, και του ισχυρού EXCLUDE για πρόληψη συγκρούσεων — είναι σημαντική για το σχεδιασμό βάσεων δεδομένων που επιβάλλουν την ορθότητα αυτόματα.
Επειδή η ακεραιότητα των δεδομένων είναι κρίσιμη και οι περιορισμοί παρέχουν εγγυήσεις που ο κώδικας εφαρμογής δεν μπορεί, και επειδή το Postgres προσφέρει ισχυρές επιλογές (πλούσιο CHECK, EXCLUDE για επικαλύψεις) πέρα από τα βασικά, η κατανόηση της υποστήριξης περιορισμών του PostgreSQL είναι πολύτιμη, πρακτικά σχετική γνώση για την κατασκευή ισχυρών βάσεων δεδομένων, με τον περιορισμό EXCLUDE ειδικότερα να είναι ένα διακριτικό, χρήσιμο χαρακτηριστικό του Postgres αξίζοντας να το γνωρίζετε για συστήματα χρονοδιαγράμματος/κράτησης.