Το κύριο κλειδί SQL Foreign VS εξηγείται με παραδείγματα σύνταξης MySQL

Το Ξένο Κλειδί είναι ένα κλειδί που χρησιμοποιείται για τη σύνδεση δύο πινάκων. Ο πίνακας με τον περιορισμό ξένου κλειδιού (γνωστός και ως "παιδικό τραπέζι") είναι συνδεδεμένος με έναν άλλο πίνακα (γνωστός και ως "πίνακας γονέων"). Η σύνδεση είναι μεταξύ του περιορισμού ξένου κλειδιού του παιδικού πίνακα και του κύριου κλειδιού του γονικού πίνακα.

Οι περιορισμοί ξένου κλειδιού χρησιμοποιούνται για τη διατήρηση της συνοχής μεταξύ των πινάκων. Για παράδειγμα, εάν διαγραφεί μια εγγραφή γονικού πίνακα και ο θυγατρικός πίνακας έχει εγγραφές, το σύστημα θα μπορούσε επίσης να διαγράψει τις θυγατρικές εγγραφές.

Συμβάλλουν επίσης στην αποτροπή εισαγωγής ανακριβών δεδομένων στον θυγατρικό πίνακα, απαιτώντας να υπάρχει εγγραφή γονικού πίνακα για κάθε εγγραφή που έχει εισαχθεί στον θυγατρικό πίνακα.

Παράδειγμα χρήσης

Για αυτόν τον οδηγό θα ρίξουμε μια πιο προσεκτική ματιά στους πίνακες μαθητών (γονέων) και επαφών μαθητών (παιδί).

Το κύριο κλειδί του γονικού πίνακα

Σημειώστε ότι ο πίνακας μαθητών έχει ένα πρωτεύον κλειδί μιας στήλης του studentID.

SHOW index FROM student; 
+---------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +---------+------------+----------+--------------+-------------+ | student | 0 | PRIMARY | 1 | studentID | +---------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 

Τα κύρια και ξένα κλειδιά του παιδικού πίνακα

Ο πίνακας πληροφοριών επαφής μαθητή έχει ένα κύριο κλειδί που είναι επίσης το αναγνωριστικό μαθητή. Αυτό συμβαίνει επειδή υπάρχει σχέση ένας προς έναν μεταξύ των δύο πινάκων. Με άλλα λόγια, περιμένουμε μόνο έναν μαθητή και ένα αρχείο επαφής μαθητή ανά μαθητή.

SHOW index FROM `student-contact-info`; 
+----------------------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +----------------------+------------+----------+--------------+-------------+ | student-contact-info | 0 | PRIMARY | 1 | studentID | +----------------------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 
SELECT concat(table_name, '.', column_name) AS 'foreign key', concat(referenced_table_name, '.', referenced_column_name) AS 'references' FROM information_schema.key_column_usage WHERE referenced_table_name IS NOT NULL AND table_schema = 'fcc_sql_guides_database' AND table_name = 'student-contact-info'; 
+--------------------------------+-------------------+ | foreign key | references | +--------------------------------+-------------------+ | student-contact-info.studentID | student.studentID | +--------------------------------+-------------------+ 1 row in set (0.00 sec) 

Παράδειγμα αναφοράς χρησιμοποιώντας τον πίνακα γονέα μαθητή και τον πίνακα θυγατρικών επαφών

SELECT a.studentID, a.FullName, a.programOfStudy, b.`student-phone-cell`, b.`student-US-zipcode` FROM student AS a JOIN `student-contact-info` AS b ON a.studentID = b.studentID; 
+-----------+------------------------+------------------+--------------------+--------------------+ | studentID | FullName | programOfStudy | student-phone-cell | student-US-zipcode | +-----------+------------------------+------------------+--------------------+--------------------+ | 1 | Monique Davis | Literature | 555-555-5551 | 97111 | | 2 | Teri Gutierrez | Programming | 555-555-5552 | 97112 | | 3 | Spencer Pautier | Programming | 555-555-5553 | 97113 | | 4 | Louis Ramsey | Programming | 555-555-5554 | 97114 | | 5 | Alvin Greene | Programming | 555-555-5555 | 97115 | | 6 | Sophie Freeman | Programming | 555-555-5556 | 97116 | | 7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557 | 97117 | | 8 | Donald D. Chamberlin | Computer Science | 555-555-5558 | 97118 | +-----------+------------------------+------------------+--------------------+--------------------+ 

συμπέρασμα

Οι περιορισμοί ξένου κλειδιού είναι ένα εξαιρετικό εργαλείο ακεραιότητας δεδομένων. Αφιερώστε χρόνο για να τα μάθετε καλά.

Όπως με όλα αυτά τα πράγματα SQL υπάρχουν πολύ περισσότερα από αυτά που περιλαμβάνονται σε αυτόν τον εισαγωγικό οδηγό.

Ελπίζω αυτό τουλάχιστον να σας δώσει αρκετά για να ξεκινήσετε.

Ανατρέξτε στο εγχειρίδιο για τον διαχειριστή της βάσης δεδομένων σας και διασκεδάστε δοκιμάζοντας μόνοι σας διαφορετικές επιλογές.