Ξένο Κλειδί SQL Server: Πώς να δημιουργήσετε με παράδειγμα
⚡ Έξυπνη Σύνοψη
Ένα ξένο κλειδί στον SQL Server επιβάλλει την ακεραιότητα αναφορών συνδέοντας έναν θυγατρικό πίνακα με έναν γονικό πίνακα. Κάθε τιμή ξένου κλειδιού πρέπει να υπάρχει ήδη στο αναφερόμενο πρωτεύον κλειδί του γονικού πίνακα.

Τι είναι το Ξένο ΚΛΕΙΔΙ;
Ένα ξένο κλειδί παρέχει έναν τρόπο επιβολής της ακεραιότητας αναφοράς εντός Ο SQL ServerΜε απλά λόγια, ένα ξένο κλειδί διασφαλίζει ότι οι τιμές σε έναν πίνακα πρέπει να υπάρχουν και σε έναν άλλο πίνακα.
Κανόνες για ΞΕΝΟ ΚΛΕΙΔΙ
- Η τιμή NULL επιτρέπεται σε ένα ξένο κλειδί SQL.
- Ο πίνακας στον οποίο γίνεται αναφορά ονομάζεται γονικός πίνακας.
- Ο πίνακας με το ξένο κλειδί ονομάζεται θυγατρικός πίνακας.
- Το ξένο κλειδί στον θυγατρικό πίνακα αναφέρεται στο πρωτεύων κλειδί στον γονικό πίνακα.
- Αυτή η σχέση γονέα-παιδιού επιβάλλει τον κανόνα που είναι γνωστός ως «αναφορική ακεραιότητα».
Το παρακάτω διάγραμμα συνοψίζει όλα τα παραπάνω σημεία για το ξένο κλειδί.
Πώς να δημιουργήσετε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL
Μπορείτε να δημιουργήσετε ένα ξένο κλειδί στον SQL Server με δύο τρόπους:
Στούντιο διαχείρισης διακομιστή SQL
Γονικός Πίνακας: Ας υποθέσουμε ότι έχουμε έναν υπάρχοντα γονικό πίνακα με το όνομα 'Course'. Τα Course_ID και Course_name είναι δύο στήλες, με το Course_Id ως το πρωτεύον κλειδί.
Θυγατρικός Πίνακας: Πρέπει να δημιουργήσουμε τον δεύτερο πίνακα ως θυγατρικό πίνακα. Οι δύο στήλες του είναι 'Course_ID' και 'Course_Strength'. Ωστόσο, το 'Course_ID' θα είναι το ξένο κλειδί.
Βήμα 1) Κάντε δεξί κλικ στους Πίνακες > Νέος > Πίνακας…
Βήμα 2) Εισαγάγετε δύο ονόματα στηλών ως 'Course_ID' και 'Course_Strength'. Κάντε δεξί κλικ στη στήλη 'Course_Id' και, στη συνέχεια, κάντε κλικ στην επιλογή Σχέση.
Βήμα 3) Στις «Σχέσεις Ξένου Κλειδιού», κάντε κλικ στην επιλογή «Προσθήκη».
Βήμα 4) Στην ενότητα «Προδιαγραφές πινάκων και στηλών», κάντε κλικ στο εικονίδιο «…».
Βήμα 5) Επιλέξτε τον «Πίνακα Πρωτεύοντος Κλειδιού» ως «ΜΑΘΗΜΑ» και τον νέο πίνακα που δημιουργείται ως «Πίνακα Ξένων Κλειδιών» από το αναπτυσσόμενο μενού.
Βήμα 6) Για τον «Πίνακα Πρωτεύοντος Κλειδιού», επιλέξτε τη στήλη «Course_Id» ως τη στήλη του πίνακα πρωτεύοντος κλειδιού.
Για τον «Πίνακα ξένων κλειδιών», επιλέξτε τη στήλη «Course_Id» ως τη στήλη του πίνακα ξένων κλειδιών. Κάντε κλικ στο OK.
Βήμα 7) Κάντε κλικ στην επιλογή Προσθήκη.
Βήμα 8) Δώστε στον πίνακα το όνομα 'Course_Strength' και κάντε κλικ στο OK.
Αποτέλεσμα: Έχουμε ορίσει μια σχέση γονέα-θυγατρικού μεταξύ των 'Course' και 'Course_Strength'.
T-SQL: Δημιουργία πίνακα γονέα-θυγατρικού χρησιμοποιώντας την T-SQL
Γονικός Πίνακας: Επαναλάβετε το ενδεχόμενο να έχουμε έναν υπάρχοντα γονικό πίνακα με το όνομα 'Course'. Τα Course_ID και Course_name είναι δύο στήλες, με το Course_Id ως το πρωτεύον κλειδί.
Θυγατρικός Πίνακας: Πρέπει να δημιουργήσουμε τον δεύτερο πίνακα ως θυγατρικό πίνακα με το όνομα 'Course_Strength_TSQL'. Οι δύο στήλες του είναι 'Course_ID' και 'Course_Strength'. Ωστόσο, το 'Course_ID' θα είναι το ξένο κλειδί.
Παρακάτω είναι η σύνταξη για δημιουργήστε έναν πίνακα με ΞΕΝΙΚΟ ΚΛΕΙΔΙ.
Σύνταξη:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Ακολουθεί μια περιγραφή των παραπάνω παραμέτρων:
- childTable είναι το όνομα του πίνακα που πρόκειται να δημιουργηθεί.
- Οι στήλες column_1, column_2 είναι οι στήλες που θα προστεθούν στον πίνακα.
- Το fkey_name είναι το όνομα του περιορισμού ξένου κλειδιού που θα δημιουργηθεί.
- child_column1, child_column2 … child_column_n είναι οι θυγατρικές στήλες του πίνακα που αναφέρονται στο πρωτεύον κλειδί στον γονικό πίνακα.
- Το parentTable είναι το όνομα του γονικού πίνακα του οποίου το κλειδί αναφέρεται στον θυγατρικό πίνακα.
- parent_column1, parent_column2 … parent_column_n είναι οι στήλες που αποτελούν το πρωτεύον κλειδί του γονικού πίνακα.
- Η παράμετρος ON DELETE είναι μια προαιρετική παράμετρος που καθορίζει τι συμβαίνει στα θυγατρικά δεδομένα μετά τη διαγραφή των γονικών δεδομένων. Οι τιμές περιλαμβάνουν NO ACTION, SET NULL, CASCADE ή SET DEFAULT.
- Η παράμετρος ON UPDATE είναι μια προαιρετική παράμετρος που καθορίζει τι συμβαίνει στα θυγατρικά δεδομένα μετά την ενημέρωση των γονικών δεδομένων. Οι τιμές περιλαμβάνουν NO ACTION, SET NULL, CASCADE ή SET DEFAULT.
- Η ένδειξη ΚΑΜΙΑ ΕΝΕΡΓΕΙΑ σημαίνει ότι δεν συμβαίνει τίποτα στα δεδομένα του παιδιού μετά την ενημέρωση ή τη διαγραφή των δεδομένων του γονέα.
- Το CASCADE σημαίνει ότι τα θυγατρικά δεδομένα διαγράφονται ή ενημερώνονται μετά τη διαγραφή ή την ενημέρωση των γονικών δεδομένων.
- Η τιμή SET NULL σημαίνει ότι τα θυγατρικά δεδομένα ορίζονται σε null μετά την ενημέρωση ή τη διαγραφή των γονικών δεδομένων.
- Η επιλογή SET DEFAULT (ΟΡΙΣΜΟΣ ΠΡΟΕΠΙΛΟΓΗΣ) σημαίνει ότι τα θυγατρικά δεδομένα ορίζονται στην προεπιλεγμένη τιμή τους μετά από μια ενημέρωση ή διαγραφή των γονικών δεδομένων.
Ας δούμε ένα παράδειγμα ξένου κλειδιού που δημιουργεί έναν πίνακα με μία στήλη ως ΞΕΝΟ ΚΛΕΙΔΙ, χρησιμοποιώντας ένα Τύπος δεδομένων για κάθε στήλη.
Παράδειγμα ξένου κλειδιού σε SQL
Ερώτηση:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Βήμα 1) Εκτελέστε το ερώτημα κάνοντας κλικ στην επιλογή Εκτέλεση.
Αποτέλεσμα: Έχουμε ορίσει μια σχέση γονέα-θυγατρικού μεταξύ των 'Course' και 'Course_Strength_TSQL'.
Χρήση ALTER TABLE
Τώρα θα μάθουμε πώς να προσθέσουμε ένα ξένο κλειδί στον SQL Server σε έναν πίνακα που υπάρχει ήδη χρησιμοποιώντας την εντολή ALTER TABLE. Θα χρησιμοποιήσουμε την παρακάτω σύνταξη:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Ακολουθεί μια περιγραφή των παραμέτρων που χρησιμοποιήθηκαν παραπάνω:
- childTable είναι το όνομα του πίνακα που πρόκειται να δημιουργηθεί.
- Οι στήλες column_1, column_2 είναι οι στήλες που θα προστεθούν στον πίνακα.
- Το fkey_name είναι το όνομα του περιορισμού ξένου κλειδιού που θα δημιουργηθεί.
- child_column1, child_column2 … child_column_n είναι οι θυγατρικές στήλες του πίνακα που αναφέρονται στο πρωτεύον κλειδί στον γονικό πίνακα.
- Το parentTable είναι το όνομα του γονικού πίνακα του οποίου το κλειδί αναφέρεται στον θυγατρικό πίνακα.
- parent_column1, parent_column2 … parent_column_n είναι οι στήλες που αποτελούν το πρωτεύον κλειδί του γονικού πίνακα.
Παράδειγμα προσθήκης ξένου κλειδιού ALTER TABLE:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Έχουμε δημιουργήσει ένα ξένο κλειδί με το όνομα fkey_student_admission στον πίνακα του τμήματος. Αυτό το ξένο κλειδί αναφέρεται στη στήλη αποδοχής του πίνακα μαθητών.
Παράδειγμα ερωτήματος Ξένο ΚΛΕΙΔΙ
Αρχικά, ας δούμε τα δεδομένα του γονικού μας πίνακα, COURSE.
Ερώτηση:
SELECT * from COURSE;
Τώρα ας εισαγάγουμε μερικές γραμμές στον θυγατρικό πίνακα 'Course_Strength_TSQL'. Θα προσπαθήσουμε να εισαγάγουμε δύο τύπους γραμμών:
- Ο πρώτος τύπος, για τον οποίο το Course_Id στον θυγατρικό πίνακα υπάρχει στο Course_Id του γονικού πίνακα, δηλαδή, Course_Id = 1 και 2.
- Ο δεύτερος τύπος, για τον οποίο το Course_Id στον θυγατρικό πίνακα δεν υπάρχει στο Course_Id του γονικού πίνακα, δηλαδή, Course_Id = 5.
Ερώτηση:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Αποτέλεσμα: Ας εκτελέσουμε το ερώτημα μαζί για να δούμε τους γονικούς και τους θυγατρικούς πίνακες μας.
Οι γραμμές με Course_ID 1 και 2 υπάρχουν στον πίνακα Course_Strength. Το Course_ID 5, ωστόσο, αποτελεί εξαίρεση, επειδή δεν έχει αντίστοιχη γραμμή στον γονικό πίνακα.

















