Αποφύγετε τις μεταβατικές εξαρτήσεις για να βοηθήσετε να εξασφαλίσετε την κανονικοποίηση
Μια μεταβατική εξάρτηση σε μια βάση δεδομένων είναι μια έμμεση σχέση μεταξύ των τιμών στον ίδιο πίνακα που προκαλεί μια λειτουργική εξάρτηση . Για να επιτευχθεί το πρότυπο κανονικοποίησης της τρίτης κανονικής μορφής (3NF), πρέπει να εξαλείψετε οποιαδήποτε μεταβατική εξάρτηση.
Από τη φύση της, μια μεταβατική εξάρτηση απαιτεί τρία ή περισσότερα χαρακτηριστικά (ή στήλες βάσης δεδομένων) που έχουν μια λειτουργική εξάρτηση μεταξύ τους, πράγμα που σημαίνει ότι η στήλη Α σε έναν πίνακα βασίζεται στη στήλη Β μέσω μιας ενδιάμεσης στήλης C.
Ας δούμε πώς μπορεί να λειτουργήσει αυτό.
Παράδειγμα μεταβατικής εξάρτησης
ΣΥΓΓΡΑΦΕΙΣ
Αναγνωριστικό_αντικειμένου | Συγγραφέας | Βιβλίο | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Το παιχνίδι του Ender | Ηνωμένες Πολιτείες |
Auth_001 | Orson Scott Card | Το παιχνίδι του Ender | Ηνωμένες Πολιτείες |
Auth_002 | Margaret Atwood | Η ιστορία της γυναίκας | Καναδάς |
Στο παραπάνω παράδειγμα AUTHORS:
- Book → Author : Εδώ, το χαρακτηριστικό Book προσδιορίζει το χαρακτηριστικό Author . Εάν γνωρίζετε το όνομα του βιβλίου, μπορείτε να μάθετε το όνομα του συγγραφέα. Ωστόσο, ο συγγραφέας δεν καθορίζει Βιβλίο , επειδή ένας συγγραφέας μπορεί να γράψει πολλά βιβλία. Για παράδειγμα, μόνο και μόνο επειδή γνωρίζουμε το όνομα του συγγραφέα Orson Scott Card, ακόμα δεν γνωρίζουμε το όνομα του βιβλίου.
- Συγγραφέας → Εθνικότητα συγγραφέα : Ομοίως, το χαρακτηριστικό Συγγραφέας καθορίζει την εθνική ταυτότητα του συντάκτη , αλλά όχι το αντίστροφο. απλά επειδή γνωρίζουμε την εθνικότητα δεν σημαίνει ότι μπορούμε να καθορίσουμε τον συγγραφέα.
Αλλά αυτός ο πίνακας εισάγει μια μεταβατική εξάρτηση:
- Book → AuthorNationality: Εάν γνωρίζουμε το όνομα του βιβλίου, μπορούμε να καθορίσουμε την εθνικότητα μέσω της στήλης "Συγγραφέας".
Αποφυγή μεταβατικών εξαρτήσεων
Για να διασφαλίσουμε την Τρίτη Κανονική Μορφή, ας αφαιρέσουμε την μεταβατική εξάρτηση.
Μπορούμε να ξεκινήσουμε αφαιρώντας τη στήλη Βιβλίο από τον πίνακα "Συγγραφείς" και δημιουργώντας έναν ξεχωριστό πίνακα βιβλίων:
ΒΙΒΛΙΑ
Αναγνωριστικό βιβλίου | Βιβλίο | Αναγνωριστικό_αντικειμένου |
---|---|---|
Book_001 | Το παιχνίδι του Ender | Auth_001 |
Book_001 | Τα παιδιά του νου | Auth_001 |
Book_002 | Η ιστορία της γυναίκας | Auth_002 |
ΣΥΓΓΡΑΦΕΙΣ
Αναγνωριστικό_αντικειμένου | Συγγραφέας | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Ηνωμένες Πολιτείες |
Auth_002 | Margaret Atwood | Καναδάς |
Αυτό το έκανα; Ας εξετάσουμε τώρα τις εξαρτήσεις μας:
ΒΙΒΛΙΟ πίνακα :
- Book_ID → Book: Το βιβλίο εξαρτάται από το αναγνωριστικό βιβλίου .
- Δεν υπάρχουν άλλες εξαρτήσεις στον πίνακα αυτό, επομένως είμαστε εντάξει. Σημειώστε ότι το ξένο κλειδί Author_ID συνδέει αυτόν τον πίνακα στον πίνακα AUTHORS μέσω του πρωτεύοντος κλειδιού του Author_ID . Έχουμε δημιουργήσει μια σχέση για να αποφύγουμε μια μεταβατική εξάρτηση, ένα βασικό σχεδιασμό σχεσιακών βάσεων δεδομένων.
Πίνακας AUTHORS :
- Author_ID → Συγγραφέας: Ο συγγραφέας εξαρτάται από το αναγνωριστικό του συντάκτη .
- Συγγραφέας → Εθνικότητα συγγραφέα: Η εθνικότητα μπορεί να καθοριστεί από τον συγγραφέα.
- Author_ID → Author_Nationality: Η εθνικότητα μπορεί να προσδιοριστεί από το Author_ID μέσω του χαρακτηριστικού Author . Εξακολουθούμε να έχουμε μια μεταβατική εξάρτηση.
Πρέπει να προσθέσουμε έναν τρίτο πίνακα για να κανονικοποιήσουμε αυτά τα δεδομένα:
ΧΩΡΕΣ
Αναγνωριστικό χώρας | Χώρα |
---|---|
Coun_001 | Ηνωμένες Πολιτείες |
Coun_002 | Καναδάς |
ΣΥΓΓΡΑΦΕΙΣ
Αναγνωριστικό_αντικειμένου | Συγγραφέας | Αναγνωριστικό χώρας |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Τώρα έχουμε τρία τραπέζια, χρησιμοποιώντας εξωτερικά κλειδιά για να συνδέσετε μεταξύ των τραπεζιών:
- Το ξένο κλειδί του πίνακα BOOK του Author_ID συνδέει ένα βιβλίο με έναν συγγραφέα στον πίνακα AUTHORS .
- Το ξένο κλειδί του πίνακα AUTHORS country_ID συνδέει έναν συγγραφέα σε μια χώρα στον πίνακα COUNTRIES.
- Ο πίνακας COUNTRIES δεν έχει ξένο κλειδί επειδή δεν χρειάζεται να συνδεθεί με άλλο πίνακα σε αυτό το σχέδιο.
Γιατί οι μεταβατικές εξαρτήσεις είναι κακό σχεδιασμό βάσης δεδομένων
Ποια είναι η αξία της αποφυγής των μεταβατικών εξαρτήσεων για να βοηθηθεί η εξασφάλιση του 3NF; Ας εξετάσουμε πάλι το πρώτο μας τραπέζι και δούμε τα θέματα που δημιουργεί:
ΣΥΓΓΡΑΦΕΙΣ
Αναγνωριστικό_αντικειμένου | Συγγραφέας | Βιβλίο | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Το παιχνίδι του Ender | Ηνωμένες Πολιτείες |
Auth_001 | Orson Scott Card | Τα παιδιά του νου | Ηνωμένες Πολιτείες |
Auth_002 | Margaret Atwood | Η ιστορία της γυναίκας | Καναδάς |
Αυτό το είδος σχεδιασμού μπορεί να συμβάλει σε ανωμαλίες δεδομένων και ασυνέπειες, για παράδειγμα:
- Εάν διαγράψατε τα δύο βιβλία "Παιδιά του Νου" και "Παιχνίδι του Ender", θα διαγράψετε πλήρως τον συντάκτη "Orson Scott Card" και την εθνικότητά του από τη βάση δεδομένων.
- Δεν μπορείτε να προσθέσετε νέο συγγραφέα στη βάση δεδομένων εκτός αν προσθέσετε επίσης ένα βιβλίο. τι εάν ο συγγραφέας δεν έχει ακόμη δημοσιευθεί ή δεν ξέρετε το όνομα ενός βιβλίου που έχει συντάξει;
- Εάν η "κάρτα Orson Scott" αλλάξει την υπηκοότητά της, θα πρέπει να την αλλάξετε σε όλα τα αρχεία στα οποία εμφανίζεται. Έχοντας πολλαπλές εγγραφές με τον ίδιο συγγραφέα μπορεί να οδηγήσει σε ανακριβή δεδομένα: Τι γίνεται αν το άτομο που εισάγει δεδομένα δεν συνειδητοποιεί ότι υπάρχουν πολλαπλές εγγραφές γι 'αυτόν και αλλάζει τα δεδομένα μόνο σε μία εγγραφή;
- Δεν μπορείτε να διαγράψετε ένα βιβλίο όπως το "The Handmaid's Tale" χωρίς επίσης να διαγράψετε πλήρως τον συγγραφέα.
Αυτοί είναι μόνο μερικοί λόγοι για τους οποίους η εξομάλυνση και η αποφυγή των μεταβατικών εξαρτήσεων, προστατεύουν τα δεδομένα και εξασφαλίζουν συνοχή.