Skip to main content

Μεταβατική Εξάρτηση σε μια Βάση Δεδομένων

Ο Τάκης Φωτόπουλος "καρφώνει" την Παγκοσμιοποίηση σε εφ'όλης της ύλης συνέντευξη (3/7/2017) (Ιούνιος 2025)

Ο Τάκης Φωτόπουλος "καρφώνει" την Παγκοσμιοποίηση σε εφ'όλης της ύλης συνέντευξη (3/7/2017) (Ιούνιος 2025)
Anonim

Μια μεταβατική εξάρτηση σε μια βάση δεδομένων είναι μια έμμεση σχέση μεταξύ των τιμών στον ίδιο πίνακα που προκαλεί μια λειτουργική εξάρτηση. Για να επιτευχθεί το πρότυπο κανονικοποίησης της τρίτης κανονικής μορφής (3NF), πρέπει να εξαλείψετε οποιαδήποτε μεταβατική εξάρτηση.

Από τη φύση της, μια μεταβατική εξάρτηση απαιτεί τρία ή περισσότερα χαρακτηριστικά (ή στήλες βάσης δεδομένων) που έχουν μια λειτουργική εξάρτηση μεταξύ τους, πράγμα που σημαίνει ότι η στήλη Α σε έναν πίνακα βασίζεται στη στήλη Β μέσω μιας ενδιάμεσης στήλης C.

Ας δούμε πώς μπορεί να λειτουργήσει αυτό.

Παράδειγμα μεταβατικής εξάρτησης

ΣΥΓΓΡΑΦΕΙΣ

Αναγνωριστικό_αντικειμένουΣυντάκτηςΒιβλίοAuthor_Nationality
Auth_001Orson Scott CardΤο παιχνίδι του EnderΗνωμένες Πολιτείες
Auth_001Orson Scott CardΤο παιχνίδι του EnderΗνωμένες Πολιτείες
Auth_002Margaret AtwoodΗ ιστορία της γυναίκαςΚαναδάς

Στο παραπάνω παράδειγμα AUTHORS:

  • Βιβλίο → Συντάκτης : Εδώ, το Βιβλίο attribute καθορίζει το Συντάκτης Χαρακτηριστικό. Εάν γνωρίζετε το όνομα του βιβλίου, μπορείτε να μάθετε το όνομα του συγγραφέα. Ωστόσο, Συντάκτης δεν καθορίζει Βιβλίο , επειδή ένας συγγραφέας μπορεί να γράψει πολλά βιβλία. Για παράδειγμα, μόνο και μόνο επειδή γνωρίζουμε το όνομα του συγγραφέα Orson Scott Card, ακόμα δεν γνωρίζουμε το όνομα του βιβλίου.
  • Συντάκτης → Author_Nationality : Ομοίως, το Συντάκτης attribute καθορίζει το Author_Nationality , αλλά όχι το αντίστροφο. απλά επειδή γνωρίζουμε την εθνικότητα δεν σημαίνει ότι μπορούμε να καθορίσουμε τον συγγραφέα.

Αλλά αυτός ο πίνακας εισάγει μια μεταβατική εξάρτηση:

  • Βιβλίο → Author_Nationality: Εάν γνωρίζουμε το όνομα του βιβλίου, μπορούμε να καθορίσουμε την εθνικότητα μέσω της στήλης "Συγγραφέας".

Αποφυγή μεταβατικών εξαρτήσεων

Για να διασφαλίσουμε την Τρίτη Κανονική Μορφή, ας αφαιρέσουμε την μεταβατική εξάρτηση.

Μπορούμε να ξεκινήσουμε αφαιρώντας τη στήλη Βιβλίο από τον πίνακα "Συγγραφείς" και δημιουργώντας έναν ξεχωριστό πίνακα βιβλίων:

ΒΙΒΛΙΑ

Αναγνωριστικό βιβλίουΒιβλίοΑναγνωριστικό_αντικειμένου
Book_001Το παιχνίδι του EnderAuth_001
Book_001Τα παιδιά του νουAuth_001
Book_002Η ιστορία της γυναίκαςAuth_002

ΣΥΓΓΡΑΦΕΙΣ

Αναγνωριστικό_αντικειμένουΣυντάκτηςAuthor_Nationality
Auth_001Orson Scott CardΗνωμένες Πολιτείες
Auth_002Margaret AtwoodΚαναδάς

Αυτό το έκανα; Ας εξετάσουμε τώρα τις εξαρτήσεις μας:

