Μία από πολλές σχέσεις σε μια βάση δεδομένων

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

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

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

Γιατί η δημιουργία μιας σχέσης "ένα προς πολλούς" είναι σημαντική

Για να εκπροσωπήσετε τη σχέση "ένας προς πολλούς", χρειάζεστε τουλάχιστον δύο πίνακες. Ας δούμε γιατί.

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

Δάσκαλοι και μαθήματα
Teacher_ID Teacher_Name Σειρά μαθημάτων
Teacher_001 Carmen Βιολογία
Teacher_002 Βερενίκη Μαθηματικά
Teacher_003 Jorge Αγγλικά

Τι γίνεται αν η Carmen διδάσκει δύο ή περισσότερα μαθήματα; Έχουμε δύο επιλογές με αυτό το σχέδιο. Θα μπορούσαμε να το προσθέσουμε στο υπάρχον αρχείο της Carmen, όπως αυτό:

Δάσκαλοι και μαθήματα
Teacher_ID Δάσκαλος _Name Σειρά μαθημάτων
Teacher_001 Carmen Βιολογία, Μαθηματικά
Teacher_002 Βερενίκη Μαθηματικά
Teacher_003 Jorge Αγγλικά

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

Κάνει δύσκολη την αναζήτηση δεδομένων. Αυτός ο σχεδιασμός παραβιάζει την πρώτη αρχή της κανονικοποίησης της βάσης δεδομένων, First Normal Form (1NF) , η οποία δηλώνει ότι κάθε κελί πίνακα πρέπει να περιέχει ένα και μοναδικό κομμάτι δεδομένων.

Μια άλλη εναλλακτική λύση είναι να προσθέσετε απλά ένα δεύτερο ρεκόρ για την Carmen:

Δάσκαλοι και μαθήματα
Δάσκαλος _ID Δάσκαλος _Name Σειρά μαθημάτων
Teacher_001 Carmen Βιολογία
Teacher_001 Carmen Μαθηματικά
Teacher_002 Βερενίκη Μαθηματικά
Teacher_003 Jorge Αγγλικά

Αυτό συμμορφώνεται με το 1NF, αλλά εξακολουθεί να είναι κακός σχεδιασμός βάσης δεδομένων, επειδή εισάγει πλεονασμό και θα μπορούσε να φουσκώσει άσκοπα μια πολύ μεγάλη βάση δεδομένων. Το πιο σημαντικό, τα δεδομένα θα μπορούσαν να γίνουν αντιφατικά. Για παράδειγμα, τι θα συμβεί αν το όνομα της Carmen αλλάξει; Κάποιος που συνεργάζεται με τα δεδομένα μπορεί να ενημερώσει το όνομά της σε μία εγγραφή και να μην την ενημερώσει στη δεύτερη εγγραφή. Αυτός ο σχεδιασμός παραβιάζει τη δεύτερη κανονική μορφή (2NF), η οποία ακολουθεί το 1NF και πρέπει επίσης να αποφύγει τις απολύσεις πολλαπλών εγγραφών, χωρίζοντας υποσύνολα δεδομένων σε πολλαπλούς πίνακες και δημιουργώντας μια σχέση μεταξύ τους.

Πώς να σχεδιάσετε μια βάση δεδομένων με μια προς πολλές σχέσεις

Για να εφαρμόσουμε μια σχέση "ένας προς πολλούς" στον πίνακα "Δάσκαλοι και μαθήματα", σπάμε τα τραπέζια σε δύο και τα συνδέουμε χρησιμοποιώντας ένα ξένο κλειδί .

Εδώ, αφαιρέσαμε τη στήλη "Τίτλος" στον πίνακα "Δάσκαλοι":

Καθηγητές
Δάσκαλος _ID Δάσκαλος _Name
Teacher_001 Carmen
Teacher_002 Βερενίκη
Teacher_003 Jorge

Και εδώ είναι ο πίνακας μαθημάτων. Σημειώστε ότι το ξένο κλειδί του, Teacher_ID, συνδέει ένα μάθημα με έναν δάσκαλο στον πίνακα Καθηγητών:

ΚΥΚΛΟΣ ΜΑΘΗΜΑΤΩΝ
Αναγνωριστικό_χρήστη Course_Name Teacher_ID
Course_001 Βιολογία Teacher_001
Course_002 Μαθηματικά Teacher_001
Course_003 Αγγλικά Teacher_003

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

Αυτό μας λέει ότι τόσο η Βιολογία όσο και το Μαθηματίδιο διδάσκονται από την Carmen και ότι ο Jorge διδάσκει αγγλικά.

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

Οι βάσεις δεδομένων μπορούν επίσης να εφαρμόσουν μια σχέση one-to-one και μια σχέση πολλών προς πολλά.