Skip to main content
Κανονικοποίηση Βάσης Δεδομένων

Κανονικοποίηση Βάσης Δεδομένων

Η διαδικασία Κανονικοποίηση Βάσης Δεδομένων (normalization process) δημιουργήθηκε από τον Codd (δημιουργό του σχεσιακού μοντέλου) το 1970 (1NF,2NF,3NF) και το 1971 μαζί με τον Raymond F. Boyce ορίσαν και το τέταρτο επίπεδο (BCNF) .

Ένα σχεσιακό σχήμα μιας Β.Δ μπορεί να έχει κάποια μη-επιθυμητά χαρακτηριστικά, όπως για παράδειγμα να εμφανίζει πλεονασμό (redundancy) και διάφορες δυσλειτουργίες (anomalies) εξ’αιτίας αυτού.

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

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

 

 Κανονικοποίηση Βάσης Δεδομένων

 

Παράδειγμα προβλήματος μη κανονικοποιημένου πίνακα

 

sxima_1.1__                                                            Σχήμα 1.1

Insertion problem: Αν υποθέσουμε ότι θέλουμε να εισάγουμε τα στοιχεία ενός καινούριου μαθητή ο οποίος όμως δεν παρακολουθεί κάποιο μάθημα, τότε θα πρέπει να εισάγουμε NULL στην στήλη Lesson και να οδηγηθούμε τελικά σε προβληματική εισαγωγή.

Deletion problem: Αν ο μαθητής με ID 301 σταματήσει προσωρινά να παρακολουθεί το μάθημα θα σβήσουμε την συγκεκριμένη εγγραφή με αποτέλεσμα να χάσουμε όλα τα στοιχεία του.

Updating problem: Για να αλλάξουμε την Πόλη ενός μαθητή ο οποίος υπάρχει 2 ή  παραπάνω φορές στον πίνακα πρέπει να αλλάξουμε την στήλη Student_City σε όλες τις εγγραφές αλλιώς τα δεδομένα μας θα είναι ασυνεπή.

 

Παραπλανητικές περιπτώσεις πλεονασμού

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

 

sxima1.2__                                                           Σχήμα 1.2

Στο παραπάνω (Σχήμα 1.2) με έναν οπτικό έλεγχο δεν μπορούμε να εντοπίσουμε κάποιο πλεονασμό πληροφορίας , αν επίσης αποδεχτούμε ότι «κάθε καθηγητής είναι υπεύθυνος για το πολύ ένα μάθημα», τότε σίγουρα δεν έχουμε πλεονασμό και συνεπώς δεν χρειάζεται κάποια ενέργεια από εμάς.

Αν όμως ένας καθηγητής μπορούσε να είναι υπεύθυνος για 2 ή και περισσότερα μαθήματα τότε μια πιθανή εισαγωγή της εγγραφής (’12’, 70, ‘ΣΓΑΡΜΠΑΣ’) θα μας δημιουργούσε πλεονασμό.

Από τα παραπάνω λοιπόν είναι φανερό ότι τα περιεχόμενα ή/και η δομή ενός πίνακα δεν είναι αρκετά για να βγάλει κανείς συμπέρασμα εάν έχουμε η όχι πλεονασμό.
Σαυτό το σημείο λοιπόν μπαίνουν στο παιχνίδι και οι Επιχειρησιακοί κανόνες (business rules ).

   Οι Επιχειρησιακοί κανόνες δεν είναι τίποτα παραπάνω από την λογική και τους κανόνες της εκάστοτε εφαρμογής που χαρακτηρίζουν τα δεδομένα. Είναι σημαντικό να γνωρίζουμε τους κανόνες γιατί έτσι έχουμε ένα ολοκληρωμένο εννοιολογικό μοντέλο της Β.Δ με γνώμονα μια εφαρμογή.
Μόνο τότε μπορούμε να βρούμε τυχόν προβλήματα και να προχωρήσουμε στις απαραίτητες ενέργειες για την δημιουργία ενός σχεσιακού σχήματος απαλαγμένο από τυχόν πλεονασμό.


 Συναρτησιακές εξαρτήσεις (functional dependencies)

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

Α –> Β (συμβολισμός εξάρτησης)

Στις σχέσεις συναρτησιακής εξάρτησης ισχύει ο κανόνας της μεταβατικής ιδιότητας, αν το Α είναι ορίζουσα του Β και Β η ορίζουσα του Γ, τότε το Α είναι η ορίζουσα και του Γ.

Α –> Β –> Γ

 

First Normal Form (1NF)

Μια σχέση (πίνακας) βρίσκεται στην πρώτη κανονική μορφή αν (αυστηρά) τα πεδία της περιέχουν ατομικές τιμές.