ΒΙΒΛΙΟ πίνακα:

  • Αναγνωριστικό βιβλίου → Βιβλίο: ο Βιβλίο εξαρτάται από Αναγνωριστικό βιβλίου .
  • Δεν υπάρχουν άλλες εξαρτήσεις στον πίνακα αυτό, επομένως είμαστε εντάξει. Σημειώστε ότι το ξένο κλειδί Αναγνωριστικό_αντικειμένου συνδέει αυτόν τον πίνακα με τον πίνακα AUTHORS μέσω του πρωτεύοντος κλειδιού Αναγνωριστικό_αντικειμένου . Έχουμε δημιουργήσει μια σχέση για να αποφύγουμε μια μεταβατική εξάρτηση, ένα βασικό σχεδιασμό σχεσιακών βάσεων δεδομένων.

Πίνακας AUTHORS:

  • Αναγνωριστικό_αντικειμένου → Συντάκτης: ο Συντάκτης εξαρτάται από Αναγνωριστικό_αντικειμένου .
  • Συντάκτης → Author_Nationality: Η εθνικότητα μπορεί να καθοριστεί από τον συγγραφέα.
  • Αναγνωριστικό_αντικειμένου → Author_Nationality: Η ιθαγένεια μπορεί να καθοριστεί από το Αναγνωριστικό_αντικειμένου μέσα από Συντάκτης Χαρακτηριστικό. Εξακολουθούμε να έχουμε μια μεταβατική εξάρτηση.

Πρέπει να προσθέσουμε έναν τρίτο πίνακα για να κανονικοποιήσουμε αυτά τα δεδομένα:

ΧΩΡΕΣ

Αναγνωριστικό χώραςΧώρα
Coun_001Ηνωμένες Πολιτείες
Coun_002Καναδάς

ΣΥΓΓΡΑΦΕΙΣ

Αναγνωριστικό_αντικειμένουΣυντάκτηςΑναγνωριστικό χώρας
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_002

Τώρα έχουμε τρία τραπέζια, χρησιμοποιώντας εξωτερικά κλειδιά για να συνδέσετε μεταξύ των τραπεζιών:

  • Το ξένο κλειδί του πίνακα BOOK Αναγνωριστικό_αντικειμένου συνδέει ένα βιβλίο με έναν συγγραφέα στον πίνακα AUTHORS.
  • Το ξένο κλειδί του πίνακα AUTHORS Αναγνωριστικό χώρας συνδέει έναν συγγραφέα σε μια χώρα στον πίνακα COUNTRIES.
  • Ο πίνακας COUNTRIES δεν έχει ξένο κλειδί επειδή δεν χρειάζεται να συνδεθεί με άλλο πίνακα σε αυτό το σχέδιο.

Γιατί οι μεταβατικές εξαρτήσεις είναι κακό σχεδιασμό βάσης δεδομένων

Ποια είναι η αξία της αποφυγής των μεταβατικών εξαρτήσεων για να βοηθηθεί η εξασφάλιση του 3NF; Ας εξετάσουμε πάλι το πρώτο μας τραπέζι και δούμε τα θέματα που δημιουργεί:

ΣΥΓΓΡΑΦΕΙΣ

Αναγνωριστικό_αντικειμένουΣυντάκτηςΒιβλίοAuthor_Nationality
Auth_001Orson Scott CardΤο παιχνίδι του EnderΗνωμένες Πολιτείες
Auth_001Orson Scott CardΤα παιδιά του νουΗνωμένες Πολιτείες
Auth_002Margaret AtwoodΗ ιστορία της γυναίκαςΚαναδάς

Αυτό το είδος σχεδιασμού μπορεί να συμβάλει σε ανωμαλίες δεδομένων και ασυνέπειες, για παράδειγμα:

  • Εάν διαγράψατε τα δύο βιβλία "Παιδιά του Νου" και "Παιχνίδι του Ender", θα διαγράψετε πλήρως τον συντάκτη "Orson Scott Card" και την εθνικότητά του από τη βάση δεδομένων.
  • Δεν μπορείτε να προσθέσετε νέο συγγραφέα στη βάση δεδομένων εκτός αν προσθέσετε επίσης ένα βιβλίο. τι εάν ο συγγραφέας δεν έχει ακόμη δημοσιευθεί ή δεν ξέρετε το όνομα ενός βιβλίου που έχει συντάξει;
  • Εάν η "κάρτα Orson Scott" αλλάξει την υπηκοότητά της, θα πρέπει να την αλλάξετε σε όλα τα αρχεία στα οποία εμφανίζεται. Έχοντας πολλαπλές εγγραφές με τον ίδιο συγγραφέα μπορεί να οδηγήσει σε ανακριβή δεδομένα: Τι γίνεται αν το άτομο που εισάγει δεδομένα δεν συνειδητοποιεί ότι υπάρχουν πολλαπλές εγγραφές γι 'αυτόν και αλλάζει τα δεδομένα μόνο σε μία εγγραφή;
  • Δεν μπορείτε να διαγράψετε ένα βιβλίο όπως το "The Handmaid's Tale" χωρίς επίσης να διαγράψετε πλήρως τον συγγραφέα.

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