Db crash_course-normalization

Post on 17-Jun-2015

477 views 1 download

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

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

(Database Normalization)

Πχης (M) B. Παπαλιάκος ΠΝ(vpapaliakos@gmail.com)

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

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

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

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

Εισαγωγή

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

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

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

Εισαγωγή

Στόχοι

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

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

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

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

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

● 1NF – 2NF - 3NF

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

1. Εξάρτηση (Dependency)Όταν λέµε: το Y εξαρτάται από το X εννοούµε:

Y = f ( X )

● ή µε άλλα λόγια, το Χ καθορίζει το Υ.● Αυτή η εξάρτηση σηµειώνεται ως X → Y.

Παράδειγµα:

Τι εξαρτήσεις έχουµε εδώ;

invoice_id line_nr product_code product_name customer_name

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

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

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

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

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

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

Αποτέλεσµα;

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

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

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

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

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

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

(data redundancy).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Update anomaly

Insertion anomaly

Deletion anomaly

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

● Normalization to the rescue

I am superhero1NF

(arghh!)

I am superhero2NF

(arghh!)

I am super-superhero

3NF(arghh!)

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!”

3. Normal forms & normalization

Η διαδικασία κανονικοποίησης (για κάθε πίνακα)

● Συµµόρφωση των δεδοµένων µας σε διαδοχικές κανονικές µορφές (1NF → 2NF → 3NF)

● Κάθε στήλη (σε κάθε πίνακα) εξαρτάται από● Το κλειδί, ● ολόκληρο το κλειδί και ● τίποτα άλλο εκτός από το κλειδί

● 1NF (the key) → 2NF (the whole key) → 3NF (& nothing but the key)

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

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

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

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

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

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

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

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

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

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

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

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

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

invoice_id customer_name

invoice_id line_nr product_code product_name customer_name

invoice_id line_nr product_code product_name

3Γ. 3η κανονική µορφή3rd Normal Form (3NF)

3η κανονική µορφήThird Normal Form (3NF): “...and nothing but the key!”

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

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

Οπότε..............

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

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

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

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

Συνεπώς...

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

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

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

Επίλογος

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

1NF – 2NF - 3NF

Επίλογος

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

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

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

Πηγές

● http://en.wikipedia.org/wiki/Database_normalization (click here)

● http://databases.about.com/od/specificproducts/a/normalization.htm (click here)

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