Τα δεδομένα σας είναι καλά μόνο αν μπορείτε να τα εμπιστευτείτε. Χρησιμοποιήστε περιορισμούς βάσης δεδομένων για να διασφαλίσετε ότι είναι ακριβής, αξιόπιστη και ότι δεν παραβιάζει το μοντέλο δεδομένων σας.
Βασικά Takeaways
- Χρησιμοποιήστε περιορισμούς SQL για να διατηρήσετε την ακεραιότητα των δεδομένων και να εξασφαλίσετε ομοιομορφία στη βάση δεδομένων σας. Ο περιορισμός NOT NULL αναγκάζει τις στήλες να απορρίψουν τιμές NULL.
- Εφαρμόστε περιορισμούς πρωτεύοντος κλειδιού για να διασφαλίσετε τη μοναδικότητα των τιμών σε μια στήλη ή ένα σύνολο στηλών. Αυτό αποτρέπει τις διπλές εγγραφές σε έναν πίνακα βάσης δεδομένων.
- Οι ξένοι βασικοί περιορισμοί δημιουργούν σχέσεις μεταξύ των πινάκων και αποτρέπουν ενέργειες που θα κατέστρεφαν τους δεσμούς μεταξύ τους. Διασφαλίζουν ότι μια εγγραφή στον θυγατρικό πίνακα αναφέρεται στον γονικό πίνακα.
Μια βάση δεδομένων είναι απαραίτητη για πολλές εφαρμογές, αλλά μπορεί να γίνει ακατάστατη εάν δεν έχετε οδηγίες για την αποθήκευση και την επεξεργασία δεδομένων.
Οι περιορισμοί SQL καθορίζουν κανόνες για την αποθήκευση δεδομένων σε έναν πίνακα. Όταν ορίζετε περιορισμούς, η βάση δεδομένων θα εμφανίσει ένα σφάλμα εάν προσπαθήσετε να αποθηκεύσετε δεδομένα που παραβιάζουν αυτούς τους κανόνες. Οι περιορισμοί συμβάλλουν στη διατήρηση της ακεραιότητας των δεδομένων και διασφαλίζουν την ομοιομορφία στη βάση δεδομένων σας.
Υπάρχουν διάφοροι τύποι περιορισμών SQL που μπορείτε να χρησιμοποιήσετε. εδώ είναι μερικά από τα πιο χρήσιμα.
1. NOT NULL Περιορισμός
Οι στήλες της βάσης δεδομένων, από προεπιλογή, δέχονται δεδομένα με τιμές NULL. NULL ουσιαστικά σημαίνει ότι δεν υπάρχει τιμή. Ο περιορισμός NOT NULL αναγκάζει μια στήλη να απορρίψει τιμές NULL.
Αυτός ο περιορισμός διασφαλίζει ότι κάθε στήλη πρέπει να περιέχει μια τιμή. Δεν μπορείτε να προσθέσετε μια εγγραφή στη βάση δεδομένων χωρίς την παροχή δεδομένων για στήλες με τον περιορισμό NOT NULL.
Πάρτε το παράδειγμα του α Οι πελάτες τραπέζι. Υπάρχουν κάποιες απαραίτητες λεπτομέρειες για κάθε πελάτη που θέλετε να καταγραφούν, όπως το όνομά του. Προσθέστε τον περιορισμό NOT NULL στα υποχρεωτικά πεδία για να διασφαλίσετε ότι οι πελάτες παρέχουν αυτές τις πληροφορίες.
Ακολουθεί ένα παράδειγμα που δείχνει πώς μπορείτε να χρησιμοποιήσετε τον περιορισμό NOT NULL στο a Βάση δεδομένων PostgreSQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Εάν προσπαθήσετε να εισαγάγετε μια εγγραφή πελάτη χωρίς το Ηλικία πεδίο, η βάση δεδομένων θα το αποδεχτεί χωρίς σφάλματα:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Ωστόσο, εάν προσπαθήσετε να εισαγάγετε μια εγγραφή χωρίς το Ονομα πεδίο, η βάση δεδομένων θα το απορρίψει με ένα μήνυμα σφάλματος:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. Περιορισμός ΠΡΩΤΕΥΟΥ ΚΛΕΙΔΙΟΥ
Το KEY είναι ένα μοναδικό χαρακτηριστικό που έχει οριστεί σε μια στήλη ή ένα πεδίο που προσδιορίζει την πλειάδα ενός πίνακα (ή μια εγγραφή) σε συστήματα βάσης δεδομένων. Ένας περιορισμός ΠΡΩΤΕΥΝΟΥ ΚΛΕΙΔΙΟΥ διασφαλίζει τη μοναδικότητα των τιμών σε μια στήλη ή ένα σύνολο στηλών. Λειτουργεί ως μοναδικό αναγνωριστικό στη σειρά, αποτρέποντας διπλές εγγραφές σε έναν πίνακα βάσης δεδομένων.
Τα πρωτεύοντα κλειδιά περιέχουν μοναδικές τιμές και δεν μπορούν να περιέχουν NULL τιμές. Καθε Πίνακας βάσης δεδομένων SQL πρέπει να έχει μόνο ένα πρωτεύον κλειδί. Το ΚΥΡΙΟ ΚΛΕΙΔΙ μπορεί να έχει μονή ή πολλές στήλες.
Για παράδειγμα, δημιουργείτε μια βάση δεδομένων με αρχεία πελατών. Πρέπει κάθε πελάτης να εισάγει τους αριθμούς ταυτότητάς του διαφορετικά από όλους τους άλλους. Μπορείτε να εφαρμόσετε τον περιορισμό του πρωτεύοντος κλειδιού για να διασφαλίσετε ότι κανένας από τους πελάτες σας δεν έχει τον ίδιο αριθμό αναγνωριστικού.
Ο παρακάτω κώδικας δείχνει πώς μπορείτε να εισάγετε έναν περιορισμό πρωτεύοντος κλειδιού σε μια βάση δεδομένων MySQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Η βάση δεδομένων δεν θα αποδεχτεί αυτήν την τιμή εάν ένας χρήστης εισάγει άλλη εγγραφή με παρόμοιο αναγνωριστικό. Αντίθετα, θα εμφανίσει ένα σφάλμα που υποδεικνύει διπλότυπο. Ο χρήστης προσπαθεί να εισαγάγει δύο εγγραφές με το ίδιο αναγνωριστικό στο ακόλουθο παράδειγμα:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Η βάση δεδομένων θα εμφανίσει ένα μήνυμα σφάλματος:
Duplicate entry '1' for key 'PRIMARY'
Αλλά αν αλλάξετε το αναγνωριστικό του δεύτερου πελάτη, η βάση δεδομένων δέχεται την καταχώρηση. Επομένως, το πρωτεύον κλειδί διασφαλίζει ότι δεν υπάρχουν διπλότυπα αναγνωριστικά στα αρχεία πελατών σας.
3. Περιορισμός ΕΞΩΤΕΡΙΚΟΥ ΚΛΕΙΔΙΟΥ
Ξένα κλειδιά να δημιουργήσετε σχέσεις μεταξύ δύο πινάκων. Μπορείτε να προσθέσετε ένα ξένο κλειδί σε ένα πεδίο/στήλη σε έναν πίνακα που αναφέρεται στο πρωτεύον κλειδί σε έναν άλλο πίνακα.
Ο πίνακας με το πρωτεύον κλειδί είναι ο γονικός πίνακας, ενώ ο πίνακας με το ξένο κλειδί είναι ο θυγατρικός πίνακας. Μια εγγραφή δεν μπορεί τότε να υπάρχει στον θυγατρικό πίνακα χωρίς αναφορά στον γονικό πίνακα.
Ο περιορισμός ξένου κλειδιού αποτρέπει ενέργειες που θα μπορούσαν να καταστρέψουν συνδέσμους μεταξύ πινάκων. Για παράδειγμα, δεν μπορείτε ΠΤΩΣΗ ένας πίνακας εάν συνδέεται με έναν άλλο με ξένο κλειδί. Θα πρέπει να ρίξετε και τα δύο τραπέζια ταυτόχρονα.
Σε αντίθεση με ένα πρωτεύον κλειδί, μπορείτε να αντιγράψετε ένα ξένο κλειδί και να έχετε περισσότερα από ένα σε έναν πίνακα. Οι ξένες βασικές τιμές μπορούν επίσης να είναι ΜΗΔΕΝΙΚΟ. Στο παρακάτω παράδειγμα, πρέπει να χρησιμοποιήσετε το Κωδικός πελάτη για να δημιουργήσετε μια παραγγελία.
CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');
INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');
Εάν προσπαθήσετε να δημιουργήσετε μια παραγγελία χωρίς να υπάρχει Κωδικός πελάτη, η βάση δεδομένων εμφανίζει ένα μήνυμα σφάλματος:
Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))
4. Μοναδικός περιορισμός
Αυτός ο περιορισμός διασφαλίζει ότι καμία δύο σειρές δεν μπορούν να έχουν τις ίδιες τιμές για μια συγκεκριμένη στήλη. Όπως τα κύρια κλειδιά, ένας μοναδικός περιορισμός διατηρεί την ακεραιότητα των δεδομένων και αποτρέπει τις διπλές καταχωρήσεις. Εάν εργάζεστε με μια κακώς σχεδιασμένη βάση δεδομένων χωρίς τον περιορισμό ΜΟΝΑΔΙΚΟΣ, μπορεί να καταλήξετε να το κάνετε βρείτε και διαγράψτε τα διπλότυπα.
Σε αντίθεση με τα κύρια κλειδιά, μπορείτε να έχετε πολλούς ΜΟΝΑΔΙΚΟΥΣ περιορισμούς σε έναν πίνακα. Για παράδειγμα, όταν δημιουργείτε ένα Οι πελάτες πίνακα, μπορεί να θέλετε να έχετε μοναδικά αναγνωριστικά και αριθμούς τηλεφώνου. Για να προσθέσετε έναν τέτοιο περιορισμό χρησιμοποιώντας τον διακομιστή MySQL, χρησιμοποιήστε αυτήν τη σύνταξη:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Εάν εισαγάγετε εγγραφές με τον ίδιο αριθμό κινητού στη βάση δεδομένων, θα εμφανιστεί ένα μήνυμα σφάλματος.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Το μήνυμα σφάλματος θα είναι κάπως έτσι:
Duplicate entry '254000000' for key 'Mobile_No'
Αυτός ο ΜΟΝΑΔΙΚΟς περιορισμός διασφαλίζει ότι η βάση δεδομένων δεν θα έχει πελάτες με τα ίδια αναγνωριστικά ή αριθμούς κινητού τηλεφώνου.
5. Ελέγξτε τον περιορισμό
Ο περιορισμός CHECK περιορίζει το εύρος τιμών που τοποθετείται σε μια στήλη. Η προσθήκη ενός περιορισμού CHECK σε μια στήλη θα επιτρέψει μόνο καθορισμένες τιμές για αυτήν τη στήλη. Επιβάλλει την ακεραιότητα των δεδομένων διασφαλίζοντας ότι ένας χρήστης εισάγει μόνο έγκυρα δεδομένα σε έναν πίνακα.
Ο περιορισμός CHECK πρέπει να αξιολογήσει μια τιμή ως TRUE ή ΑΓΝΩΣΤΗ για κάθε καθορισμένη γραμμή ή καταχώρηση πίνακα. Εάν η τιμή είναι FALSE, η βάση δεδομένων εμφανίζει ένα μήνυμα σφάλματος.
Για παράδειγμα, στον πίνακα Πελάτες, μπορεί να θέλετε να εξυπηρετείτε μόνο πελάτες άνω των 18 ετών. Μπορείτε να προσθέσετε έναν περιορισμό CHECK για να διασφαλίσετε ότι δεν εξυπηρετείτε ανήλικους πελάτες. Μπορείτε να προσθέσετε τον περιορισμό σε μια βάση δεδομένων PostgreSQL, όπως φαίνεται στον ακόλουθο κώδικα:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Τώρα, αν προσπαθήσετε να εισαγάγετε την ηλικία ενός πελάτη κάτω των 18 ετών:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Η βάση δεδομένων θα εμφανίσει ένα μήνυμα σφάλματος όπως αυτό:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Πώς να προσθέσετε και να αφαιρέσετε περιορισμούς SQL από βάσεις δεδομένων
Οι περιορισμοί της SQL δεν είναι αποφασισμένοι. Μπορείτε να προσθέσετε ή να αφαιρέσετε περιορισμούς σε υπάρχοντες πίνακες χρησιμοποιώντας τη δήλωση ALTER TABLE. Η δήλωση ALTER σάς επιτρέπει να εργάζεστε με περιορισμούς που ταιριάζουν στις ανάγκες δεδομένων σας.
Υπάρχουν πολλοί περισσότεροι περιορισμοί SQL που μπορείτε να μάθετε να σχεδιάζετε μια βάση δεδομένων σύμφωνα με τις προτιμήσεις σας. Μπορείτε να ξεκινήσετε με αυτά που αναφέρονται σε αυτό το άρθρο.