database normalization tutorial
Αυτό το σεμινάριο θα εξηγήσει τι είναι η ομαλοποίηση βάσης δεδομένων και διάφορες κανονικές φόρμες όπως 1NF 2NF 3NF και BCNF με SQL Code Παραδείγματα:
Η Κανονικοποίηση Βάσης Δεδομένων είναι μια πολύ γνωστή τεχνική που χρησιμοποιείται για το σχεδιασμό σχήματος βάσης δεδομένων.
Ο κύριος σκοπός της εφαρμογής της τεχνικής ομαλοποίησης είναι να μειωθεί ο πλεονασμός και η εξάρτηση των δεδομένων. Η κανονικοποίηση μας βοηθά να χωρίσουμε τους μεγάλους πίνακες σε πολλούς μικρούς πίνακες, ορίζοντας μια λογική σχέση μεταξύ αυτών των πινάκων.
Τι θα μάθετε:
- Τι είναι η ομαλοποίηση βάσης δεδομένων;
- συμπέρασμα
Τι είναι η ομαλοποίηση βάσης δεδομένων;
Ομαλοποίηση βάσης δεδομένων ή κανονικοποίηση SQL μας βοηθά να ομαδοποιήσουμε σχετικά δεδομένα σε έναν μόνο πίνακα. Τυχόν δεδομένα απόδοσης ή έμμεσα σχετικά δεδομένα τοποθετούνται σε διαφορετικούς πίνακες και αυτοί οι πίνακες συνδέονται με μια λογική σχέση μεταξύ γονέων και θυγατρικών πινάκων.
Το 1970, ο Edgar F. Codd βρήκε την έννοια της ομαλοποίησης. Μοιράστηκε ένα έγγραφο με τίτλο «Ένα Σχεσιακό Μοντέλο Δεδομένων για Μεγάλες Κοινόχρηστες Τράπεζες» στο οποίο πρότεινε «Πρώτη Κανονική Φόρμα (1NF)».
Πλεονεκτήματα της κανονικοποίησης DBMS
Η κανονικοποίηση βάσης δεδομένων παρέχει τα ακόλουθα βασικά πλεονεκτήματα:
- Η κανονικοποίηση αυξάνει τη συνοχή των δεδομένων καθώς αποφεύγει την επανάληψη δεδομένων αποθηκεύοντας τα δεδομένα μόνο σε ένα μέρος.
- Η κανονικοποίηση βοηθά στην ομαδοποίηση όμοιων ή σχετικών δεδομένων στο ίδιο σχήμα, με αποτέλεσμα την καλύτερη ομαδοποίηση δεδομένων.
- Η κανονικοποίηση βελτιώνει την αναζήτηση πιο γρήγορα καθώς τα ευρετήρια μπορούν να δημιουργηθούν πιο γρήγορα. Ως εκ τούτου, η ομαλοποιημένη βάση δεδομένων ή πίνακας χρησιμοποιείται για OLTP (Online Transaction Processing).
Μειονεκτήματα της ομαλοποίησης βάσης δεδομένων
Η Κανονικοποίηση DBMS έχει τα ακόλουθα μειονεκτήματα:
- Δεν μπορούμε να βρούμε τα σχετικά δεδομένα, για παράδειγμα ένα προϊόν ή έναν υπάλληλο σε ένα μέρος και πρέπει να συμμετέχουμε σε περισσότερους από έναν πίνακες. Αυτό προκαλεί καθυστέρηση στην ανάκτηση των δεδομένων.
- Έτσι, η κανονικοποίηση δεν είναι καλή επιλογή στις συναλλαγές OLAP (Online Analytical Processing).
Προτού προχωρήσουμε περαιτέρω, ας κατανοήσουμε τους ακόλουθους όρους:
- Οντότητα: Η οντότητα είναι ένα πραγματικό αντικείμενο, όπου τα δεδομένα που σχετίζονται με ένα τέτοιο αντικείμενο αποθηκεύονται στον πίνακα. Το παράδειγμα τέτοιων αντικειμένων είναι εργαζόμενοι, τμήματα, μαθητές κ.λπ.
- Γνωρίσματα: Τα χαρακτηριστικά είναι τα χαρακτηριστικά της οντότητας, που δίνουν κάποιες πληροφορίες σχετικά με την οντότητα. Για παράδειγμα, Αν οι πίνακες είναι οντότητες, τότε οι στήλες είναι τα χαρακτηριστικά τους.
Τύποι κανονικών μορφών
# 1) 1NF (Πρώτη κανονική φόρμα)
Εξ ορισμού, μια οντότητα που δεν έχει επαναλαμβανόμενες στήλες ή ομάδες δεδομένων μπορεί να χαρακτηριστεί ως η πρώτη κανονική φόρμα. Στην πρώτη κανονική φόρμα, κάθε στήλη είναι μοναδική.
Ακολουθεί ο τρόπος με τον οποίο θα φαινόταν ο πίνακας «Υπάλληλοι και Τμήμα» εάν ήταν σε πρώτη κανονική μορφή (1NF):
empNum | επίθετο | όνομα | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Άντριου | Γρύλος | Λογαριασμοί | Νέα Υόρκη | Ηνωμένες Πολιτείες |
1002 | Σβάτς | Μικρόφωνο | Τεχνολογία | Νέα Υόρκη | Ηνωμένες Πολιτείες |
1009 | Φλιτζάνι | Βασανίζω | ΩΡ | Βερολίνο | Γερμανία |
1007 | Χάροβι | Πάρκερ | διαχειριστής | Λονδίνο | Ηνωμένο Βασίλειο |
1007 | Χάροβι | Πάρκερ | ΩΡ | Λονδίνο | Ηνωμένο Βασίλειο |
Εδώ, όλες οι στήλες των πινάκων των υπαλλήλων και των τμημάτων έχουν συσσωρευτεί σε μία και δεν υπάρχει ανάγκη σύνδεσης στηλών, όπως το deptNum, καθώς όλα τα δεδομένα είναι διαθέσιμα σε ένα μέρος.
Αλλά ένας πίνακας όπως αυτός με όλες τις απαιτούμενες στήλες σε αυτόν, δεν θα ήταν μόνο δύσκολο να διαχειριστεί, αλλά και δύσκολο να εκτελεστούν λειτουργίες και επίσης αναποτελεσματικός από την άποψη αποθήκευσης.
# 2) 2NF (δεύτερη κανονική φόρμα)
Εξ ορισμού, μια οντότητα που είναι 1NF και ένα από τα χαρακτηριστικά της ορίζεται ως το πρωτεύον κλειδί και τα υπόλοιπα χαρακτηριστικά εξαρτώνται από το πρωτεύον κλειδί.
Ακολουθεί ένα παράδειγμα του πώς θα μοιάζουν οι πίνακες υπαλλήλων και τμημάτων:
Πίνακας εργαζομένων:
empNum | επίθετο | όνομα |
---|---|---|
1001 | Άντριου | Γρύλος |
1002 | Σβάτς | Μικρόφωνο |
1009 | Φλιτζάνι | Βασανίζω |
1007 | Χάροβι | Πάρκερ |
1007 | Χάροβι | Πάρκερ |
Πίνακας Τμημάτων:
deptNum | deptName | deptCity | deptCountry |
---|---|---|---|
ένας | Λογαριασμοί | Νέα Υόρκη | Ηνωμένες Πολιτείες |
δύο | Τεχνολογία | Νέα Υόρκη | Ηνωμένες Πολιτείες |
3 | ΩΡ | Βερολίνο | Γερμανία |
4 | διαχειριστής | Λονδίνο | Ηνωμένο Βασίλειο |
Πίνακας EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
ένας | 1001 | ένας |
δύο | 1002 | δύο |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Εδώ, μπορούμε να παρατηρήσουμε ότι έχουμε χωρίσει τον πίνακα σε μορφή 1NF σε τρεις διαφορετικούς πίνακες. Ο πίνακας υπαλλήλων είναι μια οντότητα για όλους τους υπαλλήλους μιας εταιρείας και τα χαρακτηριστικά της περιγράφουν τις ιδιότητες κάθε υπαλλήλου. Το κύριο κλειδί για αυτόν τον πίνακα είναι το empNum.
Ομοίως, ο πίνακας τμημάτων είναι μια οντότητα για όλα τα τμήματα μιας εταιρείας και τα χαρακτηριστικά της περιγράφουν τις ιδιότητες κάθε τμήματος. Το κύριο κλειδί για αυτόν τον πίνακα είναι το deptNum.
Στον τρίτο πίνακα, έχουμε συνδυάσει τα κύρια κλειδιά και των δύο πινάκων. Τα κύρια κλειδιά των πινάκων Εργαζομένων και Τμημάτων αναφέρονται ως Ξένα κλειδιά σε αυτόν τον τρίτο πίνακα.
Εάν ο χρήστης θέλει μια έξοδο παρόμοια με αυτήν, είχαμε στο 1NF, τότε ο χρήστης πρέπει να ενώσει και τους τρεις πίνακες, χρησιμοποιώντας τα κύρια πλήκτρα.
Ένα δείγμα ερωτήματος θα φαίνεται όπως φαίνεται παρακάτω:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (τρίτη κανονική φόρμα)
Εξ ορισμού, ένας πίνακας θεωρείται στο τρίτο κανονικό εάν ο πίνακας / οντότητα βρίσκεται ήδη στη δεύτερη κανονική μορφή και οι στήλες του πίνακα / οντότητας δεν εξαρτώνται μεταβατικά από το πρωτεύον κλειδί.
Ας κατανοήσουμε τη μη μεταβατική εξάρτηση, με τη βοήθεια του παρακάτω παραδείγματος.
Ας πούμε έναν πίνακα με όνομα, Ο πελάτης έχει τις παρακάτω στήλες:
Κωδικός πελάτη - Κύριο κλειδί που προσδιορίζει έναν μοναδικό πελάτη
ΠελάτηςZIP - Ο ταχυδρομικός κώδικας του πελάτη τοποθεσίας κατοικεί
Πελάτης - Πόλη στην οποία κατοικεί ο πελάτης
Στην παραπάνω περίπτωση, η στήλη CustomerCity εξαρτάται από τη στήλη CustomerZIP και η στήλη CustomerZIP εξαρτάται από το CustomerID.
Το παραπάνω σενάριο ονομάζεται μεταβατική εξάρτηση της στήλης CustomerCity στο CustomerID, δηλαδή το πρωτεύον κλειδί. Αφού κατανοήσουμε τη μεταβατική εξάρτηση, ας συζητήσουμε τώρα το πρόβλημα με αυτήν την εξάρτηση.
Θα μπορούσε να υπάρξει ένα πιθανό σενάριο όπου μια ανεπιθύμητη ενημέρωση γίνεται στον πίνακα για την ενημέρωση του CustomerZIP σε έναν ταχυδρομικό κώδικα διαφορετικής πόλης χωρίς ενημέρωση του CustomerCity, αφήνοντας έτσι τη βάση δεδομένων σε ασυνεπή κατάσταση.
Για να διορθώσουμε αυτό το ζήτημα, πρέπει να καταργήσουμε τη μεταβατική εξάρτηση που θα μπορούσε να γίνει δημιουργώντας έναν άλλο πίνακα, ας πούμε, τον πίνακα CustZIP που περιέχει δύο στήλες, δηλαδή CustomerZIP (ως Κύριο κλειδί) και CustomerCity
Η στήλη CustomerZIP στον πίνακα Customer είναι ξένο κλειδί για το CustomerZIP στον πίνακα CustZIP. Αυτή η σχέση διασφαλίζει ότι δεν υπάρχει ανωμαλία στις ενημερώσεις όπου το CustomerZIP ενημερώνεται χωρίς να πραγματοποιεί αλλαγές στο CustomerCity.
# 4) Κανονική φόρμα Boyce-Codd (Κανονική φόρμα 3,5)
Εξ ορισμού, ο πίνακας θεωρείται κανονική φόρμα Boyce-Codd, εάν βρίσκεται ήδη στην τρίτη κανονική φόρμα και για κάθε λειτουργική εξάρτηση μεταξύ Α και Β, το Α πρέπει να είναι ένα υπερ-κλειδί.
Αυτός ο ορισμός ακούγεται λίγο περίπλοκος. Ας προσπαθήσουμε να το σπάσουμε για να το καταλάβουμε καλύτερα.
- Λειτουργική εξάρτηση: Τα χαρακτηριστικά ή οι στήλες ενός πίνακα λέγεται ότι εξαρτώνται λειτουργικά όταν ένα χαρακτηριστικό ή μια στήλη ενός πίνακα προσδιορίζει μοναδικά άλλα χαρακτηριστικά ή στήλες του ίδιου πίνακα.
Για παράδειγμα, Η στήλη empNum ή αριθμός υπαλλήλου προσδιορίζει με μοναδικό τρόπο τις άλλες στήλες όπως το όνομα υπαλλήλου, μισθός υπαλλήλου κ.λπ. στον πίνακα υπαλλήλων. - Σούπερ κλειδί: Ένα μεμονωμένο κλειδί ή μια ομάδα πολλαπλών πλήκτρων που θα μπορούσαν να προσδιορίσουν μοναδικά μια μεμονωμένη σειρά σε έναν πίνακα μπορεί να ονομαστεί ως Super Key. Σε γενικές γραμμές, γνωρίζουμε κλειδιά όπως τα σύνθετα κλειδιά.
Ας εξετάσουμε το ακόλουθο σενάριο για να κατανοήσουμε πότε υπάρχει πρόβλημα με την Τρίτη Κανονική Φόρμα και πώς το Boyce-Codd Normal Form έρχεται να σώσει.
empNum | όνομα | empCity | deptName | DeptHead |
---|---|---|---|---|
1001 | Γρύλος | Νέα Υόρκη | Λογαριασμοί | Ραϋμόνδος |
1001 | Γρύλος | Νέα Υόρκη | Τεχνολογία | Ντόναλντ |
1002 | Βασανίζω | Βερολίνο | Λογαριασμοί | Samara |
1007 | Πάρκερ | Λονδίνο | ΩΡ | Ελισάβετ |
1007 | Πάρκερ | Λονδίνο | Υποδομή | Κάποιος |
Στο παραπάνω παράδειγμα, οι υπάλληλοι με empNum 1001 και 1007 εργάζονται σε δύο διαφορετικά τμήματα. Κάθε τμήμα έχει επικεφαλής τμήματος. Μπορεί να υπάρχουν πολλοί επικεφαλής τμημάτων για κάθε τμήμα. Όπως και για το τμήμα Λογαριασμών, οι Raymond και Samara είναι οι δύο επικεφαλής τμημάτων.
Σε αυτήν την περίπτωση, το empNum και το deptName είναι σούπερ κλειδιά, πράγμα που σημαίνει ότι το deptName είναι ένα πρωταρχικό χαρακτηριστικό. Με βάση αυτές τις δύο στήλες, μπορούμε να αναγνωρίσουμε κάθε μεμονωμένη σειρά μοναδικά.
Επίσης, το deptName εξαρτάται από το deptHead, το οποίο υπονοεί ότι το deptHead είναι ένα μη πρωταρχικό χαρακτηριστικό. Αυτό το κριτήριο αποκλείει τον πίνακα από το να αποτελεί μέρος του BCNF.
Για να το λύσουμε αυτό, θα χωρίσουμε τον πίνακα σε τρεις διαφορετικούς πίνακες όπως αναφέρεται παρακάτω:
Πίνακας εργαζομένων:
empNum | όνομα | empCity | deptNum |
---|---|---|---|
1001 | Γρύλος | Νέα Υόρκη | Δ1 |
1001 | Γρύλος | Νέα Υόρκη | Δ2 |
1002 | Βασανίζω | Βερολίνο | Δ1 |
1007 | Πάρκερ | Λονδίνο | Δ3 |
1007 | Πάρκερ | Λονδίνο | Δ4 |
Τμήμα Τμήματος:
deptNum | deptName | DeptHead |
---|---|---|
Δ1 | Λογαριασμοί | Ραϋμόνδος |
Δ2 | Τεχνολογία | Ντόναλντ |
Δ1 | Λογαριασμοί | Samara |
Δ3 | ΩΡ | Ελισάβετ |
Δ4 | Υποδομή | Κάποιος |
# 5) Τέταρτη κανονική φόρμα (4 κανονική φόρμα)
Εξ ορισμού, ένας πίνακας είναι στην τέταρτη κανονική μορφή, εάν δεν έχει δύο ή περισσότερα, ανεξάρτητα δεδομένα που περιγράφουν τη σχετική οντότητα.
# 6) Πέμπτη κανονική φόρμα (5 κανονική φόρμα)
Ένας πίνακας μπορεί να εξεταστεί στην πέμπτη κανονική φόρμα μόνο εάν πληροί τις προϋποθέσεις για την τέταρτη κανονική φόρμα και μπορεί να χωριστεί σε πολλούς πίνακες χωρίς απώλεια δεδομένων.
Συχνές Ερωτήσεις και Απαντήσεις
Q # 1) Τι είναι η ομαλοποίηση σε μια βάση δεδομένων;
Απάντηση: Η κανονικοποίηση βάσης δεδομένων είναι μια τεχνική σχεδιασμού. Χρησιμοποιώντας αυτό μπορούμε να σχεδιάσουμε ή να ξανασχεδιάσουμε σχήματα στη βάση δεδομένων για να μειώσουμε τα περιττά δεδομένα και την εξάρτηση των δεδομένων, χωρίζοντας τα δεδομένα σε μικρότερους και πιο σχετικούς πίνακες.
Q # 2) Ποιοι είναι οι διαφορετικοί τύποι κανονικοποίησης;
Απάντηση: Ακολουθούν οι διαφορετικοί τύποι τεχνικών κανονικοποίησης που μπορούν να χρησιμοποιηθούν για το σχεδιασμό σχημάτων βάσεων δεδομένων:
- Πρώτη κανονική φόρμα (1NF)
- Δεύτερη κανονική φόρμα (2NF)
- Τρίτη κανονική μορφή (3NF)
- Κανονική φόρμα Boyce-Codd (3.5NF)
- Τέταρτη κανονική μορφή (4NF)
- Πέμπτη κανονική μορφή (5NF)
Q # 3) Ποιος είναι ο σκοπός της ομαλοποίησης;
Απάντηση: Ο πρωταρχικός σκοπός της κανονικοποίησης είναι να μειωθεί ο πλεονασμός δεδομένων, δηλαδή τα δεδομένα θα πρέπει να αποθηκεύονται μόνο μία φορά. Αυτό γίνεται για να αποφευχθούν τυχόν ανωμαλίες δεδομένων που θα μπορούσαν να προκύψουν όταν προσπαθούμε να αποθηκεύσουμε τα ίδια δεδομένα σε δύο διαφορετικούς πίνακες, αλλά οι αλλαγές εφαρμόζονται μόνο σε έναν και όχι στον άλλο.
Q # 4) Τι είναι η αποδιαμόρφωση;
Απάντηση: Η αποδιαμόρφωση είναι μια τεχνική για την αύξηση της απόδοσης της βάσης δεδομένων. Αυτή η τεχνική προσθέτει περιττά δεδομένα στη βάση δεδομένων, σε αντίθεση με την κανονικοποιημένη βάση δεδομένων που αφαιρεί τον πλεονασμό των δεδομένων.
ποια είναι η φάση υλοποίησης στο sdlc
Αυτό γίνεται σε τεράστιες βάσεις δεδομένων όπου η εκτέλεση ενός JOIN για τη λήψη δεδομένων από πολλούς πίνακες είναι μια ακριβή υπόθεση. Έτσι, τα περιττά δεδομένα αποθηκεύονται σε πολλούς πίνακες για να αποφευχθούν οι λειτουργίες JOIN.
συμπέρασμα
Μέχρι στιγμής, όλοι έχουμε περάσει από τρεις φόρμες κανονικοποίησης βάσης δεδομένων.
Θεωρητικά, υπάρχουν υψηλότερες μορφές ομαλοποιήσεων βάσεων δεδομένων όπως Boyce-Codd Normal Form, 4NF, 5NF. Ωστόσο, το 3NF είναι η ευρέως χρησιμοποιούμενη μορφή κανονικοποίησης στις βάσεις δεδομένων παραγωγής.
Καλή ανάγνωση !!
Συνιστώμενη ανάγνωση
- Δοκιμή βάσης δεδομένων με JMeter
- MongoDB Δημιουργία αντιγράφων ασφαλείας βάσης δεδομένων
- Οδηγός δημιουργίας βάσης δεδομένων MongoDB
- Κορυφαία 10 εργαλεία σχεδίασης βάσεων δεδομένων για τη δημιουργία σύνθετων μοντέλων δεδομένων
- Απόδοση MongoDB: Απόδοση κλειδώματος, σφάλματα σελίδας και προφίλ βάσης δεδομένων
- Επισκόπηση σχεσιακής βάσης δεδομένων ανοιχτού κώδικα Altibase
- MongoDB Database Profiler για παρακολούθηση ερωτημάτων και επιδόσεων
- Πώς να δοκιμάσετε τη βάση δεδομένων της Oracle