Db crash_course-normalization

32
Κανονικοποίηση Βάσεων Δεδομένων (Database Normalization) Πχης (M) B. Παπαλιάκος ΠΝ ([email protected])

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 of Db crash_course-normalization

Page 1: Db crash_course-normalization

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

(Database Normalization)

Πχης (M) B. Παπαλιάκος ΠΝ([email protected])

Page 2: Db crash_course-normalization

Διαδικαστικά θέµατα

●Διάρκεια: 20 λεπτά

●Η παρουσίαση είναι διαθέσιµη στη διεύθυνση http://papaliakos.gr/db/presentations●Επίσης σας έχει διανεµηθεί σε χαρτί ώστε...●ΝΑ ΚΡΑΤΗΣΕΤΕ ΣΗΜΕΙΩΣΕΙΣ!

●Ερωτήσεις δεκτές, κατά προτίµηση στο τέλος κάθε ενότητας

Page 3: Db crash_course-normalization

Εισαγωγή

● Υπόθεση: είστε σχετικοί µε το αντικείµενο των ΒΔ.

● Νιώθετε ότι σας λείπουν κάποιες γνώσεις, όµως τα καταφέρατε σε µια-δυο περιπτώσεις που χρειάστηκε να φτιάξετε ΒΔ στην access.

● Σας προσφέρουν 2000 € για µια ΒΔ-δουλειά µιας εβδοµάδας: pas mal!

Page 4: Db crash_course-normalization

Εισαγωγή

Page 5: Db crash_course-normalization

Στόχοι

Να µπορούµε να εξηγήσουµε τις έννοιες:

● Εξάρτηση (data dependency)● Πλεονασµός (redundancy) και ● Ασυνέπεια (inconsistency) δεδοµένων

Να µπορούµε να εξαλείψουµε τα παραπάνω προβλήµατα µέσω της κανονικοποίησης (normalization).

Page 6: Db crash_course-normalization

Βασικές έννοιες - Πυλώνες

● Εξάρτηση (Dependency)● Πλεονασµός δεδοµένων (Data redundancy)● Ασυνέπεια δεδοµένων (Data inconsistency)● Κανονικοποίηση (Normalization)● Κανονικές µορφές (Normal forms)

● 1NF – 2NF - 3NF

“Στο πεδίο των Η/Υ όπου κι αν πετάξεις µια πέτρα θα χτυπήσεις µια βάση δεδοµένων”

Page 7: Db crash_course-normalization

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

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

1. Εξάρτηση (Dependency)

Δώστε παραδείγµατα εξαρτηµένων µεταβλητών:

● Σε µια ΒΔ µαθητών-µαθηµάτων-βαθµών● Σε µια ΒΔ υλικών-αποθηκών-αποθεµάτων● Σε µια ΒΔ αυτοκινήτων

Page 10: Db crash_course-normalization

“Καλή” και “Κακή” εξάρτηση