Μια βασική αρχή μιας κανονικοποιημένης σχέσης (πίνακα) είναι πώς οι τιμές των πεδίων πρέπει να είναι ‘ατομικές’, που σημαίνει πως μία σωστή σχεσιακή σχεδίαση δεν πρέπει να επιτρέπει πλειότιμα κατηγορήματα στα πεδία.

Παράδειγμα:

Έστω πως έχουμε τον παρακάτω πίνακα

sxima_1.3                                                          Σχήμα 1.3

Η παραπάνω δομή ενός στιγμιότυπου του πίνακα μας περιέχει  πλειότιμα πεδία στην στήλη Lesson. Μεταξύ άλλων δύο χαρακτηριστικά προβλήματα που μας δημιουργεί η παραπάνω διάταξη είναι στην επεξεργασία ερωτήσεων που αφορούν το πεδίο Lesson, αφού κανείς πρέπει να χρησιμοποιήσει τον τελεστή LIKE και δεύτερον ότι δεν μπορούμε θεωρητικά να ορίσουμε άνω όριο στο μήκος του πλειότιμου πεδίου.

 Ένας πρώτος τρόπος για την εξάλειψη των πλειότιμων πεδίων είναι μία αναδιάρθρωση του πίνακα με κάθετο τρόπο με την κατάλληλη επανάληψη τιμών (Σχήμα 1.4).

 

sxima_1.4                                                        Σχήμα 1.4

Όπως όμως μπορείτε να παρατηρήσετε η παραπάνω ενέργεια μάς εμφανίζει συμπτώματα πλεονασμού στον πίνακα.

Γι’αυτό λοιπόν χρησιμοποιούμε ένα δεύτερο τρόπο που είναι η αποδόμηση του πίνακα μας, του σχήματος 1.3, σε δύο πίνακες  έτσι ώστε το πλειότιμο κατηγόρημα να αποτελέσει έναν καινούριο πίνακα και τα υπόλοιπα πεδία να μείνουν σε ένα δεύτερο πίνακα. Πρέπει βέβαια να φροντίσουμε για την σύνδεση των δύο πινάκων.Το αποτέλεσμα φαίνεται παρακάτω (Σχήμα 1.5).

 

sxima_1.5                                                        Σχήμα 1.5

 

 

Second Normal Form (2NF)

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

(Υποψήφιο κλειδί – ένα υποψήφιο κλειδί μπορεί να είναι οποιαδήποτε στήλη ή ένας συνδυασμός των στηλών που μπορούν να χαρακτηριστούν ως μοναδικό κλειδί στη βάση δεδομένων. Μπορεί να υπάρχουν πολλά υποψήφια κλειδιά σε έναν πίνακα. Κάθε υποψήφιο κλειδί μπορεί να χαρακτηρισθεί ως πρωτεύον.
Πρωτεύον κλειδί – πρωτεύον κλειδί είναι μια στήλη ή ένα συνδυασμό των στηλών που αναγνωρίζει μοναδικά την κάθε εγγραφή του πίνακα στην Βάση Δεδομένων.)

Η δεύτερη κανονικη μορφή είναι ένα επίπεδο που αντιμετωπίζει τις δυσλειτουγίες που δεν μπορεί να χειριστεί η πρώτη κανονική μορφή.

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

 

sxima_1.6                                                           Σχήμα 1.6

Έστω λοιπόν ότι έχουμε τις εξαρτήσεις  ID –> Student_lname, ID_Lesson –> Lesson.
Υποθέτουμε πως το ζευγάρι (ID, ID_Lesson) είναι το μόνο υποψήφιο κλειδί άρα και πρωτεύον. Η σχέση (πίνακας) δεν βρίσκεται σε δεύτερη κανονική μορφή γιατί τα πεδία Student_lname, Lesson δεν εξαρτώνται πλήρως από το κλειδί (αφού το καθένα εξαρτάται από το υποσύνολο του κλειδιού). Και αυτό γιατί ένας μαθητής μπορεί να επιλέξει πολλά δυνητικά μαθήματα και επίσης ένα μάθημα μπορεί να επιλεγεί από πολλούς μαθητές. Η παραπάνω σχέση λοιπόν παρουσιάζει πολλές δυσλειτουργίες λόγω της ύπαρξης πλεονασμού.

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

 

sxima_1.7                                                         Σχήμα 1.7

>> Τα κλειδιά στο παραπάνω σχήμα εμφανίζονται με κόκκινο χρώμμα.<<

 

Third Normal Form (3NF)

