Κανονοποίηση DBMS: Παράδειγμα βάσης δεδομένων 1NF, 2NF, 3NF
Τι είναι η κανονικοποίηση βάσεων δεδομένων;
Ομαλοποίηση είναι μια τεχνική σχεδιασμού βάσης δεδομένων που μειώνει τον πλεονασμό δεδομένων και εξαλείφει ανεπιθύμητα χαρακτηριστικά όπως ανωμαλίες εισαγωγής, ενημέρωσης και διαγραφής. Οι κανόνες κανονικοποίησης διαιρούν τους μεγαλύτερους πίνακες σε μικρότερους πίνακες και τους συνδέουν χρησιμοποιώντας σχέσεις. Ο σκοπός της Κανονικοποίησης στην SQL είναι να εξαλείψει τα περιττά (επαναλαμβανόμενα) δεδομένα και να διασφαλίσει ότι τα δεδομένα αποθηκεύονται λογικά.
Ο εφευρέτης του σχεσιακό μοντέλο Ο Edgar Codd πρότεινε τη θεωρία της κανονικοποίησης των δεδομένων με την εισαγωγή της Πρώτης Κανονικής Μορφής και συνέχισε να επεκτείνει τη θεωρία με τη Δεύτερη και την Τρίτη Κανονική Μορφή. Later ενώθηκε με τον Raymond F. Boyce για να αναπτύξει τη θεωρία του Boyce-Codd Normal Form.
Τύποι κανονικών φορμών στο DBMS
Ακολουθεί μια λίστα με κανονικές φόρμες στην SQL:
- 1NF (Πρώτη κανονική μορφή): Διασφαλίζει ότι ο πίνακας της βάσης δεδομένων είναι οργανωμένος έτσι ώστε κάθε στήλη να περιέχει ατομικές (αδιαίρετες) τιμές και ότι κάθε εγγραφή είναι μοναδική. Αυτό εξαλείφει τις επαναλαμβανόμενες ομάδες, δομώντας έτσι τα δεδομένα σε πίνακες και στήλες.
- 2NF (Δεύτερη κανονική φόρμα): Βασίζεται σε 1NF από Πρέπει να καταργήσουμε τα περιττά δεδομένα από έναν πίνακα που εφαρμόζεται σε πολλές σειρές. και τοποθέτησή τους σε ξεχωριστούς πίνακες. Απαιτεί όλα τα χαρακτηριστικά που δεν είναι κλειδί να είναι πλήρως λειτουργικά στο πρωτεύον κλειδί.
- 3NF (τρίτη κανονική μορφή): Επεκτείνει το 2NF διασφαλίζοντας ότι όλα τα χαρακτηριστικά που δεν είναι κλειδί δεν είναι μόνο πλήρως λειτουργικά στο πρωτεύον κλειδί αλλά και ανεξάρτητα το ένα από το άλλο. Αυτό εξαλείφει τη μεταβατική εξάρτηση.
- BCNF (Κανονική φόρμα Boyce-Codd): Μια βελτίωση του 3NF που αντιμετωπίζει ανωμαλίες που δεν αντιμετωπίζονται από το 3NF. Απαιτεί κάθε καθοριστικό παράγοντα να είναι υποψήφιο κλειδί, διασφαλίζοντας ακόμη πιο αυστηρή τήρηση των κανόνων κανονικοποίησης.
- 4NF (Τέταρτη κανονική φόρμα): Αντιμετωπίζει εξαρτήσεις πολλαπλών τιμών. Διασφαλίζει ότι δεν υπάρχουν πολλαπλά ανεξάρτητα στοιχεία πολλαπλών τιμών για μια οντότητα σε μια εγγραφή.
- 5NF (πέμπτη κανονική μορφή): Γνωστό και ως "Προβολή-Σύνδεση Κανονική Φόρμα" (PJNF), Αφορά την ανασύνθεση πληροφοριών από μικρότερα, διαφορετικά διατεταγμένα τεμάχια δεδομένων.
- 6NF (Έκτη Κανονική Μορφή): Θεωρητικό και όχι ευρέως εφαρμοσμένο. Ασχολείται με χρονικά δεδομένα (χειρισμός αλλαγών με την πάροδο του χρόνου) με περαιτέρω αποσύνθεση πινάκων για την εξάλειψη κάθε μη χρονικού πλεονασμού.
Η θεωρία της κανονικοποίησης δεδομένων στο MySQL ο διακομιστής αναπτύσσεται ακόμη περαιτέρω. Για παράδειγμα, γίνονται συζητήσεις ακόμη και για το 6th Κανονική φόρμα. Ωστόσο, στις περισσότερες πρακτικές εφαρμογές, η κανονικοποίηση επιτυγχάνει τα μέγιστα σε 3rd Κανονική φόρμα. Η εξέλιξη της κανονικοποίησης στις θεωρίες SQL απεικονίζεται παρακάτω-
Κανονοποίηση βάσης δεδομένων με παραδείγματα
βάση δεδομένων Παράδειγμα κανονικοποίησης μπορεί να γίνει εύκολα κατανοητό με τη βοήθεια μιας μελέτης περίπτωσης. Ας υποθέσουμε ότι μια βιβλιοθήκη βίντεο διατηρεί μια βάση δεδομένων με τις ταινίες που νοικιάζονται. Χωρίς καμία κανονικοποίηση στη βάση δεδομένων, όλες οι πληροφορίες αποθηκεύονται σε έναν πίνακα όπως φαίνεται παρακάτω. Ας κατανοήσουμε τη βάση δεδομένων κανονικοποίησης με παράδειγμα κανονικοποίησης με λύση:
Εδώ βλέπετε Η στήλη "Νοικιασμένες ταινίες" έχει πολλές τιμές. Τώρα ας προχωρήσουμε στην 1η κανονική φόρμα:
Πρώτη κανονική φόρμα (1NF)
- Κάθε κελί πίνακα θα πρέπει να περιέχει μία μόνο τιμή.
- Κάθε εγγραφή πρέπει να είναι μοναδική.
Ο παραπάνω πίνακας στο 1NF-
1NF Παράδειγμα
Πριν προχωρήσουμε ας καταλάβουμε μερικά πράγματα —
Τι είναι το KEY στην SQL
A KEY στην SQL είναι μια τιμή που χρησιμοποιείται για τον μοναδικό προσδιορισμό εγγραφών σε έναν πίνακα. Ένα SQL KEY είναι μια στήλη ή συνδυασμός πολλαπλών στηλών που χρησιμοποιείται για τον μοναδικό προσδιορισμό γραμμών ή πλειάδων στον πίνακα. Το κλειδί SQL χρησιμοποιείται για τον εντοπισμό διπλότυπων πληροφοριών και βοηθά επίσης στη δημιουργία μιας σχέσης μεταξύ πολλών πινάκων στη βάση δεδομένων.
Σημείωση: Οι στήλες σε έναν πίνακα που ΔΕΝ χρησιμοποιούνται για τον μοναδικό προσδιορισμό μιας εγγραφής ονομάζονται στήλες χωρίς κλειδί.
Τι είναι το πρωτεύον κλειδί;
Το πρωτεύον είναι μια τιμή μιας στήλης που χρησιμοποιείται για τον μοναδικό προσδιορισμό μιας εγγραφής βάσης δεδομένων.
Έχει τα ακόλουθα χαρακτηριστικά
- A πρωτεύων κλειδί δεν μπορεί να είναι NULL
- Μια τιμή πρωτεύοντος κλειδιού πρέπει να είναι μοναδική
- Οι τιμές του πρωτεύοντος κλειδιού πρέπει να αλλάζουν σπάνια
- Στο πρωτεύον κλειδί πρέπει να δοθεί μια τιμή όταν εισάγεται μια νέα εγγραφή.
Τι είναι το Σύνθετο Κλειδί;
Ένα σύνθετο κλειδί είναι ένα πρωτεύον κλειδί που αποτελείται από πολλές στήλες που χρησιμοποιούνται για τον μοναδικό προσδιορισμό μιας εγγραφής
Στη βάση δεδομένων μας, έχουμε δύο άτομα με το ίδιο όνομα Robert Phil, αλλά ζουν σε διαφορετικά μέρη.
Ως εκ τούτου, απαιτούμε τόσο το Πλήρες Όνομα όσο και τη Διεύθυνση για να προσδιορίσουμε μια εγγραφή μοναδικά. Αυτό είναι ένα σύνθετο κλειδί.
Ας περάσουμε στη δεύτερη κανονική μορφή 2NF
Δεύτερη κανονική φόρμα (2NF)
- Κανόνας 1- Να είστε στο 1NF
- Κανόνας 2- Πρωτεύον κλειδί μονής στήλης που δεν εξαρτάται λειτουργικά από οποιοδήποτε υποσύνολο σχέσης υποψηφίου κλειδιού
Είναι σαφές ότι δεν μπορούμε να προχωρήσουμε στη δημιουργία της απλής βάσης δεδομένων μας σε 2nd Φόρμα κανονικοποίησης εκτός και αν χωρίσουμε τον παραπάνω πίνακα.
Έχουμε χωρίσει τον πίνακα 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
Τώρα το μικρό μας παράδειγμα βρίσκεται σε ένα επίπεδο που δεν μπορεί να αποσυντεθεί περαιτέρω για να επιτευχθούν τύποι κανονικοποίησης υψηλότερης κανονικής μορφής στο DBMS. Στην πραγματικότητα, βρίσκεται ήδη σε υψηλότερες μορφές κανονικοποίησης. Σε πολύπλοκες βάσεις δεδομένων απαιτούνται συνήθως ξεχωριστές προσπάθειες για τη μετάβαση στα επόμενα επίπεδα ομαλοποίησης δεδομένων. Ωστόσο, θα συζητήσουμε συνοπτικά τα επόμενα επίπεδα κανονικοποίησης στο DBMS στη συνέχεια.
Κανονική φόρμα Boyce-Codd (BCNF)
Ακόμη και όταν μια βάση δεδομένων είναι σε 3rd Κανονική μορφή, και πάλι θα προέκυπταν ανωμαλίες εάν έχει περισσότερες από μία Υποψηφίου Κλειδί.
Μερικές φορές το BCNF αναφέρεται επίσης ως 3.5 Κανονική μορφή.
Τέταρτη κανονική μορφή (4NF)
Εάν κανένα στιγμιότυπο πίνακα βάσης δεδομένων δεν περιέχει δύο ή περισσότερα, ανεξάρτητα και πολυτιμών δεδομένων που περιγράφουν τη σχετική οντότητα, τότε είναι σε 4th Κανονική φόρμα.
Πέμπτη κανονική μορφή (5NF)
Ένας πίνακας είναι στο 5th Κανονική μορφή μόνο εάν είναι σε 4NF και δεν μπορεί να αποσυντεθεί σε οποιοδήποτε αριθμό μικρότερων πινάκων χωρίς απώλεια δεδομένων.
Προτεινόμενη έκτη κανονική μορφή (6NF).
6th Η Κανονική Μορφή δεν είναι τυποποιημένη, ωστόσο, συζητείται από ειδικούς της βάσης δεδομένων εδώ και αρκετό καιρό. Ας ελπίσουμε ότι θα είχαμε έναν σαφή και τυποποιημένο ορισμό για το 6th Κανονική φόρμα στο εγγύς μέλλον…
Πλεονεκτήματα της κανονικής μορφής
- Βελτίωση της συνέπειας δεδομένων: Η κανονικοποίηση διασφαλίζει ότι κάθε κομμάτι δεδομένων αποθηκεύεται μόνο σε ένα μέρος, μειώνοντας τις πιθανότητες ασυνεπών δεδομένων. Όταν τα δεδομένα ενημερώνονται, χρειάζεται να ενημερωθούν μόνο σε ένα μέρος, διασφαλίζοντας τη συνέπεια.
- Μειώστε τον πλεονασμό δεδομένων: Η κανονικοποίηση βοηθά στην εξάλειψη των διπλότυπων δεδομένων διαιρώντας τα σε πολλούς, σχετικούς πίνακες. Αυτό μπορεί να εξοικονομήσει χώρο αποθήκευσης και επίσης να κάνει τη βάση δεδομένων πιο αποτελεσματική.
- Βελτίωση της απόδοσης ερωτήματος: Οι κανονικοποιημένες βάσεις δεδομένων είναι συχνά πιο εύκολο να αναζητηθούν. Επειδή τα δεδομένα είναι οργανωμένα λογικά, τα ερωτήματα μπορούν να βελτιστοποιηθούν για να εκτελούνται πιο γρήγορα.
- Κάντε τα δεδομένα πιο ουσιαστικά: Η κανονικοποίηση περιλαμβάνει την ομαδοποίηση δεδομένων με τρόπο που έχει νόημα και είναι διαισθητικό. Αυτό μπορεί να κάνει τη βάση δεδομένων πιο κατανοητή και πιο εύκολη στη χρήση, ειδικά για άτομα που δεν σχεδίασαν τη βάση δεδομένων.
- Μειώστε τις πιθανότητες ανωμαλιών: Οι ανωμαλίες είναι προβλήματα που μπορεί να προκύψουν κατά την προσθήκη, ενημέρωση ή διαγραφή δεδομένων. Η κανονικοποίηση μπορεί να μειώσει τις πιθανότητες αυτών των ανωμαλιών διασφαλίζοντας ότι τα δεδομένα είναι λογικά οργανωμένα.
Μειονεκτήματα της κανονικοποίησης
- Αυξημένη πολυπλοκότητα: Η ομαλοποίηση μπορεί να οδηγήσει σε περίπλοκες σχέσεις. Ένας μεγάλος αριθμός τραπεζιών με ξένα κλειδιά μπορεί να είναι δύσκολο να διαχειριστεί, οδηγώντας σε σύγχυση.
- Μειωμένη ευελιξία: Λόγω των αυστηρών κανόνων κανονικοποίησης, ενδέχεται να υπάρχει λιγότερη ευελιξία στην αποθήκευση δεδομένων που δεν συμμορφώνονται με αυτούς τους κανόνες.
- Αυξημένες απαιτήσεις αποθήκευσης: Ενώ η κανονικοποίηση μειώνει τον πλεονασμό, μπορεί να είναι απαραίτητο να διατεθεί περισσότερος χώρος αποθήκευσης για να χωρέσουν οι πρόσθετοι πίνακες και οι δείκτες.
- Γενικά έξοδα απόδοσης: Η ένωση πολλών τραπεζιών μπορεί να είναι δαπανηρή όσον αφορά την απόδοση. Όσο πιο κανονικοποιημένα είναι τα δεδομένα, τόσο περισσότερες συνδέσεις χρειάζονται, γεγονός που μπορεί να επιβραδύνει τους χρόνους ανάκτησης δεδομένων.
- Απώλεια περιβάλλοντος δεδομένων: Η κανονικοποίηση αναλύει τα δεδομένα σε ξεχωριστούς πίνακες, γεγονός που μπορεί να οδηγήσει σε απώλεια επιχειρηματικού πλαισίου. Η εξέταση των σχετικών πινάκων είναι απαραίτητη για την κατανόηση του πλαισίου ενός τμήματος δεδομένων.
- Ανάγκη για ειδικές γνώσεις: Η εφαρμογή μιας κανονικοποιημένης βάσης δεδομένων απαιτεί βαθιά κατανόηση των δεδομένων, των σχέσεων μεταξύ των δεδομένων και των κανόνων κανονικοποίησης. Αυτό απαιτεί ειδικές γνώσεις και μπορεί να είναι χρονοβόρο.
Αυτό είναι όλο για την κανονικοποίηση SQL!!!
Συμπέρασμα
- Σχεδιασμός βάσης δεδομένων είναι ζωτικής σημασίας για την επιτυχή εφαρμογή ενός συστήματος διαχείρισης βάσεων δεδομένων που πληροί τις απαιτήσεις δεδομένων ενός εταιρικού συστήματος.
- Η κανονικοποίηση στο DBMS είναι μια διαδικασία που βοηθά στην παραγωγή συστημάτων βάσεων δεδομένων που είναι οικονομικά αποδοτικά και διαθέτουν καλύτερα μοντέλα ασφάλειας.
- Οι λειτουργικές εξαρτήσεις είναι ένα πολύ σημαντικό συστατικό της διαδικασίας κανονικοποίησης δεδομένων
- Τα περισσότερα συστήματα βάσεων δεδομένων είναι κανονικοποιημένη βάση δεδομένων μέχρι την τρίτη κανονική μορφή στο DBMS.
- Ένα πρωτεύον κλειδί προσδιορίζει μοναδικά τις εγγραφές σε έναν Πίνακα και δεν μπορεί να είναι μηδενικό
- Ένα ξένο κλειδί βοηθά στη σύνδεση του πίνακα και παραπέμπει σε ένα πρωτεύον κλειδί