Κάνοντας μια βάση δεδομένων στην τρίτη κανονική μορφή (3NF)

Η τρίτη κανονική μορφή (3NF) είναι μια αρχή βάσης δεδομένων που υποστηρίζει την ακεραιότητα των δεδομένων με βάση τις αρχές εξομάλυνσης της βάσης δεδομένων που παρέχονται από το First Normal Form (1NF) και τη δεύτερη κανονική μορφή (2NF).

Τρίτη απαίτηση κανονικής μορφής

Υπάρχουν δύο βασικές απαιτήσεις για μια βάση δεδομένων να είναι σε τρίτη κανονική μορφή:

Σχετικά με την εξάρτηση του πρωτεύοντος κλειδιού

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

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

Μήπως και το LastName και το FirstName εξαρτώνται μόνο από την αξία του EmployeeID; Λοιπόν, θα μπορούσε το LastName να εξαρτηθεί από το FirstName; Όχι, επειδή τίποτα εγγενές στο LastName δε θα υποδηλώνει την αξία του FirstName. Μπορεί το FirstName να εξαρτάται από το LastName; Όχι πάλι, επειδή το ίδιο ισχύει: ό, τι μπορεί να είναι ένα LastName, δεν θα μπορούσε να δώσει μια υπόδειξη ως προς την αξία του FirstName. Επομένως, αυτός ο πίνακας είναι συμβατός με 3NF.

Αλλά εξετάστε αυτό τον πίνακα οχημάτων:

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

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

Πίνακας οχημάτων

Στον παρακάτω πίνακα, το ModelID είναι ένα ξένο κλειδί στον πίνακα Μοντέλα :

Πίνακας μοντέλων

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

Παράγωγα πεδία στο μοντέλο 3NF

Ένας πίνακας μπορεί να περιέχει ένα παράγωγο πεδίο - ένα που υπολογίζεται με βάση άλλες στήλες στον πίνακα. Για παράδειγμα, εξετάστε αυτόν τον πίνακα παραγγελιών widget:

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

Στην πραγματικότητα, δεδομένου ότι προέρχεται, είναι καλύτερο να μην το αποθηκεύσετε στη βάση δεδομένων καθόλου.

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

ΕΠΙΛΟΓΗ σειράς, συνολικών FROM WidgetOrders

Τώρα μπορούμε να χρησιμοποιήσουμε το ακόλουθο ερώτημα:

SELECTNumberNumber, UnitPrice * Ποσότητα AS Σύνολο FROM WidgetOrders

για την επίτευξη των ίδιων αποτελεσμάτων χωρίς να παραβιάζονται οι κανόνες ομαλοποίησης.