Μια σχέση (πίνακας) βρίσκεται στην τρίτη κανονική μορφή (3NF) αν
1.
ικανοποιεί τις απαιτήσεις της πρώτης και δεύτερης κανονικής μορφής.
2. κάθε κατηγόρημα που δε συμμετέχει σε κλειδί
εξαρτάται μη μεταβατικά από κάθε υποψήφιο κλειδί της σχέσης.
                   “The key, the whole key, and nothing but the key, so help me Codd»

 Ας πάρουμε την παρακάτω σχέση

LESSON (ID_Lesson, Lesson, Professor, Prof_email)

Έστω λοιπόν ότι το κατηγόρημα Lesson (για τις ανάγκες του παραδείγματος) δεν είναι μοναδικό για κάθε ID_Lesson άρα το τελευταίο είναι το υποψήφιο κλειδί. Έχουμε τις ακόλουθες εξαρτήσεις:

ID_Lesson –> Lesson
ID_Lesson
–> Professor (δεχόμαστε ώς παραδοχή ότι ένα μάθημα διδάσκεται από ένα μόνο καθηγητή)
Professor –> Prof_email

Με τον κανόνα της μεταβατικότητας ισχύει το ακόλουθο

ID_Lesson –> Prof_email

Η παραπάνω σχέση λοιπόν βρίσκεται στην δεύτερη κανονική μορφή (2NF). Παρακάτω έχουμε ένα στιγμιότυπο της

sxima_1.8                                                         Σχήμα 1.8

Με βάση τις συναρτησιακές εξαρτήσεις που περιγράψαμε παραπάνω ένας καθηγητής μπορεί να διδάσκει πολλά μαθήματα, οπότε το παραπάνω σχήμα είναι σωστό και επίσης βρίσκεται σε 2NF. Εμφανίζει βέβαια πλεονασμό σε σχέση με το email του καθηγητή.

Το παραπάνω πρόβλημα οφείλεται στην μεταβατική εξάρτηση ID_Lesson –> Professor –> Prof_email καθώς μας δείχνει ότι η σχέση έχει πληροφορία για δύο έννοιες (Lesson, Professor). To βασικό μας ‘κόλλημα’ είναι πως αφού ένας καθηγητης μπορεί να διδάσκει πολλά μαθήματα, οδηγούμαστε σε επανάληψη του email.

Η λύση είναι η διάσπαση της σχέσης:

LESSON (ID_Lesson, Lesson, Professor)
PROFESSOR (Professor, Prof_email)

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

LESSON (ID_Lesson, Lesson)
PROFESSOR (Professor, Prof_email)
TEACHES (ID_Lesson, Professor)
(Η επιλογή κλειδιου έγινε με βάση τους επιχειρησιακούς κανόνες και εξασφαλίζει πως ένας καθηγητής μπορεί να διδάσκει πολλά μαθήματα αλλά ένα μάθημα διδάσκεται από ένα μόνο καθηγητή.)

Η τρίτη κανονική μορφή είναι επαρκής για τις περισσότερες σχεσιακές βάσεις και επίσης είναι το αποτέλεσμα μιας ορθής σχεδίασης του Διαγράμματος Οντοτήτων Συσχετίσεων και μετάβασης μετά στο σχεσιακό επίπεδο.

Boyce and Codd Normal Form (BCNF)

Η συγκεκριμένη κανονική μορφή είναι μια ελαφρώς ποιό δυνατή μορφή από την 3NF. Σε πολύ σπάνιες περιπτώσης ένας πίνακας σε 3NF δεν είναι ταυτόχρονα και σε BCNF μορφή.

Σύμφωνα με τις λειτουργικές απαιτήσεις της εκάστοτε εφαρμογής ένας πίνακας σε 3NF με περισσότερα από δύο επικαλυπτόμενα υποψήφια κλειδιά μπορεί να μην είναι σε BCNF μορφή.

Μια σχέση (πίνακας) βρίσκεται στην Boyce and Codd μορφή (BCNF) αν
δεν περιέχει πολλαπλά επικαλυπτόμενα υποψήφια κλειδιά.

 


 

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

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

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

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

Οι ιδιότητες μιας διάσπασης είναι:

Η διατήρηση των πεδίων (κατηγορημάτων),
Η άρση του πλεονασμού,Η διάσπαση της σχέσης χωρίς απώλεια της σύνδεσης.

Από όλα τα παραπάνω λοιπόν μπορεί να παραχθεί ο παρακάτω γενικός κανόνας

Η διάσπαση μιας σχέσης Χ σε ένα σύνολο μικρότερων σχέσεων Χ1,Χ2,Χ3,…..,Χn θα χαρακτηρίζεται ‘διάσπαση χωρίς απώλεια σύνδεσης’ αν η σχέση Χ είναι αποτέλεσμα της φυσικής σύνδεσης των Χ1,Χ2,Χ3,…Χn.

 

 

Thomas Polemis

System @ Network Administrator | Azure Infrastructure Solutions Specialist