Δημιουργείται σχέση μεταξύ δύο πινάκων βάσης δεδομένων όταν ένας πίνακας χρησιμοποιεί ένα ξένο κλειδί που αναφέρεται στο πρωτεύον κλειδί ενός άλλου πίνακα. Αυτή είναι η βασική έννοια πίσω από τον όρο σχεσιακή βάση δεδομένων.
Πώς λειτουργεί ένα ξένο κλειδί για να δημιουργήσετε μια σχέση
Ένα πρωτεύον κλειδί προσδιορίζει μοναδικά κάθε εγγραφή στον πίνακα. Είναι ένας τύπος υποψήφιου κλειδιού που είναι συνήθως η πρώτη στήλη σε έναν πίνακα και μπορεί να δημιουργηθεί αυτόματα από τη βάση δεδομένων για να διασφαλιστεί ότι είναι μοναδικό. Ένα ξένο κλειδί είναι ένα άλλο υποψήφιο κλειδί (όχι το πρωτεύον κλειδί) που χρησιμοποιείται για τη σύνδεση μιας εγγραφής με δεδομένα σε έναν άλλο πίνακα.
Για παράδειγμα, εξετάστε αυτούς τους δύο πίνακες που προσδιορίζουν ποιος δάσκαλος διδάσκει ποιο μάθημα. Εδώ, το πρωτεύον κλειδί του πίνακα Μαθήματα είναι Course_ID. Το ξένο κλειδί του είναι Teacher_ID:
Course_ID | Όνομα_μαθήματος | Teacher_ID |
---|---|---|
Course_001 | Βιολογία | Teacher_001 |
Course_002 | Μαθηματικά | Teacher_002 |
Course_003 | Αγγλικά | Teacher_003 |
Μπορείτε να δείτε ότι το ξένο κλειδί στα μαθήματα ταιριάζει με ένα πρωτεύον κλειδί στο Teachers:
Teacher_ID | Όνομα_Δασκάλου |
---|---|
Teacher_001 | Κάρμεν |
Teacher_002 | Veronica |
Teacher_003 | Χόρχε |
Μπορούμε να πούμε ότι το ξένο κλειδί Teacher_ID βοήθησε στη δημιουργία μιας σχέσης μεταξύ των πινάκων Courses και Teachers.
Τύποι σχέσεων βάσεων δεδομένων
Χρησιμοποιώντας ξένα κλειδιά ή άλλα υποψήφια κλειδιά, μπορείτε να εφαρμόσετε τρεις τύπους σχέσεων μεταξύ πινάκων:
Ένα προς Ένα
Αυτός ο τύπος σχέσης επιτρέπει μόνο μία εγγραφή σε κάθε πλευρά της σχέσης. Το πρωτεύον κλειδί σχετίζεται μόνο με μία εγγραφή (ή καμία) σε έναν άλλο πίνακα. Για παράδειγμα, σε έναν γάμο, κάθε σύζυγος έχει μόνο έναν άλλο σύζυγο. Αυτό το είδος σχέσης μπορεί να υλοποιηθεί σε έναν μόνο πίνακα και επομένως δεν χρησιμοποιεί ξένο κλειδί.
Ένα-προς-Πολλά
Μια σχέση ένα προς πολλά επιτρέπει μια μεμονωμένη εγγραφή σε έναν πίνακα να σχετίζεται με πολλές εγγραφές σε έναν άλλο πίνακα. Σκεφτείτε μια επιχείρηση με βάση δεδομένων που έχει πίνακες Πελάτες και Παραγγελίες.
Ένας πελάτης μπορεί να αγοράσει πολλές παραγγελίες, αλλά μια μεμονωμένη παραγγελία δεν μπορούσε να συνδεθεί με πολλούς πελάτες. Επομένως, ο πίνακας Παραγγελίες θα περιέχει ένα ξένο κλειδί που ταιριάζει με το πρωτεύον κλειδί του πίνακα "Πελάτες", ενώ ο πίνακας "Πελάτες" δεν θα έχει ξένο κλειδί που να δείχνει προς τον πίνακα "Παραγγελίες".
Πολλά-προς-Πολλά
Αυτή είναι μια σύνθετη σχέση στην οποία πολλές εγγραφές σε έναν πίνακα μπορούν να συνδεθούν με πολλές εγγραφές σε έναν άλλο πίνακα. Για παράδειγμα, η επιχείρησή μας χρειάζεται πιθανώς πίνακες πελατών και παραγγελιών και πιθανότατα χρειάζεται και πίνακα προϊόντων.
Και πάλι, η σχέση μεταξύ του πίνακα Πελάτες και Παραγγελίες είναι ένα προς πολλά, αλλά λάβετε υπόψη τη σχέση μεταξύ του πίνακα Παραγγελίες και Προϊόντα. Μια παραγγελία μπορεί να περιέχει πολλά προϊόντα και ένα προϊόν θα μπορούσε να συνδεθεί με πολλές παραγγελίες, καθώς πολλοί πελάτες ενδέχεται να υποβάλουν μια παραγγελία που περιέχει ορισμένα από τα ίδια προϊόντα. Αυτό το είδος σχέσης απαιτεί τουλάχιστον τρεις πίνακες.
Γιατί είναι σημαντικές οι σχέσεις βάσεων δεδομένων;
Η δημιουργία συνεπών σχέσεων μεταξύ των πινάκων βάσεων δεδομένων συμβάλλει στη διασφάλιση της ακεραιότητας των δεδομένων, συμβάλλοντας στην κανονικοποίηση της βάσης δεδομένων. Για παράδειγμα, τι θα γινόταν αν δεν συνδέαμε κανέναν πίνακα μέσω ενός ξένου κλειδιού και αντ' αυτού συνδυάζαμε τα δεδομένα στους πίνακες Μαθήματα και Καθηγητές, όπως:
Teacher_ID | Όνομα_Δασκάλου | Μάθημα |
---|---|---|
Teacher_001 | Κάρμεν | Βιολογία, Μαθηματικά |
Teacher_002 | Veronica | Μαθηματικά |
Teacher_003 | Χόρχε | Αγγλικά |
Αυτή η σχεδίαση είναι άκαμπτη και παραβιάζει την πρώτη αρχή της κανονικοποίησης της βάσης δεδομένων, την Πρώτη κανονική φόρμα, η οποία δηλώνει ότι κάθε κελί πίνακα πρέπει να περιέχει ένα ενιαίο, διακριτό τμήμα δεδομένων.
Ή ίσως αποφασίσαμε να προσθέσουμε ένα δεύτερο ρεκόρ για την Carmen, προκειμένου να επιβάλουμε 1NF:
Teacher_ID | Όνομα_Δασκάλου | Μάθημα |
---|---|---|
Teacher_001 | Κάρμεν | Βιολογία |
Teacher_001 | Κάρμεν | Μαθηματικά |
Teacher_002 | Veronica | Μαθηματικά |
Teacher_003 | Χόρχε | Αγγλικά |
Αυτός είναι ακόμα ένας αδύναμος σχεδιασμός, που εισάγει περιττές επικαλύψεις και αυτό που ονομάζεται ανωμαλία εισαγωγής δεδομένων, πράγμα που σημαίνει ότι θα μπορούσε να συμβάλει σε ασυνεπή δεδομένα. Για παράδειγμα, εάν ένας δάσκαλος έχει πολλές εγγραφές, τι γίνεται αν ορισμένα δεδομένα πρέπει να επεξεργαστούν, αλλά το άτομο που εκτελεί την επεξεργασία δεδομένων δεν αντιλαμβάνεται ότι υπάρχουν πολλές εγγραφές; Στη συνέχεια, ο πίνακας θα περιέχει διαφορετικά δεδομένα για το ίδιο άτομο, χωρίς σαφή τρόπο αναγνώρισης ή αποφυγής του.
Η διάσπαση αυτού του πίνακα σε δύο πίνακες, Καθηγητές και Μαθήματα, δημιουργεί τη σωστή σχέση μεταξύ των δεδομένων και επομένως βοηθά στη διασφάλιση της συνέπειας και της ακρίβειας των δεδομένων.