● “Καλή” εξάρτηση (“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

Αποτέλεσµα;

Page 12: Db crash_course-normalization

2Α. Πλεονασµός δεδοµένων (Data redundancy)

Η ίδια πληροφορία φυλάσσεται σε διάφορα µέρη (διπλο-εγγραφή).

Παράδειγµα: η διεύθυνση και το τηλέφωνο ενός πελάτη µπορεί να φυλάσεται στο αρχείο των

λογαριασµών όψεως και στο αντίστοιχο αρχείο των λογαριασµών ταµιευτηρίου µιας τράπεζας.

Αυτό ονοµάζεται

πλεονασµός δεδοµένων

(data redundancy).

κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλοψ-004 Παπαλιάκος Κρυστάλλη 6943483457

κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλταµ-037 Παπαλιάκος Κρυστάλλη 6943483457

Page 13: Db crash_course-normalization

2Α. Πλεονασµός δεδοµένων (Data redundancy)

● Παράδειγµα:

Τι µπορεί να πάει στραβά???

Page 14: Db crash_course-normalization

2Β. Ασυνέπεια δεδοµένων(Data inconsistency)

● Αυτός ο πλεονασµός µπορεί να οδηγήσει σε

ασυνέπεια δεδοµένων (data inconsistency)

δηλαδή σε ● διαφορετικά αντίγραφα των ιδίων δεδοµένων τα οποία ● µπορεί να µη συµφωνούν µεταξύ τους.

Page 15: Db crash_course-normalization

2Β. Ασυνέπεια δεδοµένων(Data inconsistency)

● διαφορετικά αντίγραφα των ιδίων δεδοµένων ● µπορεί να µη συµφωνούν µεταξύ τους. ● Παράδειγµα: αν αλλάξουµε τη διεύθυνση ενός πελάτη στο αρχείο των λογαριασµών

ταµιευτηρίου, τότε αυτή η αλλαγή δεν θα φαίνεται οπουδήποτε αλλού (πχ. στο αρχείο των λογαριασµών όψεως).

κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλοψ-004 Παπαλιάκος Κρυστάλλη 6943483457

κωδ_λογαρ. πελ_όνοµα πελ_διευθ πελ_τηλταµ-037 Παπαλιάκος Καβάφη 6947159333

Page 16: Db crash_course-normalization

2Β. Ασυνέπεια δεδοµένων(Data inconsistency)

● διαφορετικά αντίγραφα των ιδίων δεδοµένων ● συµφωνούν µεταξύ τους;

Page 17: Db crash_course-normalization

Προβλήµατα στα δεδοµένα µας(Data anomalies)

Update anomaly

Insertion anomaly

Deletion anomaly

Page 18: Db crash_course-normalization

Τι κάνουµε ???

● Normalization to the rescue

I am superhero1NF

(arghh!)

I am superhero2NF

(arghh!)

I am super-superhero

3NF(arghh!)

Page 19: Db crash_course-normalization

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

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

3Α. 1η κανονική µορφή1st Normal Form (1NF)

1η κανονική µορφήFirst Normal Form (1NF): “the Key”

● Το κλειδί καθορίζει όλες τις ιδιότητες (στήλες) του πίνακα ● ΟΧΙ πολλαπλές τιµές σε µία στήλη

● ΟΧΙ οµάδες δεδοµένων: µία στήλη = µία ιδιότητα

Page 22: Db crash_course-normalization

3Α. 1η κανονική µορφή1st Normal Form (1NF)

● Ο παρακάτω πίνακας είναι σε 1NF;

Page 23: Db crash_course-normalization

3Β. 2η κανονική µορφή2nd Normal Form (2NF)

2η κανονική µορφή Second Normal Form (2NF): “the whole key...”

● 1η κανονική µορφή (1NF)

+ ● ΟΧΙ µερικές εξαρτήσεις (partial dependencies),

Άρα............

Page 24: Db crash_course-normalization

Θεραπεία για τις “κακές εξαρτήσεις”

Αφαιρούµε τις µερικές εξαρτήσεις

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

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

Θεραπεία για τις “κακές εξαρτήσεις”

Αφαιρούµε τις µεταβατικές εξαρτήσεις

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

Κανονικοποίηση στην πράξη

Page 28: Db crash_course-normalization

Συνεπώς...

● Αφαιρούµε– Πολλαπλές στήλες – πολλαπλές τιµές– Μερικές εξαρτήσεις– Μεταβατικές εξαρτήσεις

● Εξαλείφουµε προβλήµατα στα δεδοµένα µας

● Κανονικοποίηση όλων των πινάκων ● Κανονικοποίηση όλης της ΒΔ

Page 29: Db crash_course-normalization

Επίλογος

● Βασικές έννοιες– Εξάρτηση (Dependency)– Πλεονασµός δεδοµένων (Data redundancy)– Ασυνέπεια δεδοµένων (Data inconsistency)– Κανονικοποίηση (Normalization)– Κανονικές µορφές (Normal forms)

1NF – 2NF - 3NF

Page 30: Db crash_course-normalization

Επίλογος

Στόχοι: 1.Να µπορούµε να εξηγήσουµε τις έννοιες:

– Εξάρτηση (data dependency)– Πλεονασµός (redundancy) και – Ασυνέπεια (inconsistency) δεδοµένων

2.Να µπορούµε να εξαλείψουµε τα παραπάνω προβλήµατα µέσω της κανονικοποίησης (normalization).

Page 31: Db crash_course-normalization

Πηγές

● 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

Ερωτήσεις ???