Τα ξένα κλειδιά επιτρέπουν στους διαχειριστές βάσεων δεδομένων να αναγνωρίζουν εύκολα τις διαφορετικές συνδέσεις που υπάρχουν σε ένα σύστημα διαχείρισης βάσης δεδομένων SQL.
Η SQL εκτελεί μαθηματικές λειτουργίες δεδομένων σε ένα σύστημα διαχείρισης βάσεων δεδομένων. Αυτές οι βάσεις δεδομένων περιέχουν διαφορετικούς πίνακες που κάθε αποθηκεύει δεδομένα σε μια συγκεκριμένη οντότητα. Εάν έχετε μια βάση δεδομένων ενοικίασης αυτοκινήτων, μια οντότητα (ή πίνακας) σε αυτήν τη βάση δεδομένων θα είναι πελάτες (η οποία θα αποθηκεύει όλα τα προσωπικά δεδομένα σε κάθε πελάτη).
Αυτοί οι πίνακες βάσης δεδομένων περιέχουν σειρές και στήλες, όπου κάθε σειρά φιλοξενεί μια εγγραφή και κάθε στήλη διατηρεί δεδομένα για συγκεκριμένα χαρακτηριστικά.
Σε ένα σύστημα διαχείρισης βάσης δεδομένων, κάθε εγγραφή (ή σειρά) πρέπει να είναι μοναδική.
Κύρια κλειδιά
Αν και η προϋπόθεση είναι ότι κάθε εγγραφή σε έναν πίνακα πρέπει να είναι ξεχωριστή, αυτό δεν συμβαίνει πάντα. Συνεχίζοντας το παράδειγμα βάσης δεδομένων ενοικίασης αυτοκινήτων, εάν η βάση δεδομένων περιέχει δύο πελάτες που ο καθένας να έχει το όνομα "John Brown", ένας Τζον Μπράουν αναμένεται να επιστρέψει μια Mercedes-Benz που δεν το έκανε ενοίκιο.
Η δημιουργία ενός πρωτεύοντος κλειδιού θα μετριάσει αυτόν τον κίνδυνο. Σε ένα σύστημα διαχείρισης βάσης δεδομένων SQL, ένα πρωτεύον κλειδί είναι ένα μοναδικό αναγνωριστικό που διακρίνει τη μία εγγραφή από την άλλη.
Επομένως, κάθε εγγραφή σε ένα σύστημα διαχείρισης βάσης δεδομένων SQL πρέπει να έχει ένα πρωτεύον κλειδί.
Χρήση κύριων κλειδιών σε μια βάση δεδομένων
Για να συμπεριλάβετε πρωτεύοντα κλειδιά σε ένα σύστημα διαχείρισης βάσης δεδομένων χρησιμοποιώντας SQL, μπορείτε απλώς να το προσθέσετε ως κανονικό χαρακτηριστικό κατά τη δημιουργία ενός νέου πίνακα. Έτσι, ο πίνακας των πελατών θα περιέχει τέσσερα χαρακτηριστικά (ή στήλες):
- CarOwnerID (το οποίο θα αποθηκεύσει το κύριο κλειδί)
- Ονομα
- Επίθετο
- Τηλεφωνικό νούμερο
Σχετιζομαι με: Πώς να δημιουργήσετε έναν πίνακα σε SQL
Τώρα κάθε εγγραφή πελάτη που εισέρχεται στη βάση δεδομένων θα έχει έναν μοναδικό αριθμό αναγνώρισης, καθώς και ένα όνομα, επώνυμο και αριθμό τηλεφώνου. Ο αριθμός τηλεφώνου δεν είναι αρκετά μοναδικός για να είναι το κύριο κλειδί, επειδή παρόλο που είναι μοναδικό για ένα άτομο κάθε φορά, ένα άτομο μπορεί εύκολα να αλλάξει τον αριθμό του, πράγμα που σημαίνει ότι θα ανήκει πλέον σε κάποιον άλλο.
Ένα αρχείο με ένα πρωτεύον βασικό παράδειγμα
/ * δημιουργεί μια νέα εγγραφή στον πίνακα πελατών * /
ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΤΙΜΕΣ ΤΩΝ Πελατών
('0004',
'Γιάννης',
'Καφέ',
'111-999-5555');
Ο παραπάνω κώδικας SQL θα προσθέσει μια νέα εγγραφή στο προϋπάρχον Οι πελάτες τραπέζι. Ο παρακάτω πίνακας δείχνει τον πίνακα νέων πελατών με τις δύο εγγραφές του John Brown.
Το ξένο κλειδί
Τώρα έχετε πρωτεύοντα κλειδιά που διακρίνουν μοναδικά ένα ενοικιαζόμενο αυτοκίνητο από το άλλο. Το μόνο πρόβλημα είναι ότι, στη βάση δεδομένων, δεν υπάρχει πραγματική σύνδεση μεταξύ κάθε John Brown και του αυτοκινήτου που ενοικιάζει.
Επομένως, εξακολουθεί να υπάρχει η πιθανότητα να κάνουμε λάθος. Εδώ παίζουν τα ξένα κλειδιά. Η χρήση ενός πρωτεύοντος κλειδιού για την επίλυση του προβλήματος της αμφιβολίας ιδιοκτησίας είναι εφικτή μόνο εάν το πρωτεύον κλειδί διπλασιάζεται ως ξένο κλειδί.
Τι είναι ένα ξένο κλειδί;
Σε ένα σύστημα διαχείρισης βάσης δεδομένων SQL, ένα ξένο κλειδί είναι ένα μοναδικό αναγνωριστικό ή ένας συνδυασμός μοναδικών αναγνωριστικών που συνδέουν δύο ή περισσότερους πίνακες σε μια βάση δεδομένων.
Από τα τέσσερα συστήματα διαχείρισης βάσεων δεδομένων SQL που υπάρχουν, το σχεσιακό σύστημα διαχείρισης βάσεων δεδομένων είναι το πιο δημοφιλές. Όταν αποφασίζετε ποιος πίνακας σε μια σχεσιακή βάση δεδομένων θα πρέπει να έχει ξένο κλειδί, πρέπει πρώτα να προσδιορίσετε ποιος πίνακας είναι το θέμα και ποιο είναι το αντικείμενο στη σχέση τους.
Επιστρέφοντας στη βάση δεδομένων ενοικίασης αυτοκινήτων, για να συνδέσετε κάθε πελάτη με το σωστό αυτοκίνητο, θα πρέπει να καταλάβετε ότι ένας πελάτης (το θέμα) νοικιάζει ένα αυτοκίνητο (το αντικείμενο). Επομένως, το ξένο κλειδί πρέπει να βρίσκεται στον πίνακα αυτοκινήτων.
Ο κωδικός SQL που δημιουργεί έναν πίνακα με ξένο κλειδί είναι ελαφρώς διαφορετικός από τον κανόνα.
Δημιουργία πίνακα με παράδειγμα ξένου κλειδιού
/ * δημιουργεί έναν νέο πίνακα αυτοκινήτων στη βάση δεδομένων ενοικίασης αυτοκινήτων * /
ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ Αυτοκινήτων
(
LicenseNumber varchar (30) ΔΕΝ NULL PRIMARY KEY,
CarType varchar (30) ΔΕΝ NULL,
CustomerID varchar (30) ΕΞΩΤΕΡΙΚΕΣ ΒΑΣΙΚΕΣ ΑΝΑΦΟΡΕΣ Πελάτες (CustomerID)
);
Όπως μπορείτε να δείτε στον παραπάνω κώδικα, ένα ξένο κλειδί πρέπει να προσδιορίζεται ρητά ως τέτοιο, μαζί με μια αναφορά στο πρωτεύον κλειδί που συνδέεται με τον νέο πίνακα.
Σχετιζομαι με: Το Essential SQL διατάζει το Cheat Sheet για αρχάριους
Για να προσθέσετε μια εγγραφή στο νέο πίνακα, θα πρέπει να βεβαιωθείτε ότι η τιμή στο πεδίο ξένου κλειδιού ταιριάζει με την τιμή στο πεδίο πρωτεύοντος κλειδιού του αρχικού πίνακα.
Προσθήκη αρχείου με παράδειγμα ξένου κλειδιού
/ * δημιουργεί ένα νέο ρεκόρ στον πίνακα αυτοκινήτων * /
ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΞΙΕΣ Αυτοκινήτων
('100012',
«Mercedes-Benz»,
'0004');
Ο παραπάνω κωδικός δημιουργεί μια νέα εγγραφή στο νέο Αυτοκίνητα πίνακα, παράγοντας το ακόλουθο αποτέλεσμα.
Πίνακας αυτοκινήτων
Από τον παραπάνω πίνακα, μπορείτε να προσδιορίσετε τον σωστό John Brown που νοικιάζει μια Mercedes-Benz από το ξένο κλειδί στην εγγραφή.
Προώθηση ξένων κλειδιών
Υπάρχουν δύο άλλοι τρόποι για να χρησιμοποιήσετε ένα ξένο κλειδί σε μια βάση δεδομένων.
Αν κοιτάξετε πίσω τον ορισμό ενός ξένου κλειδιού παραπάνω, θα διαπιστώσετε ότι λέει ότι ένα ξένο κλειδί μπορεί να είναι ένα μοναδικό αναγνωριστικό ή ένας συνδυασμός μοναδικών αναγνωριστικών.
Επιστρέφοντας στο παράδειγμα της βάσης δεδομένων ενοικίασης αυτοκινήτων, θα δείτε ότι η δημιουργία μιας νέας εγγραφής (του ίδιου αυτοκινήτου) κάθε φορά που ένας πελάτης ενοικιάζει αυτό το αυτοκίνητο, νικά τον σκοπό Αυτοκίνητα τραπέζι. Εάν τα αυτοκίνητα είναι προς πώληση και πωλούνται σε έναν πελάτη μία φορά, η υπάρχουσα βάση δεδομένων είναι τέλεια. αλλά δεδομένου ότι τα αυτοκίνητα είναι ενοικιάσεις, υπάρχει ένας καλύτερος τρόπος για να αντιπροσωπεύσουμε αυτά τα δεδομένα.
Σύνθετα κλειδιά
Ένα σύνθετο κλειδί έχει δύο ή περισσότερα μοναδικά αναγνωριστικά. Σε μια σχεσιακή βάση δεδομένων, θα υπάρχουν περιπτώσεις όπου η χρήση ενός μόνο ξένου κλειδιού δεν θα αντιπροσωπεύει επαρκώς τις σχέσεις που υπάρχουν σε αυτήν τη βάση δεδομένων.
Στο παράδειγμα ενοικίασης αυτοκινήτων, η πιο πρακτική προσέγγιση είναι η δημιουργία ενός νέου πίνακα που αποθηκεύει τις λεπτομέρειες ενοικίασης. Για να είναι χρήσιμες οι πληροφορίες στον πίνακα ενοικίασης αυτοκινήτων, πρέπει να συνδεθεί τόσο με το αυτοκίνητο όσο και με τους πίνακες πελατών.
Δημιουργία πίνακα με σύνθετα ξένα κλειδιά
/ * δημιουργεί έναν πίνακα CarRental στη βάση δεδομένων ενοικίασης αυτοκινήτων * /
ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ CarRental
(
Ημερομηνία ενοικίασης ΗΜΕΡΟΜΗΝΙΑ ΟΧΙ
LicenseNumber varchar (30) NOT NULL FOREIGN KEY REFERENCES Cars (LicenseNumber),
CustomerID varchar (30) ΔΕΝ NULL ΞΕΝΟ ΒΑΣΙΚΕΣ ΑΝΑΦΟΡΕΣ Πελάτες (CustomerID),
ΚΥΡΙΟ ΠΡΩΤΟΒΟΥΛΙΟ (Ημερομηνία ενοικίασης, Αριθμός άδειας, Αριθμός πελάτη)
);
Ο παραπάνω κώδικας απεικονίζει ένα σημαντικό σημείο. Αν και ένας πίνακας σε μια βάση δεδομένων SQL μπορεί να έχει περισσότερα από ένα ξένα κλειδιά, μπορεί να έχει μόνο ένα πρωτεύον κλειδί. Αυτό συμβαίνει επειδή πρέπει να υπάρχει μόνο ένας μοναδικός τρόπος αναγνώρισης μιας εγγραφής.
Είναι απαραίτητο να συνδυάσετε και τα τρία χαρακτηριστικά στον πίνακα για να έχετε ένα μοναδικό κλειδί. Ένας πελάτης μπορεί να νοικιάσει περισσότερα από ένα αυτοκίνητα την ίδια ημέρα (έτσι Κωδικός πελάτη και Ημερομηνία δεν είναι ένας καλός συνδυασμός) περισσότεροι από ένας πελάτες μπορούν επίσης να νοικιάσουν το ίδιο αυτοκίνητο την ίδια ημέρα (έτσι ΑΡΙΘΜΟΣ ΑΔΕΙΑΣ και Ημερομηνία δεν είναι καλός συνδυασμός).
Ωστόσο, η δημιουργία ενός σύνθετου κλειδιού που λέει σε ποιον πελάτη, ποιο αυτοκίνητο, και ποια ημέρα κάνει ένα εξαιρετικό μοναδικό κλειδί. Αυτό το μοναδικό κλειδί αντιπροσωπεύει τόσο ένα σύνθετο ξένο κλειδί όσο και ένα σύνθετο πρωτεύον κλειδί.
Ξένα πρωτεύοντα κλειδιά
Ω ναι, τα ξένα πρωτεύοντα κλειδιά εξέρχονται. Αν και δεν υπάρχει επίσημο όνομα για αυτό, ένα ξένο κλειδί μπορεί επίσης να είναι το κύριο κλειδί στον ίδιο πίνακα. Αυτό συμβαίνει όταν δημιουργείτε έναν νέο πίνακα που περιέχει εξειδικευμένα δεδομένα σχετικά με μια υπάρχουσα οντότητα (ή εγγραφή σε άλλο πίνακα).
Ας πούμε ότι ο Fred (που εργάζεται στην εταιρεία ενοικίασης αυτοκινήτων) βρίσκεται στη βάση δεδομένων της εταιρείας κάτω από τον πίνακα εργαζομένων. Μετά από λίγα χρόνια, γίνεται επόπτης και προστίθεται στον πίνακα εποπτών.
Ο Fred είναι ακόμη υπάλληλος και θα έχει τον ίδιο αριθμό ταυτότητας. Έτσι, το αναγνωριστικό υπαλλήλου του Fred είναι τώρα στον πίνακα εποπτών ως ξένο κλειδί που θα γίνει επίσης πρωταρχικό κλειδί σε αυτόν τον πίνακα (καθώς δεν έχει νόημα να δημιουργήσετε έναν νέο αριθμό ταυτότητας για τον Fred τώρα που είναι επόπτης).
Τώρα μπορείτε να προσδιορίσετε ξένα κλειδιά σε βάσεις δεδομένων SQL
Τα ξένα κλειδιά συνδέουν διαφορετικούς πίνακες σε μια βάση δεδομένων SQL. Από αυτό το άρθρο, μπορείτε να δείτε τι είναι ένα ξένο κλειδί, πώς λειτουργεί και γιατί είναι σημαντικό να τα έχετε σε μια βάση δεδομένων. Καταλαβαίνετε επίσης τις βασικές και ακόμη πιο περίπλοκες μορφές ξένων κλειδιών.
Εάν πιστεύετε ότι τα ξένα κλειδιά είναι ενδιαφέροντα, θα έχετε μια ημέρα πεδίου όταν αρχίσετε να χρησιμοποιείτε το έργο και τις λειτουργίες επιλογής για να ρωτήσετε τις βάσεις δεδομένων SQL.
Αντιμετωπίστε τις σχετικές βάσεις δεδομένων SQL, κατανοώντας τις λειτουργίες του έργου και της επιλογής με αυτά τα παραδείγματα.
Διαβάστε Επόμενο
- Προγραμματισμός
- Προγραμματισμός
- SQL
- βάση δεδομένων

Ο Kadeisha Kean είναι προγραμματιστής λογισμικού πλήρους στοίβας και συγγραφέας τεχνικής / τεχνολογίας. Έχει την ξεχωριστή ικανότητα να απλοποιεί μερικές από τις πιο περίπλοκες τεχνολογικές έννοιες. παράγοντας υλικό που μπορεί εύκολα να γίνει κατανοητό από κάθε αρχάριο της τεχνολογίας. Είναι παθιασμένη να γράφει, να αναπτύσσει ενδιαφέρον λογισμικό και να ταξιδεύει στον κόσμο (μέσω ντοκιμαντέρ).
Εγγραφείτε στο Newsletter μας
Εγγραφείτε στο ενημερωτικό δελτίο μας για τεχνικές συμβουλές, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Ένα ακόμη βήμα…!
Επιβεβαιώστε τη διεύθυνση email σας στο email που μόλις σας στείλαμε.