Department of Computer Science University of Cyprus EPL342 Databases Lecture 21: Functional Dependencies and Normalization Informal Design Guidelines (Chapter 10.1, Elmasri-Navathe 5ED) Demetris Zeinalipour http://www.cs.ucy.ac.cy/courses/epl342 21-1
Πεξηερόκελν Γηάιεμεο Δηζαγσγή ζηελ Καλνληθνπνηήζε (Normalization) Άηππεο θαηεπζύλζεηο γηα Σρεδηαζκό κηαο Καιήο Βάζεο 1) Σεκαζηνινγία (Semantics) ησλ Γλσξηζκάησλ Σρέζεσλ 2) Πιενλάδνπζεο (Redundant) Πιεξνθνξίεο ζε Πιεηάδεο θαη Αλσκαιίεο Δλεκεξώζεσλ 3) Τηκέο NULL ζε πιεηάδεο 4) Γεκηνπξγία Πιαζκαηηθώλ Πιεηάδσλ (Spurious Tuples) Δπόκελεο Γηαιέμεηο Σπλαξηεζηαθέο Δμαξηήζεηο (Functional Dependencies): To καζεκαηηθό ππόβαζξν ηεο Καλνληθνπνηήζεο. Καλνληθνπνηήζε κε Φξήζε Σπλαξηεζηαθώλ Δμαξηήζεσλ: 1NF, 2NF, 3NF θαη BCNF, θηι. 21-2
Δηζαγσγή ζηελ Καλνληθνπνηήζε (Normalization) Η Σρεδίαζε ηνπ Σρεζηαθνύ Σρήκαηνο κηαο βάζεο δεδνκέλσλ κέρξη ζηηγκήο γηλόηαλ βάζεη ηεο θνηλήο ινγηθήο ηνπ ζρεδηαζηή θαη όρη βάζεη απζηεξώλ θαλόλσλ. Τα παξαγόκελα ζρήκαηα κπνξνύζαλ λα θξηζνύλ ππνθεηκεληθά σο πξνο ηελ Χξεζηόηεηα (Goodness) ηνπο αιιά όρη αληηθεηκεληθά. Παξόιν πνπ αλαθεξζήθακε ζην παξειζόλ ζε θάπνηεο γεληθέο νδεγίεο ραξαθηεξηζκνύ ηεο Χξεζηόηεηαο (Goodness) ελόο Σρεζηαθνύ Σρήκαηνο, π.ρ., Να ΜΗΝ ππάξρεη επαλάιεςε πιεξνθνξίαο Να ΜΗΝ ππάξρνπλ πνιιά NULLs ζε γλσξίζκαηα. Να ΜΗΝ απαηηνύληαη πνιιέο ζπλελώζεηο γηα λα θαηαιήμνπκε ζε κηα νληόηεηα. Απηέο νη νδεγίεο δελ ήηαλ ηππηθέο (δει, δελ ζηεξίδνληαλ ζε 21-3 θάπνην καζεκαηηθό EPL342: Databases ππόβαζξν - Demetris Zeinalipour νπόηαλ (University ήηαλ of ππνθεηκεληθέο)! Cyprus)
Δηζαγσγή ζηελ Καλνληθνπνηήζε (Normalization) Καλνληθνπνηήζε (Normalization) : Η ζπζηεκαηηθή (ηππηθή) δηαδηθαζία δηαζθάιηζεο όηη ην ζρήκα κηαο βάζεο δεδνκέλσλ έρεη ηηο πην θάησ πξόλνηεο: Δίλαη θαηάιιειν γηα εθηέιεζε γεληθνύ είδνπο επεξσηήζεσλ Δίλαη ειεύζεξν από νξηζκέλα κε-επηζπκεηά ραξαθηεξηζηηθά (αλσκαιίεο) εηζαγσγήο, ελεκέξσζεο, θαη δηαγξαθήο ηα νπνία κπνξεί λα νδεγήζνπλ ζε απώιεηα δεδνκέλσλ Η Καλνληθνπνηήζε νξίδεηαη ην 1970 από ηνλ Edgar Frank "Ted" Codd, ηνλ δεκηνπξγό ηνπ Σρεζηαθνύ Μνληέινπ. Απηό γηα λα επηηεπρζεί επθνιόηεξα ε κεηάβαζε ησλ ηόηε βάζεσλ δεδνκέλσλ (ηεξαξρηθό θαη δηθηπαθό κνληέιν) ζην ζρεζηαθό κνληέιν. Ο Codd νξίδεη κέρξη ην 1974 δηάθνξα επίπεδα Καλνληθνπνηήζεο (1NF, 2NF,3NF θαη BCNF) ηα νπνία κπνξνύλ λα αθνινπζεζνύλ βήκα-βήκα γηα πξνζδηνξηζκό ελόο θαινύ ζρεζηαθνύ ζρήκαηνο. 21-4
Δηζαγσγή ζηελ Καλνληθνπνηήζε (Normalization) Η Καλνληθνπνηήζε κηαο Βάζεο κπνξεί λα γίλεη κε ηνπο αθόινπζνπο δπν ηξόπνπο: Από Πάλσ Πξνο ηα Κάησ (Top-Down Design) Αξρηθνπνίεζε κηαο (1) ζρέζεο πνπ πεξηιακβάλεη ΌΛΑ ηα γλσξίζκαηα R(A1, AN) κηαο εθαξκνγήο. Η ζρέζε δηαζπάηαη αλαδξνκηθά από πάλσ πξνο ηα θάησ κέρξη λα θηάζνπκε ζε ζρέζεηο νη νπνίεο πιεξνύλ θάπνην επηζπκεηό επίπεδν «Χξεζηόηεηαο». Ολνκάδεηαη αιιηώο Design by Analysis. Από Κάησ Πξνο ηα Πάλσ (Bottom Up Design) Ολνκάδεηαη αιιηώο Design-by-Synthesis Γελ ζα κειεηεζεί ζηα πιαίζηα απηνύ ηνπ καζήκαηνο 21-5
Δηζαγσγή ζηελ Καλνληθνπνηήζε (Normalization) H Καλνληθνπνηήζε ζηεξίδεηαη ζηελ έλλνηα ηνλ ζπλαξηεζηαθώλ εμαξηήζεσλ (functional dependencies), ηα νπνία απνηεινύλ γελίθεπζε ηεο ελλνίαο ηνπ θιεηδηνύ. Π.ρ., SSN {Name, NumberGrade, LetterGrade, Dno} NumberGrade LetterGrade Απηά ζα κειεηεζνύλ εθηελώο ζηελ επόκελε δηάιεμε. Πξνηνύ δνύκε ηηο πην πάλσ έλλνηεο ζα επηρεηξήζνπκε λα ζπλνςίζνπκε κε άηππν ηξόπν θάπνηεο γεληθέο νδεγίεο γηα ζρεδηαζκό ελόο θαινύ ζρήκαηνο κηαο ζρεζηαθήο βάζεο. 21-6
Οδεγία 1: Σεκαζηνινγία (Semantics) ησλ Γλσξηζκάησλ Σρέζεσλ Οδεγία 1: Τα απιά γλσξίζκαηα κηαο ζρέζεο πξέπεη λα έρνπλ θνηλή ζεκαζηνινγία (δειαδή λα αλαθέξνληαη ζηελ ίδηα νληόηεηα) Σπγθεθξηκέλα: Απιά Γλσξίζκαηα από δηαθνξεηηθέο νληόηεηεο (π.ρ., EMPLOYEEs, DEPARTMENTs, PROJECTs) ΓΔΝ πξέπεη λα πιέθνληαη ζηελ ίδηα ζρέζε ΜΟΝΟ μέλα θιεηδηά πξέπεη λα ρξεζηκνπνηνύληαη γηα ηελ αλαθνξά κεηαμύ νληνηήησλ. Γλσξίζκαηα Οληνηήησλ θαη Γλσξίζκαηα Σπζρεηίζεσλ είλαη θαιό λα δηαηεξνύληαη καθξηά κεηαμύ ηνπο (όηαλ γίλεηαη) Απηά ζπρλά είλαη πεγή γηα NULL ηηκέο. Σεκείσζε: Μεηά ηελ εθηελή απαζρόιεζε ζαο κε ην Σρεζηαθό (αιια θαη ER) κνληέιν, πνιιά από ηα πην πάλσ κπνξεί λα ζαο αθνύγνληαη θπζηθά θαη λα ηα εθαξκόδεηαη ήδε. 21-7
Οδεγία 1: Σεκαζηνινγία (Semantics) ησλ Γλσξηζκάησλ Σρέζεσλ Παξάδεηγκα Αλάκεημεο Γλσξηζκάησλ Πην θάησ δείρλνπκε δπν παξαδείγκαηα ζρέζεσλ πνπ αλακεηγλύνπλ γλσξίζκαηα κεηαμύ νληνηήησλ νδεγώληαο καο ζε έλα ζρεζηαθό ζρήκα κε θησρό design Αλάκεημε Employee Department Αλάκεημε Employee Project Σεκείσζε: Τα πην πάλσ έρνπλ θησρό design σο θπζηθέο ζρέζεηο (base relations) όπσο ζα δνύκε ζε ιίγν. Από ηελ άιιε δελ έρνπλ ηδηαίηεξν ζρεδηαζηηθό πξόβιεκα σο όςεηο (λνεηέο ζρέζεηο) 21-8
Οδεγία 1: Σεκαζηνινγία (Semantics) ησλ Γλσξηζκάησλ Σρέζεσλ Σπκπέξαζκα: Θα πξέπεη θαλείο λα κπνξεί λα πεξηγξάθεη κηα-κηα ηηο ζρέζεηο ηνπ ζρήκαηνο κηαο βάζεο ρσξίο λα πξνθύπηνπλ ζεκαζηνινγηθέο ακθηβνιίεο (semantic ambiguities). Π.ρ., Project.Dnum εύθνια καο παξαπέκπεη ζην number ηνπ department Δλώ εάλ ήηαλ απιά Project.Num ηόηε δελ ζα ήηαλ μεθάζαξε ε ζεκαζηνινγία ηνπ ελ ιόγσ γλσξίζκαηνο. Απηό επηηπγράλεηαη κε ηελ ρξήζε μεθάζαξσλ νλνκάησλ ζηηο ζρέζεηο θαη ηα γλσξίζκαηα. 21-9
Πιενλάδνπζα Πιεξνθνξία (Πξνβιήκαηα) Πιενλάδνπζα Πιεξνθνξία ζε Σρέζεηο: Γεδνκέλα ηα νπνία απνζεθεύνληαη επαλαιεπηηθά (redundantly) πξνθαινύλ ηα αθόινπζα πξνβιήκαηα: Α) Σπαηαινύλ Χώξν Απνζήθεπζεο, εάλ θαη απηό ην πξόβιεκα είλαη κηθξό ζε ζρέζε κε ην επόκελν Β) Πξνθαινύλ πξνβιήκαηα κε ηηο ελεκεξώζεηο (update anomalies) Αλσκαιίεο Δηζαγσγήο (Insertion anomalies) Αλσκαιίεο Γηαγξαθήο (Deletion anomalies) Αλσκαιίεο Τξνπνπνίεζεο (Modification anomalies) Αο δνύκε θάπνηα παξαδείγκαηα 21-10
Α) Σπαηάιε Χώξνπ Απνζήθεπζεο (Redundancy) ζε δπν ζρέζεηο Emp_Dept θαη Δmp_Proj Καη νη δπν πεξηπηώζεηο είλαη απνηέιεζκα ηνπ θαθνύ ζρεδηαζκνύ ηνπ ζρήκαηνο ησλ πηλάθσλ Πιενλάδνπζα Πιεξνθνξία (Σπαηάιε Φώξνπ) 21-11
Αλσκαιίεο Δλεκεξώζεσλ (Insert Anomaly) Αλσκαιία Δηζαγσγήο (Insert Anomaly) Πξόβιεκα 1: Γηα εηζαγσγή λέαο πιεηάδαο πξέπεη λα βεβαησζνύκε όηη ην (Dname, Dmgr_ssn) είλαη ζπλεπέο κε ηηο πξνεγνύκελεο εγγξαθέο. Π.ρ., Dname= Research, Dmgr_ssn=987654321 ιάζνο. Γηαηί; Πξόβιεκα 2: Γελ κπνξνύκε λα εηζάγνπκε ηα ζηνηρεία ελόο Department ην νπνίν δελ έρεη αθόκε employees! Γελ γίλεηαη νύηε εάλ βάινπκε NULL ζηα αλύπαξθηα πεδία. Γηαηί; 21-12
Αλσκαιίεο Δλεκεξώζεσλ (Insert Anomaly) Τν πην θάησ ζηηγκηόηππν ησλ Employee- Department δελ ππνθέξεη από ηηο αλσκαιίεο εηζαγσγήο ηεο πξνεγνύκελεο ζειίδαο Α) Γελ ρξεηάδεηαη έιεγρνο ζπλέπεηαο γηα εηζαγσγή ζην Department ή Employee Β) Μπνξνύκε λα εηζάγνπκε Departments, Employees αλεμάξηεηα ην έλα από ηελ ύπαξμε ηνπ άιινπ. 21-13
Αλσκαιίεο Δλεκεξώζεσλ (Delete Anomaly) Αλσκαιία Γηαγξαθήο (Delete Anomaly) Πξόβιεκα: Δάλ ζβήζνπκε ηελ ηειεπηαία πιεηάδα πνπ πεξηέρεη ηα ζηνηρεία ελόο Department, ηόηε ζα ραζνύλ όιεο νη πιεξνθνξίεο ηνπ ελ ιόγσ Department. Π.ρ., DELETE FROM EMP_DEPT WHERE Dnumber=1 Τν πξόβιεκα απηό ΓΔΝ ζα πξνθύςεη ζην ζηηγκηόηππν ηεο πξνεγνύκελεο δηαθάλεηαο όπνπ ηα ζηνηρεία ελόο department ζπλερίδνπλ λα δηαηεξνύληαη ζηνλ πίλαθα Department 21-14
Αλσκαιίεο Δλεκεξώζεσλ (Update Anomaly) Αλσκαιία Δλεκέξσζεο (Update Anomaly) Πξόβιεκα: Δάλ ελεκεξώζνπκε ην γλώξηζκα ελόο ζηνηρείνπ πνπ επαλαιακβάλεηαη ηόηε πξέπεη λα ελεκεξώζνπκε ΟΛΔΣ ηηο εκθαλίζεηο ηνπ. Απηό ην πξόβιεκα είλαη ην κηθξόηεξν από ηα αλαθεξόκελα δηόηη ιύλεηαη κε 1 SQL query. Π.ρ., UPDATE EMP_DEPT SET Dname= RES WHERE Dname= Research εάλ θαη ην query ζα απαηηεί πεξηζζόηεξν ρξόλν από όηη πξέπεη 21-15
Οδεγία 2: Πιενλάδνπζα Πιεξνθνξία θαη Αλσκαιίεο Δλεκεξώζεσλ Οδεγία 2: Σρεδίαζε έλα ζρήκα ην νπνίν ΓΔΝ ζα ππνθέξεη από αλσκαιίεο εηζαγσγώλ, δηαγξαθώλ θαη ελεκεξώζεσλ. Δάλ είλαη αλάγθε λα πθίζηαληαη θάπνηεο αλσκαιίεο (π.ρ., γηα ιόγνπο επίδνζεο*), ηόηε απηέο πξέπεη λα αλαθεξζνύλ θαη ηεθκεξησζνύλ ξεηά γηα λα ιακβάλνληαη ππόςε από ηελ εθαξκνγή. * π.ρ., ζε εθαξκνγέο OLAP: Online Analytical Processing όπνπ ν θόξηνο είλαη θπξίσο Readonly (ρσξίο πνιιέο ελεκεξώζεηο) 21-16
Οδεγία 2: Πιενλάδνπζα Πιεξνθνξία θαη Αλσκαιίεο Δλεκεξώζεσλ Από-θαλνληθνπνηήζε (Denormalization) Όπσο αλαθέξακε πξηλ, ζε θάπνηεο πεξηπηώζεηο έλαο DBA κπνξεί λα θξαηήζεη ην ζρήκα κηαο βάζεο ζε θαθή δνκή (κε-θαλνληθνπνηεκέλε κνξθή). Π.ρ., Δάλ έρνπκε έλα ζπλερόκελν θόξην επεξσηήζεσλ ζηνλ πίλαθα EMP_DEPT ηόηε ν κε-θαλνληθνπνηεκέλνο πίλαθαο απνθεύγεη ηε ζπλερή ζπλέλσζε EMP κε DEPT. Σεκεηώζηε όηη νη απιέο Όςεηο δελ βνεζάλε εθόζνλ πξόθεηηαη απιά γηα απνζεθεπκέλα SELECT εξσηήκαηα. Σε απηέο ηηο πεξηπηώζεηο ρξεηάδεηαη ε βάζε λα πινπνηεί, κε ρξήζε ζθαλδαιώλ (triggers), κεραληζκώλ γηα απνθπγή ησλ δηάθνξσλ αλσκαιηώλ ελεκέξσζεο. π.ρ., θαηά ηελ ελεκέξσζε κηαο πιεηάδαο απηόκαηα ελεκεξώλνληαη όιεο νη άιιεο ζρεηηθέο πιεηάδεο 21-17
Οδεγία 3: Τηκεο NULL ζε Πιεηάδεο Οδεγία 3: Οη ζρέζεηο πξέπεη λα ζρεδηάδνληαη έηζη ώζηε λα έρνπλ όζν ην δπλαηό ιηγόηεξεο εκθαλίζεηο NULL. Π.ρ., GOOD: Employee(SSN, Dno) Δίλαη αλακελόκελν όηη νη πεξηζζόηεξνη Employees ζα αλήθνπλ ζε έλα Department νπόηαλ δηθαηνινγείηαη ε ζπκκεηνρή ηνπ ελ ιόγσ γλσξίζκαηνο ζηελ ζρέζε Employee. Γλσξίζκαηα πνπ εκθαλίδνπλ ζπρλά NULL πξέπεη λα ηνπνζεηνύληαη ζε μερσξηζηέο ζρέζεηο (καδί κε ην πξσηεύσλ θιεηδί ηεο ζρέζεο) Π.ρ., Μόλν ην 10% ησλ Employees έρνπλ γξαθείν. BAD: EMPLOYEE(SSN, Name, Officedetails,...) GOOD: EMPLOYEE(SSN, Name,.) EMP_OFFICE(SSN, Οfficedetails) 21-18
Οδεγία 4: Πιαζκαηηθέο Πιεηάδεο (Spurious Tuples) Καηά ηελ θάζε ηεο top-down θαλνληθνπνηήζεο, πνιιέο ζρέζεηο θαινύληαη αλαδξνκηθά λα δηαζπαζηνύλ ζε κηθξόηεξεο ζρέζεηο. Γηαζπώληαο (Decomposing) ιαλζαζκέλα κηα ζρέζε R θξύβεη ηνπο αθόινπζνπο δπν θηλδύλνπο: A) Δπαλαζύλζεζε: Δίλαη δπλαηό λα ΜΗΝ κπνξνύκε λα επαλαζπλζέζνπκε ηελ R ράλνληαο πνιύηηκε ζεκαζηνινγία ηεο εθαξκνγήο Π.ρ., εάλ ην θιεηδί ηεο R δελ πεξηέρεηαη ηόζν ζηελ Α όζν θαη ζηελ Β. Β) Πιαζκαηηθέο Πιεηάδεο: Δίλαη δπλαηό λα δεκηνπξγνύληαη Πλαζμαηικές Πλειάδες (Spurious Tuples), δειαδή πιεηάδεο πνπ δελ άλεθαλ ζηελ R. Αθνινπζνύλ παξαδείγκαηα γηα ην Β. 21-19
Οδεγία 4: Πιαζκαηηθέο Πιεηάδεο (Spurious Tuples) Καλνληθό Απνηέιεζκα (Χσξίο Πιαζκαηηθέο Πιεηάδεο) * Λάζνο Απνηέιεζκα Με Πιαζκαηηθέο Πιεηάδεο Τν ιάζνο απνηέιεζκα είλαη ιόγσ ηεο θαθήο δνκήο ηνπ EMP_LOCS πνπ δελ έρεη ην SSN 21-20
Οδεγία 4 Πιαζκαηηθέο Πιεηάδεο (Spurious Tuples) Οδεγία 4: Οη ζρέζεηο πξέπεη λα ζρεδηάδνληαη έηζη ώζηε λα κπνξνύλ λα επαλζπλζεηνύλ, ηππηθά ιέγεηαη όηη ζα πξέπεη λα ηζρύεη ην lossless join condition, * ( R1 (r),..., Rm (r)) = r ΓΔΝ πξέπεη λα παξάγνληαη πιαζκαηηθέο πιεηάδεο θαηά ηελ θπζηθή ζπλέλσζε κεηαμύ ΟΠΟΙΩΝΓΗΠΟΤΔ ζρέζεσλ κε θνηλά γλσξίζκαηα ζπλέλσζεο. Υπάξρνπλ 2 ζεκαληηθέο ηδηόηεηεο ηεο δηάζπαζεο (decomposition) κηαο ζρέζεο: a) Γηαθύιαμε ηεο Αξρηθήο Σρέζεο: Lossless Join Decomposition Γελ κπνξεί λα παξαβιεθζεί. b) Γηαθύιαμε ησλ Σπλαξηεζηαθώλ Δμαξηήζεσλ: Functional dependency preservation Μπνξεί θάπνηε λα παξαβιεθζεί. Πεξηζζόηεξα ζε εξρόκελεο δηαιέμεηο 21-21