Τι είναι η ομαλοποίηση;
Η κανονικοποίηση είναι μια τεχνική σχεδίασης βάσης δεδομένων που μειώνει τον πλεονασμό δεδομένων και εξαλείφει τα ανεπιθύμητα χαρακτηριστικά, όπως Εισαγωγή, Ενημέρωση και Διαγραφές ανωμαλιών Οι κανόνες κανονικοποίησης χωρίζουν τους μεγαλύτερους πίνακες σε μικρότερους πίνακες και τους συνδέουν χρησιμοποιώντας σχέσεις. Ο σκοπός της κανονικοποίησης σε SQL είναι να εξαλείψει τα περιττά (επαναλαμβανόμενα) δεδομένα και να διασφαλίσει ότι τα δεδομένα αποθηκεύονται λογικά.
Ο εφευρέτης του σχεσιακού μοντέλου Edgar Codd πρότεινε τη θεωρία της ομαλοποίησης των δεδομένων με την εισαγωγή της πρώτης κανονικής μορφής και συνέχισε να επεκτείνει τη θεωρία με τη δεύτερη και τρίτη κανονική μορφή Αργότερα προσχώρησε στον Raymond F. Boyce για να αναπτύξει τη θεωρία της κανονικής μορφής Boyce-Codd.
Κανονικές φόρμες βάσης δεδομένων
Ακολουθεί μια λίστα με Κανονικές Φόρμες
- 1NF (Πρώτη κανονική φόρμα)
- 2NF (Δεύτερη κανονική μορφή)
- 3NF (τρίτη κανονική μορφή)
- BCNF (Κανονική φόρμα Boyce-Codd)
- 4NF (τέταρτη κανονική μορφή)
- 5NF (πέμπτη κανονική φόρμα)
- 6NF (Έκτη κανονική μορφή)
Η Θεωρία της Ομαλοποίησης Δεδομένων στον διακομιστή SQL αναπτύσσεται ακόμη περισσότερο. Για παράδειγμα, υπάρχουν συζητήσεις ακόμη και στην 6η Κανονική Φόρμα. Ωστόσο, στις περισσότερες πρακτικές εφαρμογές, η ομαλοποίηση επιτυγχάνει τα καλύτερα της στην 3η Κανονική Φόρμα . Η εξέλιξη των θεωριών κανονικοποίησης SQL απεικονίζεται παρακάτω-
Ομαλοποίηση βάσης δεδομένων με παραδείγματα
Το παράδειγμα κανονικοποίησης βάσης δεδομένων μπορεί εύκολα να γίνει κατανοητό με τη βοήθεια μιας μελέτης περίπτωσης. Ας υποθέσουμε, μια βιβλιοθήκη βίντεο διατηρεί μια βάση δεδομένων με ταινίες που ενοικιάζονται. Χωρίς ομαλοποίηση στη βάση δεδομένων, όλες οι πληροφορίες αποθηκεύονται σε έναν πίνακα όπως φαίνεται παρακάτω. Ας καταλάβουμε την Ομαλοποίηση στη βάση δεδομένων με πίνακες παράδειγμα:
Εδώ βλέπετε ότι η στήλη Ενοικίαση ταινιών έχει πολλές τιμές. Τώρα ας προχωρήσουμε στην 1η Κανονική Φόρμες:
Κανόνες 1NF (Πρώτη Κανονική Φόρμα)
- Κάθε κελί πίνακα πρέπει να περιέχει μία μόνο τιμή.
- Κάθε δίσκος πρέπει να είναι μοναδικός.
Ο παραπάνω πίνακας στο 1NF-
Παράδειγμα 1NF
Πριν προχωρήσουμε ας καταλάβουμε μερικά πράγματα -
Τι είναι το ΚΛΕΙΔΙ;
Το KEY είναι μια τιμή που χρησιμοποιείται για τον μοναδικό προσδιορισμό μιας εγγραφής σε έναν πίνακα. Ένα ΚΛΕΙΔΙ θα μπορούσε να είναι μία μεμονωμένη στήλη ή συνδυασμός πολλαπλών στηλών
Σημείωση: Οι στήλες σε έναν πίνακα που ΔΕΝ χρησιμοποιούνται για τον μοναδικό προσδιορισμό μιας εγγραφής ονομάζονται στήλες χωρίς κλειδί.
Τι είναι το πρωτεύον κλειδί;
Ένα πρωτεύον είναι μια τιμή μίας στήλης που χρησιμοποιείται για τον μοναδικό προσδιορισμό μιας εγγραφής βάσης δεδομένων.
Έχει τα ακόλουθα χαρακτηριστικά
- Ένα πρωτεύον κλειδί δεν μπορεί να είναι NULL
- Η τιμή του πρωτεύοντος κλειδιού πρέπει να είναι μοναδική
- Οι βασικές τιμές κλειδιού πρέπει σπάνια να αλλάξουν
- Το πρωτεύον κλειδί πρέπει να έχει μια τιμή όταν εισάγεται μια νέα εγγραφή.
Τι είναι το σύνθετο κλειδί;
Ένα σύνθετο κλειδί είναι ένα πρωτεύον κλειδί που αποτελείται από πολλές στήλες που χρησιμοποιούνται για τον μοναδικό προσδιορισμό μιας εγγραφής
Στη βάση δεδομένων μας, έχουμε δύο άτομα με το ίδιο όνομα Robert Phil, αλλά ζουν σε διαφορετικά μέρη.
Ως εκ τούτου, απαιτούμε και το πλήρες όνομα και τη διεύθυνση για να προσδιορίσουμε μια εγγραφή με μοναδικό τρόπο. Αυτό είναι ένα σύνθετο κλειδί.
Ας προχωρήσουμε στη δεύτερη κανονική μορφή 2NF
Κανόνες 2NF (Δεύτερη Κανονική Φόρμα)
- Κανόνας 1 - Να είστε σε 1NF
- Κανόνας 2- Πρωτεύον κλειδί μίας στήλης
Είναι ξεκάθαρο ότι δεν μπορούμε να προχωρήσουμε προς τα εμπρός για να φτιάξουμε την απλή βάση δεδομένων μας σε 2η φόρμα Κανονικοποίησης, εκτός εάν διαχωρίσουμε τον παραπάνω πίνακα.
Διαχωρίσαμε τον πίνακα 1NF σε δύο πίνακες, δηλαδή. Πίνακας 1 και Πίνακας 2. Ο Πίνακας 1 περιέχει πληροφορίες μέλους. Ο Πίνακας 2 περιέχει πληροφορίες σχετικά με τις ενοικιαζόμενες ταινίες.
Έχουμε εισαγάγει μια νέα στήλη που ονομάζεται Membership_id που είναι το κύριο κλειδί για τον πίνακα 1. Οι εγγραφές μπορούν να αναγνωριστούν με μοναδικό τρόπο στον Πίνακα 1 χρησιμοποιώντας αναγνωριστικό μέλους
Βάση δεδομένων - Ξένο κλειδί
Στον Πίνακα 2, το Membership_ID είναι το Ξένο Κλειδί
Το Ξένο Κλειδί αναφέρεται στο πρωτεύον κλειδί ενός άλλου Πίνακα! Βοηθά στη σύνδεση των πινάκων σας
- Ένα ξένο κλειδί μπορεί να έχει διαφορετικό όνομα από το πρωτεύον κλειδί του
- Διασφαλίζει ότι οι σειρές σε έναν πίνακα έχουν αντίστοιχες σειρές σε έναν άλλο
- Σε αντίθεση με το πρωτεύον κλειδί, δεν χρειάζεται να είναι μοναδικά. Τις περισσότερες φορές δεν είναι
- Τα ξένα κλειδιά μπορεί να είναι άκυρα, αν και τα πρωτεύοντα κλειδιά δεν μπορούν
Γιατί χρειάζεστε ξένο κλειδί;
Ας υποθέσουμε, ένας αρχάριος εισάγει μια εγγραφή στον Πίνακα Β όπως
Θα μπορείτε να εισαγάγετε τιμές μόνο στο ξένο κλειδί σας που υπάρχει στο μοναδικό κλειδί στον γονικό πίνακα. Αυτό βοηθά στην ακεραιότητα αναφοράς.
Το παραπάνω πρόβλημα μπορεί να ξεπεραστεί δηλώνοντας το αναγνωριστικό μέλους από τον Πίνακα 2 ως ξένο κλειδί του αναγνωριστικού μέλους από τον Πίνακα 1
Τώρα, εάν κάποιος προσπαθήσει να εισαγάγει μια τιμή στο πεδίο αναγνωριστικού μέλους που δεν υπάρχει στον γονικό πίνακα, θα εμφανιστεί ένα σφάλμα!
Τι είναι οι μεταβατικές λειτουργικές εξαρτήσεις;
Μια μεταβατική λειτουργική εξάρτηση είναι όταν αλλάζετε μια στήλη χωρίς κλειδί, μπορεί να προκαλέσει την αλλαγή οποιασδήποτε από τις άλλες στήλες χωρίς κλειδί
Εξετάστε τον πίνακα 1. Η αλλαγή της μη βασικής στήλης Το πλήρες όνομα μπορεί να αλλάξει χαιρετισμό.
Ας προχωρήσουμε στο 3NF
Κανόνες 3NF (τρίτη κανονική φόρμα)
- Κανόνας 1 - Να είστε σε 2NF
- Κανόνας 2- Δεν έχει μεταβατικές λειτουργικές εξαρτήσεις
Για να μετακινήσουμε τον πίνακα 2NF σε 3NF, πρέπει και πάλι να διαιρέσουμε τον πίνακα μας.
Παράδειγμα 3NF
Ακολουθεί ένα παράδειγμα 3NF στη βάση δεδομένων SQL:
Διαχωρίσαμε ξανά τα τραπέζια μας και δημιουργήσαμε έναν νέο πίνακα που αποθηκεύει τους χαιρετισμούς.
Δεν υπάρχουν μεταβατικές λειτουργικές εξαρτήσεις, και ως εκ τούτου ο πίνακας μας είναι σε 3NF
Στον πίνακα 3 το αναγνωριστικό χαιρετισμού είναι το πρωτεύον κλειδί και στον πίνακα 1 το αναγνωριστικό χαιρετισμού είναι ξένο στο πρωτεύον κλειδί στον πίνακα 3
Τώρα το μικρό μας παράδειγμα είναι σε ένα επίπεδο που δεν μπορεί περαιτέρω να αποσυντεθεί για να επιτύχει υψηλότερες κανονικές μορφές ομαλοποίησης. Στην πραγματικότητα, είναι ήδη σε υψηλότερες μορφές κανονικοποίησης Απαιτούνται ξεχωριστές προσπάθειες για μετάβαση σε επόμενα επίπεδα ομαλοποίησης δεδομένων σε πολύπλοκες βάσεις δεδομένων. Ωστόσο, θα συζητήσουμε σύντομα τα επόμενα επίπεδα ομαλοποιήσεων στα ακόλουθα.
BCNF (Κανονική φόρμα Boyce-Codd)
Ακόμα και όταν μια βάση δεδομένων είναι στην 3η Κανονική Φόρμα, θα προέκυπταν ανωμαλίες εάν είχε περισσότερα από ένα Κλειδί Υποψήφιου .
Μερικές φορές το BCNF αναφέρεται επίσης ως 3.5 Κανονική μορφή.
Κανόνες 4NF (τέταρτη κανονική φόρμα)
Αν δεν υπάρχει παρουσία πίνακα της βάσης δεδομένων περιέχει δύο ή περισσότερες ανεξάρτητες και πολλαπλών τιμών των δεδομένων που περιγράφει τη σχετική οντότητα, τότε είναι στο 4 ου Κανονική Μορφή.
Κανόνες 5NF (πέμπτη κανονική φόρμα)
Ένας πίνακας είναι στην 5η Κανονική Μορφή μόνο εάν είναι σε 4NF και δεν μπορεί να αποσυντεθεί σε οποιονδήποτε αριθμό μικρότερων πινάκων χωρίς απώλεια δεδομένων.
Προτείνεται 6NF (Έκτη κανονική μορφή)
Η 6η Κανονική Φόρμα δεν είναι τυποποιημένη, ωστόσο, συζητείται από ειδικούς της βάσης δεδομένων για αρκετό καιρό. Ας ελπίσουμε ότι θα έχουμε έναν σαφή και τυποποιημένο ορισμό για την 6η Κανονική Φόρμα στο εγγύς μέλλον…
Αυτό είναι όλο για την κανονικοποίηση SQL !!!
Περίληψη
- Ο σχεδιασμός βάσης δεδομένων είναι ζωτικής σημασίας για την επιτυχή εφαρμογή ενός συστήματος διαχείρισης βάσεων δεδομένων που πληροί τις απαιτήσεις δεδομένων ενός εταιρικού συστήματος.
- Η διαδικασία κανονικοποίησης στο DBMS βοηθά στην παραγωγή συστημάτων βάσης δεδομένων που είναι οικονομικά αποδοτικά και έχουν καλύτερα μοντέλα ασφαλείας.
- Οι λειτουργικές εξαρτήσεις είναι ένα πολύ σημαντικό στοιχείο της διαδικασίας ομαλοποίησης δεδομένων
- Τα περισσότερα συστήματα βάσεων δεδομένων είναι κανονικοποιημένη βάση δεδομένων έως και την τρίτη κανονική μορφή.
- Ένα πρωτεύον κλειδί που αναγνωρίζει μοναδικά είναι εγγραφή σε έναν πίνακα και δεν μπορεί να είναι μηδενικό
- Ένα ξένο κλειδί βοηθά στη σύνδεση πίνακα και αναφέρει ένα πρωτεύον κλειδί