db crash_course-normalization
DESCRIPTION
This is a 45-minute presentation on database normalization (in Greek).It is supposed to be one of the series of lessons in databases.TRANSCRIPT
![Page 1: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/1.jpg)
Κανονικοποίηση Βάσεων Δεδοµένων
(Database Normalization)
Πχης (M) B. Παπαλιάκος ΠΝ([email protected])
![Page 2: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/2.jpg)
Διαδικαστικά θέµατα
●Διάρκεια: 20 λεπτά
●Η παρουσίαση είναι διαθέσιµη στη διεύθυνση http://papaliakos.gr/db/presentations●Επίσης σας έχει διανεµηθεί σε χαρτί ώστε...●ΝΑ ΚΡΑΤΗΣΕΤΕ ΣΗΜΕΙΩΣΕΙΣ!
●Ερωτήσεις δεκτές, κατά προτίµηση στο τέλος κάθε ενότητας
![Page 3: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/3.jpg)
Εισαγωγή
● Υπόθεση: είστε σχετικοί µε το αντικείµενο των ΒΔ.
● Νιώθετε ότι σας λείπουν κάποιες γνώσεις, όµως τα καταφέρατε σε µια-δυο περιπτώσεις που χρειάστηκε να φτιάξετε ΒΔ στην access.
● Σας προσφέρουν 2000 € για µια ΒΔ-δουλειά µιας εβδοµάδας: pas mal!
![Page 4: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/4.jpg)
Εισαγωγή
![Page 5: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/5.jpg)
Στόχοι
Να µπορούµε να εξηγήσουµε τις έννοιες:
● Εξάρτηση (data dependency)● Πλεονασµός (redundancy) και ● Ασυνέπεια (inconsistency) δεδοµένων
Να µπορούµε να εξαλείψουµε τα παραπάνω προβλήµατα µέσω της κανονικοποίησης (normalization).
![Page 6: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/6.jpg)
Βασικές έννοιες - Πυλώνες
● Εξάρτηση (Dependency)● Πλεονασµός δεδοµένων (Data redundancy)● Ασυνέπεια δεδοµένων (Data inconsistency)● Κανονικοποίηση (Normalization)● Κανονικές µορφές (Normal forms)
● 1NF – 2NF - 3NF
“Στο πεδίο των Η/Υ όπου κι αν πετάξεις µια πέτρα θα χτυπήσεις µια βάση δεδοµένων”
![Page 7: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/7.jpg)
1. Εξάρτηση (Dependency)Όταν λέµε: το Y εξαρτάται από το X εννοούµε:
Y = f ( X )
● ή µε άλλα λόγια, το Χ καθορίζει το Υ.● Αυτή η εξάρτηση σηµειώνεται ως X → Y.
Παράδειγµα:
Τι εξαρτήσεις έχουµε εδώ;
invoice_id line_nr product_code product_name customer_name
![Page 8: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/8.jpg)
1. Εξάρτηση (Dependency)Όταν λέµε: το Y εξαρτάται από το X εννοούµε:
Y = f ( X )
● ή µε άλλα λόγια, το Χ καθορίζει το Υ.● Αυτή η εξάρτηση σηµειώνεται ως X → Y.
Παράδειγµα:
product_code → product_name
invoice_id → customer_name
invoice_id line_nr product_code product_name customer_name
![Page 9: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/9.jpg)
1. Εξάρτηση (Dependency)
Δώστε παραδείγµατα εξαρτηµένων µεταβλητών:
● Σε µια ΒΔ µαθητών-µαθηµάτων-βαθµών● Σε µια ΒΔ υλικών-αποθηκών-αποθεµάτων● Σε µια ΒΔ αυτοκινήτων
![Page 10: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/10.jpg)
“Καλή” και “Κακή” εξάρτηση
● “Καλή” εξάρτηση (“Good” dependency):
● Πρωτεύον κλειδί (Primary Key) → άλλες ιδιότητες
● “Κακές” εξαρτήσεις (“Bad” dependencies):
● Μερική εξάρτηση (Partial dependency)
● Μεταβατική εξάρτηση (Transitive dependency)
invoice_id line_nr product_code product_name customer_name
invoice_id line_nr product_code product_name customer_name
![Page 11: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/11.jpg)
Αποτέλεσµα;
![Page 12: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/12.jpg)
2Α. Πλεονασµός δεδοµένων (Data redundancy)
Η ίδια πληροφορία φυλάσσεται σε διάφορα µέρη (διπλο-εγγραφή).
Παράδειγµα: η διεύθυνση και το τηλέφωνο ενός πελάτη µπορεί να φυλάσεται στο αρχείο των
λογαριασµών όψεως και στο αντίστοιχο αρχείο των λογαριασµών ταµιευτηρίου µιας τράπεζας.
Αυτό ονοµάζεται
πλεονασµός δεδοµένων
(data redundancy).
κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλοψ-004 Παπαλιάκος Κρυστάλλη 6943483457
κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλταµ-037 Παπαλιάκος Κρυστάλλη 6943483457
![Page 13: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/13.jpg)
2Α. Πλεονασµός δεδοµένων (Data redundancy)
● Παράδειγµα:
Τι µπορεί να πάει στραβά???
![Page 14: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/14.jpg)
2Β. Ασυνέπεια δεδοµένων(Data inconsistency)
● Αυτός ο πλεονασµός µπορεί να οδηγήσει σε
ασυνέπεια δεδοµένων (data inconsistency)
δηλαδή σε ● διαφορετικά αντίγραφα των ιδίων δεδοµένων τα οποία ● µπορεί να µη συµφωνούν µεταξύ τους.
![Page 15: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/15.jpg)
2Β. Ασυνέπεια δεδοµένων(Data inconsistency)
● διαφορετικά αντίγραφα των ιδίων δεδοµένων ● µπορεί να µη συµφωνούν µεταξύ τους. ● Παράδειγµα: αν αλλάξουµε τη διεύθυνση ενός πελάτη στο αρχείο των λογαριασµών
ταµιευτηρίου, τότε αυτή η αλλαγή δεν θα φαίνεται οπουδήποτε αλλού (πχ. στο αρχείο των λογαριασµών όψεως).
κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλοψ-004 Παπαλιάκος Κρυστάλλη 6943483457
κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλταµ-037 Παπαλιάκος Καβάφη 6947159333
![Page 16: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/16.jpg)
2Β. Ασυνέπεια δεδοµένων(Data inconsistency)
● διαφορετικά αντίγραφα των ιδίων δεδοµένων ● συµφωνούν µεταξύ τους;
![Page 17: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/17.jpg)
Προβλήµατα στα δεδοµένα µας(Data anomalies)
Update anomaly
Insertion anomaly
Deletion anomaly
![Page 18: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/18.jpg)
Τι κάνουµε ???
● Normalization to the rescue
I am superhero1NF
(arghh!)
I am superhero2NF
(arghh!)
I am super-superhero
3NF(arghh!)
![Page 19: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/19.jpg)
3. Normal forms & normalization
1η κανονική µορφή - First Normal Form (1NF)
2η κανονική µορφή - Second Normal Form (2NF)
3η κανονική µορφή - Third Normal Form (3NF)
“The key...”
“the whole key...”
“and nothing but the key!”
![Page 20: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/20.jpg)
3. Normal forms & normalization
Η διαδικασία κανονικοποίησης (για κάθε πίνακα)
● Συµµόρφωση των δεδοµένων µας σε διαδοχικές κανονικές µορφές (1NF → 2NF → 3NF)
● Κάθε στήλη (σε κάθε πίνακα) εξαρτάται από● Το κλειδί, ● ολόκληρο το κλειδί και ● τίποτα άλλο εκτός από το κλειδί
● 1NF (the key) → 2NF (the whole key) → 3NF (& nothing but the key)
![Page 21: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/21.jpg)
3Α. 1η κανονική µορφή1st Normal Form (1NF)
1η κανονική µορφήFirst Normal Form (1NF): “the Key”
● Το κλειδί καθορίζει όλες τις ιδιότητες (στήλες) του πίνακα ● ΟΧΙ πολλαπλές τιµές σε µία στήλη
● ΟΧΙ οµάδες δεδοµένων: µία στήλη = µία ιδιότητα
![Page 22: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/22.jpg)
3Α. 1η κανονική µορφή1st Normal Form (1NF)
● Ο παρακάτω πίνακας είναι σε 1NF;
![Page 23: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/23.jpg)
3Β. 2η κανονική µορφή2nd Normal Form (2NF)
2η κανονική µορφή Second Normal Form (2NF): “the whole key...”
● 1η κανονική µορφή (1NF)
+ ● ΟΧΙ µερικές εξαρτήσεις (partial dependencies),
Άρα............
![Page 24: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/24.jpg)
Θεραπεία για τις “κακές εξαρτήσεις”
Αφαιρούµε τις µερικές εξαρτήσεις
invoice_id customer_name
invoice_id line_nr product_code product_name customer_name
invoice_id line_nr product_code product_name
![Page 25: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/25.jpg)
3Γ. 3η κανονική µορφή3rd Normal Form (3NF)
3η κανονική µορφήThird Normal Form (3NF): “...and nothing but the key!”
● 2η κανονική µορφή (2NF)
+● ΟΧΙ µεταβατικές εξαρτήσεις (transitive dependencies)
Οπότε..............
![Page 26: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/26.jpg)
Θεραπεία για τις “κακές εξαρτήσεις”
Αφαιρούµε τις µεταβατικές εξαρτήσεις
invoice_id customer_name
invoice_id customer_name
product_code product_name
invoice_id line_nr product_code product_name
invoice_id line_nr product_code
![Page 27: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/27.jpg)
Κανονικοποίηση στην πράξη
![Page 28: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/28.jpg)
Συνεπώς...
● Αφαιρούµε– Πολλαπλές στήλες – πολλαπλές τιµές– Μερικές εξαρτήσεις– Μεταβατικές εξαρτήσεις
● Εξαλείφουµε προβλήµατα στα δεδοµένα µας
● Κανονικοποίηση όλων των πινάκων ● Κανονικοποίηση όλης της ΒΔ
![Page 29: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/29.jpg)
Επίλογος
● Βασικές έννοιες– Εξάρτηση (Dependency)– Πλεονασµός δεδοµένων (Data redundancy)– Ασυνέπεια δεδοµένων (Data inconsistency)– Κανονικοποίηση (Normalization)– Κανονικές µορφές (Normal forms)
1NF – 2NF - 3NF
![Page 30: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/30.jpg)
Επίλογος
Στόχοι: 1.Να µπορούµε να εξηγήσουµε τις έννοιες:
– Εξάρτηση (data dependency)– Πλεονασµός (redundancy) και – Ασυνέπεια (inconsistency) δεδοµένων
2.Να µπορούµε να εξαλείψουµε τα παραπάνω προβλήµατα µέσω της κανονικοποίησης (normalization).
![Page 31: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/31.jpg)
Πηγές
● http://en.wikipedia.org/wiki/Database_normalization (click here)
● http://databases.about.com/od/specificproducts/a/normalization.htm (click here)
![Page 32: Db crash_course-normalization](https://reader034.vdocuments.pub/reader034/viewer/2022042607/5580ff2dd8b42a9d198b4fa2/html5/thumbnails/32.jpg)
Ερωτήσεις ???