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