Βάσεις Δεδ&I

Î’&Ici - Bάσεις ∆εδοµένων Ε ΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών

Info iconThis preview shows pages 1–5. Sign up to view the full content.

View Full Document Right Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Bάσεις ∆εδοµένων Ε ΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα AΡΧΕΣ TΕΧΝΟΛΟΓΙΑΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος Γ' Bάσεις ∆εδοµένων MIXAHΛ ΞENOΣ ∆ρ Mηχανικός H/Y και Πληροφορικής ∆HMHTPIOΣ XPIΣTO∆OYΛAKHΣ Kαθηγητής Tµήµατος Mηχανικών H/Y και Πληροφορικής Πανεπιστηµίου Πατρών ΠATPA 2000 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα APXEΣ TEXNOΛOΓIAΣ ΛOΓIΣMIKOY Τόµος Γ' Bάσεις ∆εδοµένων Συγγραφή MIXAHΛ ΞENOΣ ∆ρ Mηχανικός H/Y και Πληροφορικής ∆HMHTPIOΣ XPIΣTO∆OYΛAKHΣ Kαθηγητής Tµήµατος Mηχανικών H/Y και Πληροφορικής Πανεπιστηµίου Πατρών Κριτική Ανάγνωση AΛEΞIOΣ ∆EΛHΣ Aναπληρωτής Kαθηγητής Eπιστήµης Yπολογιστών, Polytechnic University – NY Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου ΠANAΓIΩTHΣ ΠINTEΛAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση HΛIAΣ ΣTAYPOΠOYΛOΣ Γλωσσική Επιµέλεια IΩANNHΣ ΘEOΦIΛAΣ Τεχνική Επιµέλεια ΕΣΠΙ ΕΚ∆ΟΤΙΚΗ Ε.Π.Ε. Καλλιτεχνική Επιµέλεια – Σελιδοποίηση TYPORAMA Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων ΟΜΑ∆Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 1997–2000 ISBN: 960–538–116–8 Kωδικός Έκδοσης: ΠΛH 11/3 Copyright 2000 για την Ελλάδα και όλο τον κόσµο ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Οδός Παπαφλέσσα & Υψηλάντη, 26222 Πάτρα – Τηλ: (0610) 314094, 314206 Φαξ: (0610) 317244 Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη. ¶ÂÚȯfiÌÂÓ· Πρόλογος ............................................................................................................................................... 9 K∂º∞§∞π√ 1 EÈÛ·ÁˆÁ‹ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ................................................................................................. 11 1.1 Βασικοί ορισµοί .......................................................................................................... 13 1.1.1 ∆εδοµένα και πληροφορία .................................................................. 13 1.1.2 Βάση δεδοµένων .......................................................................................... 15 1.1.3 Ιστορική αναδροµή .................................................................................... 17 1.2 Σύστηµα διαχείρισης βάσεων δεδοµένων .................................. 20 1.2.1 ∆ιαφορά βάσης δεδοµένων µε σύστηµα διαχείρισης βάσεων δεδοµένων ...................................................... 21 1.2.2 ∆οµή ενός συστήµατος διαχείρισης βάσεων δεδοµένων .................................................................................... 22 1.2.3 Tι παρέχει ένα σύστηµα διαχείρισης βάσεων δεδοµένων .................................................................................... 23 Τι παρέχει η βάση δεδοµένων ........................................................................ 27 1.3.1 Tαυτόχρονη προσπέλαση ..................................................................... 28 1.3.2 Ταχύτατη εξαγωγή απαντήσεων ..................................................... 28 1.3.3 Eυελιξία ............................................................................................................... 29 1.3.4 Υψηλή ποιότητα δεδοµένων .............................................................. 29 1.3.5 Αιτίες για µη χρήση βάσεων δεδοµένων ................................ 30 Επίπεδα χρηστών ....................................................................................................... 32 1.4.1 ∆ιαχειριστής συστήµατος .................................................................... 32 1.4.2 Ιδιοκτήτης βάσης δεδοµένων ............................................................ 33 1.4.3 Xρήστες υψηλής διαβάθµισης ......................................................... 33 1.4.4 Xρήστες κατώτερης διαβάθµισης ................................................. 34 1.3 1.4 Σύνοψη ................................................................................................................................................ 35 Bιβλιογραφία για περαιτέρω µελέτη ........................................................................... 37 K∂º∞§∞π√ 2 AÚ¯ÈÙÂÎÙÔÓÈ΋ Î·È º˘ÛÈ΋ OÚÁ¿ÓˆÛË Aگ›ˆÓ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ................................................................................................. 39 6 BA™EI™ ¢E¢OMENøN 2.1 2.2 2.3 Eπίπεδα Aρχιτεκτονικής ..................................................................................... 41 2.1.1 Aρχιτεκτονική βάσεων δεδοµένων .............................................. 42 2.1.2 Το εξωτερικό επίπεδο .............................................................................. 42 2.1.3 Tο φυσικό επίπεδο ...................................................................................... 43 2.1.4 Το επίπεδο αντίληψης .............................................................................. 44 Το φυσικό επίπεδο .................................................................................................... 48 2.2.1 Τύποι δεδοµένων και πεδία ................................................................ 48 2.2.2 Εγγραφές και αρχεία ................................................................................ 48 2.2.3 Μονάδες αποθήκευσης ........................................................................... 50 Oργάνωση αρχείων στο φυσικό επίπεδο ............................................... 52 2.3.1 Βασικές έννοιες της οργάνωσης αρχείων .............................. 53 2.3.2 Κατακερµατισµός αρχείων ................................................................. 55 2.3.3 ∆εικτοδότηση αρχείων και κατάλογοι ...................................... 56 2.3.4 ∆έντρα τύπου B και δέντρα τύπου B+ ...................................... 59 Σύνοψη ................................................................................................................................................ 61 Bιβλιογραφία για περαιτέρω µελέτη ........................................................................... 61 K∂º∞§∞π√ 3 ªÔÓÙÂÏÔÔ›ËÛË Î·È £¤Ì·Ù· ™¯Â‰›·Û˘ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ................................................................................................. 63 3.1 3.2 3.3 Το ιεραρχικό µοντέλο ............................................................................................ 65 Το δικτυακό µοντέλο .............................................................................................. 69 ∆ιαγράµµατα σχέσεων – Oντοτήτων ....................................................... 71 3.3.1 Οντότητες και κατηγορήµατα .......................................................... 72 3.3.2 Σχέσεις οντοτήτων ..................................................................................... 76 3.3.3 ∆οµικά στοιχεία των διαγραµµάτων .......................................... 80 3.3.4 Μοντελοποίηση µε διαγράµµατα σχέσεων – οντοτήτων .............................................................................. 83 Σύνοψη ................................................................................................................................................ 91 Bιβλιογραφία για περαιτέρω µελέτη ........................................................................... 92 K∂º∞§∞π√ 4 ™¯ÂÛȷΤ˜ B¿ÛÂȘ ¢Â‰ÔÌ¤ÓˆÓ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ................................................................................................. 93 4.1 Το σχεσιακό µοντέλο ............................................................................................. 85 ¶EPIEXOMENA 7 4.1.1 Βασικές έννοιες 4.2 Σχεσιακή άλγεβρα 4.2.1 Eπιλογή 4.2.3 Ένωση 4.2.4 Tοµή 4.2.2 Προβολή ............................................................................................ 96 4.1.2 Ακεραιότητα δεδοµένων ....................................................................... 99 ........................................................................................ 104 106 106 107 107 ............................................................................................................. .......................................................................................................... ................................................................................................................ .................................................................................................................... 4.2.5 ∆ιάφορα ............................................................................................................ 107 4.2.6 Καρτεσιανό γινόµενο ............................................................................ 108 4.2.7 Σύνδεση 4.3 ............................................................................................................ ....................................................................................... .................................................................................... 108 108 109 4.2.8 Φυσική σύνδεση Σχεσιακός υπολογισµός Σύνοψη ............................................................................................................................................. 112 Bιβλιογραφία ια περαιτέρω µελέτη ......................................................................... 112 K∂º∞§∞π√ 5 H °ÏÒÛÛ· EÚˆÙ‹ÛÂˆÓ SQL Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις .............................................................................................. 113 5.1 5.2 Αρχές των γλωσσών ερωτήσεων 5.2.1 Select… From… Where… .............................................................. 115 118 125 127 129 130 133 136 137 Αναζήτηση δεδοµένων στην SQL ............................................................ 117 .............................................................. ........................................................ ......................................................... 5.2.2 ∆ιάταξη των αποτελεσµάτων 5.2.3 Λοιπές εντολές στη συνθήκη 5.2.4 Μετονοµασία πινάκων 5.2.5 Εντολές συνόλων 5.2.6 Σύνδεση πινάκων ........................................................................ ..................................................................................... ..................................................................................... ....... 5.2.7 Αρίθµηση, µέγιστα – ελάχιστα και οµαδοποίηση 5.2.8 Γενική µορφή εντολής αναζήτησης 5.3 ......................................... Oρισµός, διαχείριση και παρουσίαση δεδοµένων στην SQL ......................................................................................... 138 5.3.1 Create table και alter table ................................................................ 138 5.3.2 Insert, delete, update .............................................................................. 140 5.3.3 Όψεις ................................................................................................................... 141 Σύνοψη ............................................................................................................................................. 141 Bιβλιογραφία για περαιτέρω µελέτη ........................................................................ 142 8 BA™EI™ ¢E¢OMENøN K∂º∞§∞π√ 6 H °ÏÒÛÛ· EÚˆÙ‹ÛÂˆÓ QBE Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ............................................................................................. 143 6.1 6.2 6.3 Η φιλοσοφία της QBE Συνθήκες ....................................................................................... 145 148 152 ........................................................................................................................ ........................... Η QBE σε συνδυασµό µε γραφικό περιβάλλον Σύνοψη ............................................................................................................................................. 155 Bιβλιογραφία για περαιτέρω µελέτη ........................................................................ 156 K∂º∞§∞π√ 7 ∞ÓÙÈÎÂÈÌÂÓÔÛÙÚ·Ê›˜ B¿ÛÂȘ ¢Â‰ÔÌ¤ÓˆÓ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ............................................................................................. 157 7.1 7.2 Η φιλοσοφία των αντικειµενοστραφών βάσεων δεδοµένων .............................. 159 Η αντικειµενοστραφής γλώσσα ερωτήσεων OQL και η πρότυπη γλώσσα ερωτήσεων SQL3 ....................................... 161 Σύνοψη ............................................................................................................................................. 164 Bιβλιογραφία για περαιτέρω µελέτη ........................................................................ 164 K∂º∞§∞π√ 8 AÓ·ÎÂÊ·Ï·›ˆÛË Î·È EfiÌÂÓ· B‹Ì·Ù· MÂϤÙ˘ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις ............................................................................................. 165 Συνέχεια µελέτης .................................................................................................... 166 Eπίλογος 169 ......................................................................................................................................... Aπαντήσεις ασκήσεων αυτοαξιολόγησης ......................................................... 171 Oδηγίες και κατευθύνσεις για τις δραστηριότητες .................................... 205 Aλφαβητικό ευρετήριο όρων (ελληνικά – αγγλικά) Aλφαβητικό ευρετήριο όρων (αγγλικά – ελληνικά) Γλωσσάριο 215 217 219 ................................ ................................ ................................................................................................................................... ¶ÚfiÏÔÁÔ˜ Έχοντας ολοκληρώσει τη µελέτη των δύο πρώτων τόµων της Θεµατικής Ενότητας «Αρχές Τεχνολογίας Λογισµικού», έχετε αποκτήσει σηµαντικές γνώσεις για ένα µεγάλο τµήµα της διαδικασίας ανάπτυξης λογισµικού, καθώς και εξειδικευµένες γνώσεις για θέµατα όπως τα Λειτουργικά Συστήµατα των Υπολογιστών. Στον τρίτο τόµο της Θεµατικής Ενότητας «Αρχές Τεχνολογίας Λογισµικού» που έχετε στα χέρια σας και που έχει τίτλο «Βάσεις ∆εδοµένων» θα µιλήσουµε για τα εργαλεία του υπολογιστή που χρησιµοποιούνται για την οργάνωση των δεδοµένων µας καθώς και για να δίνουν απαντήσεις σε ερωτήσεις που σχετίζονται µε αυτά τα δεδοµένα. Ο τόµος αυτός οργανώνεται σε οκτώ κεφάλαια. Στο 1ο κεφάλαιο δίδονται οι βασικοί ορισµοί, περιγράφεται η Βάση ∆εδοµένων και το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, συζητούνται θέµατα χρήσης της Βάσης ∆εδοµένων και παρουσιάζονται οι χρήστες των Βάσεων ∆εδοµένων. Στο 2ο κεφάλαιο περιγράφεται η αρχιτεκτονική των Βάσεων ∆εδοµένων και δίνεται έµφαση στο φυσικό επίπεδο, όπου και συζητιούνται οι δοµές αποθήκευσης που χρησιµοποιούν τα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων. Στο 3ο κεφάλαιο συζητούνται θέµατα σχεδίασης της Βάσης ∆εδοµένων, παρουσιάζονται συνοπτικά µοντέλα Βάσεων ∆εδοµένων και δίνεται έµφαση στα ∆ιαγράµµατα Σχέσεων – Οντοτήτων. Στο 4ο κεφάλαιο περιγράφουµε το Σχεσιακό Μοντέλο και παρουσιάζουµε συνοπτικά τη Σχεσιακή Άλγεβρα και το Σχεσιακό Υπολογισµό. Στο 5ο κεφάλαιο περιγράφουµε τη γλώσσα ερωτήσεων SQL, παρουσιάζουµε τις βασικές αρχές των γλωσσών ερωτήσεων και το σκοπό που εξυπηρετούν αυτές, καθώς και τις εντολές της γλώσσας ερωτήσεων SQL. Στο 6ο κεφάλαιο περιγράφουµε τη γλώσσα ερωτήσεων QBE, µιλάµε για τις συνθήκες σε QBE και δείχνουµε πώς η QBE µπορεί να χρησιµοποιηθεί σε συνεργασία µε ένα γραφικό περιβάλλον υποβολής ερωτήσεων. Στο 7ο κεφάλαιο περιγράφουµε πολύ συνοπτικά τις βασικές αρχές των αντικειµενοστραφών Βάσεων ∆εδοµένων και σας παρουσιάζουµε βασικές έννοιες της αντικειµενοστραφούς γλώσσας ερωτήσεων OQL και της SQL3. Τέλος, στο 8ο κεφάλαιο κάνουµε µία σύνοψη της ύλης που παρουσιάσαµε και σας 10 BA™EI™ ¢E¢OMENøN δίνουµε κατευθύνσεις για τη συνέχεια της µελέτης σας. Σε όλα τα κεφάλαια υπάρχουν δραστηριότητες και ασκήσεις αυτοαξιολόγησης που θα σας βοηθήσουν να κατανοήσετε καλύτερα την ύλη του τόµου αυτού. Mερικοί από εσάς, που έχουν ήδη κάποιες γνώσεις πληροφορικής, θα παρατηρήσουν ότι κάποιοι ορισµοί στο βιβλίο δεν είναι αυτοί που θα περίµεναν. Aυτό έχει γίνει γιατί δεν θέλουµε να δώσουµε ορισµούς που περιέχουν έννοιες που δεν έχετε διδαχθεί. Έτσι, αρκετοί ορισµοί έχουν απλοποιηθεί για να είναι κατανοητοί από όλους σας, µε βάση τις γνώσεις που έχετε αποκτήσει µέχρι τώρα. Στο τέλος του τόµου θα πρέπει να γνωρίζετε: • τις βασικές αρχές των Βάσεων ∆εδοµένων και των Συστηµάτων ∆ιαχείρισης Βάσεων ∆εδοµένων, • τα Μοντέλα Βάσεων ∆εδοµένων, • την οργάνωση των δεδοµένων στο φυσικό επίπεδο, • τις βασικές αρχές των Σχεσιακών και Αντικειµενοστραφών Βάσεων ∆εδοµένων. Επίσης, θα πρέπει να µπορείτε να: • σχεδιάζετε το διάγραµµα Σχέσεων – Οντοτήτων για κάθε Βάση ∆εδοµένων, • περιγράφετε ερωτήσεις σε Σχεσιακή Άλγεβρα και Σχεσιακό Υπολογισµό, • περιγράφετε ερωτήσεις και εντολές σε SQL και QBE. Oι συγγραφείς θέλουν να ευχαριστήσουν όλους εκείνους που συντέλεσαν σηµαντικά στη βελτίωση του βιβλίου αυτού και βοήθησαν στην παραγωγή του. Παρακαλούµε για την κατανόησή σας σχετικά µε µικρολάθη ή παραλήψεις που πιθανόν µας «ξέφυγαν» κατά τη συγγραφή αυτού του βιβλίου, και που ίσως εντοπίσετε· θα εκτιµούσαµε πολύ την ευγενική συνεισφορά σας για τον εντοπισµό και τη διόρθωσή τους. Παρόλα αυτά, είµαστε σίγουροι ότι τ βιβλίο αυτό θα αποτελέσει ένα πολύτιµο «εργαλείο µάθησης» στα χέρια σας. Mιχάλης Ξένος – ∆ηµήτρης Xριστοδουλάκης ∫ ∂ EÈÛ·ÁˆÁ‹ ™ÎÔfi˜ Σκοπός αυτού του κεφαλαίου είναι: α) Να σας εισάγει στις βασικές έννοιες των βάσεων δεδοµένων, β) να σας ενηµερώσει για την ύλη που καλύπτεται σε αυτό το βιβλίο και γ) να σας προτείνει εναλλακτικούς τρόπους οργάνωσης της µελέτης σας. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • εξηγήσετε τους βασικούς όρους που σχετίζονται µε το αντικείµενο των Βάσεων ∆εδοµένων • διακρίνετε τις έννοιες δεδοµένα και πληροφορία • εξηγήσετε τις διαφορές ανάµεσα σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων και µίας Βάσης ∆εδοµένων • διακρίνετε µεταξύ των περιπτώσεων όπου απαιτείται ή όχι η χρήση (ή κατασκευή) µίας Βάσης ∆εδοµένων • αναφέρετε τι παρέχει µία Βάση ∆εδοµένων και τι ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων • περιγράψετε τις βασικές λειτουργίες που επιτελεί ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων • περιγράψετε τους χρήστες µιας Βάσης ∆εδοµένων και τους στόχους καθενός από τη χρήση της Βάσης ∆εδοµένων ŒÓÓÔȘ ÎÏÂȉȿ • Βάση ∆εδοµένων (Database) • Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων (Database Management System (DBMS)) • ∆εδοµένα (Data) • Πληροφορία (Information) • Οργάνωση ∆εδοµένων (Data Organization) 1 º ∞ § ∞ π √ 12 KEºA§AIO 1: EI™A°ø°H • Χρήστες Βάσης ∆εδοµένων (Database Users) • Όψεις ∆εδοµένων (Data Views) • Επίπεδα Προσπέλασης Βάσης ∆εδοµένων (Database User Levels) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό εισάγεται η έννοια των Βάσεων ∆εδοµένων και των αναγκών που έρχονται να καλύψουν. Θα συζητήσουµε τις βασικές έννοιες που πρέπει να γνωρίζετε για τις Βάσεις ∆εδοµένων, θα περιγράψουµε το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων (DBMS) και τις διαφορές του από τη Βάση ∆εδοµένων, θα αναλύσουµε τις δυνατότητες που σας παρέχουν οι Βάσεις ∆εδοµένων και θα δούµε τους πιθανούς χρήστες µιας Βάσης ∆εδοµένων και τι ζητάει κάθε ένας από αυτούς. 1.1 µ·ÛÈÎÔ› ÔÚÈÛÌÔ› ™ÎÔfi˜ Σκοπός της ενότητας είναι να ορίσει τις βασικές έννοιες µε τις οποίες θα ασχοληθούµε στη συνέχεια του µαθήµατος, δηλαδή τα δεδοµένα, την πληροφορία, τη Βάση ∆εδοµένων, το σκοπό της Βάσης ∆εδοµένων (δηλαδή το λόγο δηµιουργίας και χρήσης της) και τους χρήστες µιας Βάσης ∆εδοµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τους όρους Βάση ∆εδοµένων, δεδοµένα, πληροφορία και χρήστες • διακρίνετε ανάµεσα στις έννοιες «δεδοµένα» και «πληροφορία» • δώσετε τουλάχιστον τρία παραδείγµατα Βάσεων ∆εδοµένων • αναγνωρίσετε Βάσεις ∆εδοµένων που χρησιµοποιούµε στη ζωή µας • αναφέρετε ένα πρόβληµα που σχετίζεται µε Βάσεις ∆εδοµένων χρησιµοποιώντας τεχνικούς όρους ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή θα δοθούν οι βασικοί όροι τόσο στα Ελληνικά όσο και στα Αγγλικά (σε παρενθέσεις). Αυτό γίνεται ώστε να σας δώσουµε τη δυνατότητα να γνωρίζετε και την αγγλική µετάφραση του κάθε όρου, µια και η περισσότερη βιβλιογραφία που παρατίθεται στο τέλος του κεφαλαίου είναι στα αγγλικά. 1.1.1 ¢Â‰Ô̤ӷ Î·È ÏËÚÔÊÔÚ›· Πριν προχωρήσουµε στην έννοια της Βάσης ∆εδοµένων πρέπει να διακρίνουµε µεταξύ των εννοιών δεδοµένα (data) και πληροφορία (information). Από τα πρώτα χρόνια της χρήσης των Ηλεκτρονικών Υπολογιστών οι έννοιες δεδοµένα και πληροφορία συγχέονταν µεταξύ τους. I I Ως δεδοµένα ορίζονται στοιχεία, έννοιες και οδηγίες, τυποποιηµένα σε καθορισµένη µορφή, κατάλληλα για επεξεργασία από ανθρώπους ή µηχανές. 14 KEºA§AIO 1: EI™A°ø°H Έτσι τα δεδοµένα µπορούν να είναι λέξεις π.χ. {“Νίκος”, “Μιχάλης”, “Μαρία”, “Θάλασσα”, “Αυτοκίνητο”}, αριθµοί, π.χ. {1, 2, 3, 5, 78}, συµβολοσειρές (strings) π.χ. {“Κώστας”, “5621”, “ΤΡ–882”, “6&5 #1”, “<>+–/*”}, ή σύµβολα που έχουν νόηµα σε συγκεκριµένο πλαίσιο αναφοράς. Ένα τέτοιο παράδειγµα, δεδοµένων είναι ψηφιοποιηµένες εικόνες µε κάποια καθορισµένη τυποποίηση. Aυτές οι εικόνες θα έχουν νόηµα µόνο µε τη χρήση ενός συγκεκριµένου προγράµµατος απεικόνισης, δηλαδή µέσα στο πλαίσιο το προγράµµατος απεικόνισης, ενώ έξω από αυτό είναι ακατανόητες συλλογές συµβόλων. Έτσι όπως ορίσαµε τα δεδοµένα είναι φανερό ότι είναι κατάλληλα για αποθήκευση σε ηλεκτρονικό υπολογιστή. Οι άνθρωποι, όµως, χρησιµοποιούσαν δεδοµένα –πολύ πριν από την ανακάλυψη των ηλεκτρονικών υπολογιστών– στα πλαίσια ενός πεδίου αναφοράς για την εξαγωγή συµπερασµάτων ή την λήψη αποφάσεων. Για παράδειγµα, από τα δεδοµένα {85, 210, 515} και τα δεδοµένα {“Κόρινθος”, “Πάτρα”, “Θεσσαλονίκη”}, αλλά και από τη γνώση (πεδίο αναφοράς) ότι τα πρώτα δεδοµένα περιγράφουν αποστάσεις πό την Αθήνα για τις πόλεις που ορίζονται στα δεύτερα δεδοµένα, κάποιος µπορεί να καταλάβει ότι «η Πάτρα είναι πιο µακριά από την Αθήνα από ότι η Κόρινθος, αλλά πολύ κοντύτερα στην Aθήνα από ότι η Θεσσαλονίκη». Αυτό το συµπέρασµα είναι πληροφορία. I Συνοψίζοντας µπορούµε να πούµε ότι τα δεδοµένα είναι κωδικοποιηµένη αναπαράσταση πληροφορίας, ενώ η πληροφορία εξάγεται από τα δεδοµένα µε βάση το πεδίο αναφοράς των δεδοµένων ή συγκεκριµένη γνώση για αυτά. I Η πληροφορία εξάγεται από τα δεδοµένα και χρησιµοποιείται στην επίλυση προβληµάτων. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.1 Ακολουθούν µερικές προτάσεις. Ποιες από αυτές είναι σωστές και ποιες λάθος; Σωστό Λάθος Τα {1, 2, 4, 5, 7, 9} είναι δεδοµένα. ❏ ❏ ❏ ❏ Τα {1, “Νίκος”, 4, 5, “Ποδήλατο”} είναι δεδοµένα. ❏ Τα {“Αθήνα”, 34, “Παρίσι”, 28, “Μόσχα”, 11, “Μαδρίτη”, 37, “Ρώµη”, 33} είναι πληροφορία. ❏ 1.1 µ∞™π∫√π √ƒπ™ª√π 15 Τα {“Αθήνα”, 34, “Παρίσι”, 28, “Μόσχα”, 11, “Μαδρίτη”, 37, “Ρώµη”, 33} είναι δεδοµένα. Τα δεδοµένα γίνονται πληροφορία µόλις αποθηκευτούν στον ηλεκτρονικό υπολογιστή. ❏ ❏ ❏ ❏ 1.1.2 µ¿ÛË ‰Â‰ÔÌ¤ÓˆÓ Ένα βασικό χαρακτηριστικό των δεδοµένων, έτσι όπως τα παρουσιάσαµε είναι ότι είναι κατάλληλα για να αποθηκευτούν σε ηλεκτρονικό υπολογιστή. Αυτό οδηγεί στο επόµενο βήµα που είναι η δηµιουργία και χρήση Βάσεων ∆εδοµένων (databases). I Η σχετικότητα των δεδοµένων είναι σηµαντική για τον ορισµό µιας Βάσης ∆εδοµένων. ∆εδοµένα που δε σχετίζονται µεταξύ τους και απλά έχουν αποθηκευτεί σε έναν ηλεκτρονικό υπολογιστή δεν αποτελούν µια Βάση ∆εδοµένων. Μια Βάση ∆εδοµένων πρέπει να αντικατοπτρίζει ένα περιβάλλον του πραγµατικού κόσµου. Τα δεδοµένα που αποθηκεύονται στη Βάση ∆εδοµένων πρέπει να έχουν λογική συνέχεια και νόηµα. Επίσης οι λειτουργίες που παρέχει η Βάση ∆εδοµένων είναι σηµαντικές για τον ορισµό µιας Βάσης ∆εδοµένων. Συλλογές δεδοµένων χωρίς τη δυνατότητα ενός αυτόµατου, κοινού και κεντρικού τρόπου χειρισµού των δεδοµένων αυτών, δεν αποτελούν Βάση ∆εδοµένων. Απλά είναι δεδοµένα αποθηκευµένα στον ηλεκτρονικό υπολογιστή. Η Βάση ∆εδοµένων έχει ένα σκοπό. Υλοποιείται για να απεικονίσει στον υπολογιστή ένα πρόβληµα και να διευκολύνει τη λύση του. Αυτό συνήθως σηµαίνει ότι τα δεδοµένα που χειρίζεται δεν είναι στατικά αλλά δυναµικά, δηλαδή αλλάζουν συνεχώς. Η Βάση ∆εδοµένων περιέχει τα δεδοµένα που περιγράφουν τη συγκεκριµένη χρονική στιγµή το «πρόβληµα», µπορεί όµως να περιέχει και δεδοµένα από την ιστορία του προβλήµατος. I Η Βάση ∆εδοµένων είναι µια αυστηρά τυποποιηµένη συλλογή από σχετικά µεταξύ τους δεδοµένα, που παρέχει έναν αυτόµατο, κεντρικό και κοινό τρόπο χειρισµού τους. 16 KEºA§AIO 1: EI™A°ø°H ¶·Ú¿‰ÂÈÁÌ· 1.1 Ας δούµε µία αρκετά απλή Βάση ∆εδοµένων: Έστω ότι θέλουµε να έχουµε στον ηλεκτρονικό υπολογιστή τη θερµοκρασία 5 µεγάλων ευρωπαϊκών πόλεων κάθε µέρα στις 12 το µεσηµέρι. Θα πρέπει λοιπόν να αποθηκεύσουµε στον υπολογιστή δεδοµένα που θα είναι (για λόγους απλότητας) της µορφής {“Αθήνα”, 24, “15–1–98”}, {“Ρώµη”, 29, “12–1–98”} κτλ. Προσέξτε ότι χρειαζόµαστε και την πληροφορία για την ηµεροµηνία. Επίσης, όπως ορίσαµε παραπάνω, θα πρέπει για να έχουµε Βάση ∆εδοµένων να έχουµε και τη δυνατότητα χειρισµού αυτών των δεδοµένων. Έτσι θα πρέπει να µπορούµε να αντλήσουµε πληροφορίες όπως «ποια είναι η θερµοκρασία που είχε η Αθήνα στις 25 Μαρτίου του 1998;» ή «που έκανε πιο πολύ ζέστη, στην Αθήνα ή στην Ρώµη στις 31 Αυγούστου 1997;». Τέλος θα πρέπει να µπορούµε να χειριστούµε τα δεδοµένα, δηλαδή να εισάγουµε νέα δεδοµένα στη Βάση ∆εδοµένων (όπως είναι οι σηµερινές θερµοκρασίες), ή να σβήσουµε κάποια παλαιά δεδοµένα, που πιθανόν δεν χρειαζόµαστε άλλο. Βέβαια για να µπορεί η Βάση ∆εδοµένων να µας παρέχει σωστά δεδοµένα (που θα µας οδηγούν σε σωστές πληροφορίες) πρέπει να αναλάβουµε την καθηµερινή εισαγωγή δεδοµένων σε αυτή, αλλά και να ελέγχουµε την ορθότητα των δεδοµένων που εισάγουµε. I Χρήστες µιας Βάσης ∆εδοµένων είναι όσοι χρησιµοποιούν τη Βάση ∆εδοµένων είτε για απόκτηση πληροφορίας είτε για συντήρηση της Βάσης ∆εδοµένων. Η Βάση ∆εδοµένων που περιγράφουµε στο παράδειγµα 1.1 έχει όλα τα στοιχεία που καθορίζουν µια Βάση ∆εδοµένων. Είναι µια πολύ απλή Βάση ∆εδοµένων µε µετεωρολογικές πληροφορίες. Για να µπορεί όµως να αναπαριστά δυναµικά τον πραγµατικό κόσµο θα πρέπει κάποιοι άνθρωποι να είναι επιφορτισµένοι µε το καθήκον να εισάγουν δεδοµένα σε αυτή. Οι άνθρωποι αυτοί χρησιµοποιούν τη Βάση ∆εδοµένων και καλούνται χρήστες (users). Οι λειτουργίες που επιτελούν σχετίζονται όχι µόνο µε την εισαγωγή δεδοµένων, αλλά γενικότερα φροντίζουν για την εύρυθµη λειτουργία της Βάσης ∆εδοµένων. Αυτή η διαδικασία ονοµάζεται συντήρηση της Βάσης ∆εδοµένων. Χρήστες είναι επίσης και όσοι ανατρέχουν στη Βάση ∆εδοµένων για πληροφορίες, π.χ. για να µάθουν τι θερµοκρασία είχε η Αθήνα σήµερα. I Σε επόµενη ενότητα (στην ενότητα 1.4) θα µιλήσουµε αναλυτικά για τους χρήστες και τα επίπεδα χρηστών µιας Βάσης ∆εδοµένων. 1.1 µ∞™π∫√π √ƒπ™ª√π 17 Θα προσπαθήσουµε να επεκτείνουµε τη µετεωρολογική Βάση ∆εδοµένων που αναφέραµε ως παράδειγµα, επαυξάνοντας την και µε άλλες πληροφορίες. Ποια από τα δεδοµένα που ακολουθούν πιστεύετε πως µπορούν να ενταχθούν στη Βάση ∆εδοµένων του παραδείγµατος ώστε αυτή να παραµείνει µία µετεωρολογική Βάση ∆εδοµένων; Σωστό ∆εδοµένα για την υγρασία των πόλεων. Π.χ. υγρασία 87%. ∆εδοµένα και για άλλες ώρες τις ηµέρας, όπως η θερµοκρασία των πόλεων ανά ώρα. ∆εδοµένα για τον αέρα και την έντασή του σε κάθε πόλη κάθε µεσηµέρι. ❏ ❏ ❏ Λάθος ❏ ❏ ❏ ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.2 Eπιλέξτε την πιο σωστή από τις παρακάτω προτάσεις. Μια συλλογή από δεδοµένα για να αποτελεί µία Βάση ∆εδοµένων πρέπει να: α) Αποτελείται από δεδοµένα σχετικά µεταξύ τους. β) Παρέχει ένα τρόπο χειρισµού των δεδοµένων έτσι ώστε να µπορούν να εξαχθούν πληροφορίες από αυτά. γ) Σχετίζεται µε κάποιο υπαρκτό πρόβληµα το οποίο να αναπαριστά µε δεδοµένα για κάποιο συγκεκριµένο σκοπό. δ) Όλα τα παραπάνω. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.3 1.1.3 πÛÙÔÚÈ΋ ·Ó·‰ÚÔÌ‹ Οι Βάσεις ∆εδοµένων δεν προϋποθέτουν την ύπαρξη ηλεκτρονικού υπολογιστή. Οι πρώτες Βάσεις ∆εδοµένων δεν βασίζονταν σε ηλεκτρονικό υπολογιστή, αλλά σε χαρτί και οργανώνονταν µε φακέλους ή καρτέλες. Αρκετές υπηρεσίες δυστυχώς λειτουργούν µε παρόµοιο τρόπο ακόµα και σήµερα. Η Βάση ∆εδοµένων του παραδείγµατος θα µπορούσε κάλλιστα να χρησιµοποιεί καρτέλες της µορφής του παραδείγµατος 1.2. 18 KEºA§AIO 1: EI™A°ø°H ¶·Ú¿‰ÂÈÁÌ· 1.2 ΑΘΗΝΑ – Ιανουάριος 1998 1 6 11 16 21 26 31 17 o C 12o C 23 o C 21 o C 7o C 9o C 10 o C 2 7 12 17 22 27 21 o C 8o C 25 o C 23 o C 6o C 5o C 3 8 13 18 23 28 20 o C 13 o C 20 o C 12 o C 3o C 11 o C 4 9 14 19 24 29 18 o C 12 o C 17 o C 9o C 7o C 8o C 5 10 15 20 25 30 16 o C 21 o C 17 o C 5o C 5o C 10 o C Μια Βάση ∆εδοµένων που θα βασιζόταν σε τέτοιες καρτέλες θα µπορούσε να παρέχει τις ίδιες πληροφορίες µε µια Βάση ∆εδοµένων σε ηλεκτρονικό υπολογιστή, όµως ο χειρισµός της θα ήταν πολύ πιο δύσκολος. Έτσι για παράδειγµα θα µπορούσαµε εύκολα να ανακτήσουµε την πληροφορία «θερµοκρασί στην Αθήνα στις 12 το µεσηµέρι στις 16 Ιανουαρίου 1998» τόσο από τον ηλεκτρονικό υπολογιστή, όσο και από τη Βάση ∆εδοµένων µε τις καρτέλες. Στον υπολογιστή όµως, πληροφορίες όπως «ποιες ηµέρες στην Αθήνα έκανε περισσότερη ζέστη από τη Ρώµη;» ή «ποια πόλη ήταν η πιο ζεστή για κάθε ηµέρα του χρόνου;» µπορούν να υλοποιηθούν εύκολα σε αντίθεση µε τις καρτέλες. Σκεφτείτε πόσοι άνθρωποι θα έπρεπε να δουλέψουν µε τις καρτέλες για να ετοιµασθούν οι απαντήσεις για τις δύο παραπάνω ερωτήσεις εάν είχαµε δεδοµένα για τα δέκα προηγούµενα έτη! Αυτή η ανάγκη για αξιοποίηση των δυνατοτήτων του ηλεκτρονικού υπολογιστή οδήγησε στην δηµιουργία των πρώτων Βάσεων ∆εδοµένων. Οι βάσεις αυτές απλά υλοποιούσαν στον ηλεκτρονικό υπολογιστή σχήµατα όπως το παραπάνω µε τις καρτέλες και εκµεταλλεύονταν τις δυνατότητες του υπολογιστή για ταχύτατη και µαζική επεξεργασία δεδοµένων και εξαγωγή απαντήσεων σε ερωτήσεις, δηλαδή εξαγωγή πληροφορίας. Οι Βάσεις ∆εδοµένων εξελίχτηκαν πολύ τα χρόνια που πέρασαν. Από 1.1 µ∞™π∫√π √ƒπ™ª√π / 1.2 ™À™∆∏ª∞ ¢π∞Ã∂πƒπ™∏™ µ∞™∂ø¡ ¢∂¢√ª∂¡ø¡ 19 µικρές Βάσεις ∆εδοµένων που χειρίζονταν µικρούς αριθµούς δεδοµένων παρουσιάστηκαν Βάσεις ∆εδοµένων που χειρίζονται τεράστιο όγκο πολύπλοκων δεδοµένων. Σήµερα µιλάµε για Βάσεις ∆εδοµένων της τάξης των terabytes* µε δεδοµένα τα οποία περιέχουν εικόνες, ή βίντεο και Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων µε δυνατότητες ενσωµάτωσης λειτουργιών για καλύτερο χειρισµό των δεδοµένων, καθώς και για τρόπους εναλλακτικής οργάνωσης των δεδοµένων, όπως οι αντικειµενοστραφείς Βάσεις ∆εδοµένων που θα εξετάσουµε στο κεφάλαιο 7. Σκεφτείτε και περιγράψτε τουλάχιστον άλλα τρία παραδείγµατα Βάσεων ∆εδοµένων. Σε κάθε παράδειγµα αναφέρατε µια σύντοµη περιγραφή της Βάσης ∆εδοµένων, του σκοπού της και του µοντέλου του πραγµατικού κόσµου για το οποίο συγκεντρώνει δεδοµένα. Επίσης αναφέρατε τη µορφή των δεδοµένων που θα εισαχθούν στην κάθε Βάση ∆εδοµένων. Καταγράψτε τις απόψεις σας προσπαθώντας να µην υπερβείτε τη µισή σελίδα ανά Βάση ∆εδοµένων. Στις τελευταίες σελίδες του βιβλίου θα βρείτε κατευθύνσεις για το τι θα µπορούσατε να περιγράψετε. ¢Ú·ÛÙËÚÈfiÙËÙ· 1.1 * 1terabyte = 1012 bytes ή 1.000.000.000.000 bytes 20 KEºA§AIO 1: EI™A°ø°H 1.2 ™‡ÛÙËÌ· ‰È·¯Â›ÚÈÛ˘ ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ ™ÎÔfi˜ Σκοπός της ενότητας είναι η περιγραφή του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων και των δυνατοτήτων που παρέχει, καθώς και η περιγραφή του υλικού και του λογισµικού που συνεργάζονται σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τη δοµή και τη λειτουργικότητα ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων • διακρίνετε ανάµεσα σε Βάσεις ∆εδοµένων και Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων • εξηγήσετε τη σχέση υλικού και λογισµικού σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων • περιγράψετε τι µας παρέχει ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων Η εξέλιξη των Βάσεων ∆εδοµένων και οι ανάγκες για δηµιουργία όλο και περισσότερων Βάσεων ∆εδοµένων, οδήγησαν στη δηµιουργία των Συστηµάτων ∆ιαχείρισης Βάσεων ∆εδοµένων (Database Management Systems ή DBMS). Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων είναι ένα εργαλείο το οποίο διευκολύνει τους χρήστες να εργάζονται µε Βάσεις ∆εδοµένων. Με τη χρήση του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων οι χρήστες µπορούν να κατασκευάσουν και να χρησιµοποιήσουν Βάσεις ∆εδοµένων. Ακολουθεί ο ορισµός του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων. I Ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων κατά κανόνα «φιλοξενεί» πολλές Βάσεις ∆εδοµένων που έχουν κατασκευαστεί από διαφορετικούς χρήστες. Οι δυνατότητες που παρέχει ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων στους χρήστες συνοψίζονται στις παρακάτω: • Ορισµός της Βάσης ∆εδοµένων • Κατασκευή της Βάσης ∆εδοµένων • ∆ιαγραφή της Βάσης ∆εδοµένων • Χρήση της Βάσης ∆εδοµένων Στον ορισµό της Βάσης ∆εδοµένων ο χρήστης µπορεί να καθορίσει το I Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων είναι το λογισµικό το οποίο επιτρέπει στους χρήστες να δηµιουργούν και να χρησιµοποιούν Βάσεις ∆εδοµένων. 1.2 ™À™∆∏ª∞ ¢π∞Ã∂πƒπ™∏™ µ∞™∂ø¡ ¢∂¢√ª∂¡ø¡ 21 µοντέλο της Βάσης ∆εδοµένων, να ορίσει τους τύπους δεδοµένων που θα χρησιµοποιήσει και να ελέγξει τη Βάση ∆εδοµένων χωρίς να προχωρήσει σε κατασκευή της. Στην κατασκευή της Βάσης ∆εδοµένων οι τύποι των δεδοµένων και τα δεδοµένα αποθηκεύονται στο υλικό (hardware) του ηλεκτρονικού υπολογιστή µε διαδικασίες που ελέγχονται από το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων και δεν απασχολούν ον χρήστη. Στη διαγραφή της Βάσης ∆εδοµένων ο χρήστης αποφασίζει τον τερµατισµό µιας Βάσης ∆εδοµένων και την αποµάκρυνση των δεδοµένων από το υλικό. Τέλος, κατά τη χρήση της Βάσης ∆εδοµένων ο χρήστης, είτε χειρίζεται τα δεδοµένα (εισάγει νέα δεδοµένα, τροποποιεί δεδοµένα, ή διαγράφει δεδοµένα), είτε υποβάλει ερωτήσεις στη Βάση ∆εδοµένων µε στόχο την εξαγωγή πληροφοριών. 1.2.1 ¢È·ÊÔÚ¿ ‚¿Û˘ ‰Â‰ÔÌ¤ÓˆÓ Ì ۇÛÙËÌ· ‰È·¯Â›ÚÈÛ˘ ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ Σε αυτό το σηµείο πρέπει να είναι ξεκάθαρη σε εσάς η διαφορά µεταξύ ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων και µίας Βάσης ∆εδοµένων. Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων είναι λογισµικό το οποίο διευκολύνει τους χρήστες να υλοποιήσουν Βάσεις ∆εδοµένων. Αντίθετα η Βάση ∆εδοµένων υλοποιείται µε τη βοήθεια ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων που χειρίζεται δεδοµένα τα οποία αποθηκεύονται στο υλικό του υπολογιστή. Η όλη διαδικασία χειρισµού και αποθήκευσης των δεδοµένων διευκολύνεται από το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, το οποίο αναλαµβάνει τη µετατροπή των εντολών του χρήστη σε εντολές προς τον υπολογιστή και λειτουργίες που σχετίζονται µε το χειρισµό των δεδοµένων στο υλικό του υπολογιστή. Ο χρήστης µιας Βάσης ∆εδοµένων επιτελεί λειτουργίες που µπορούν να οµαδοποιηθούν στις παρακάτω: εισαγωγή δεδοµένων, διαγραφή δεδοµένων, αλλαγή δεδοµένων και ανάκληση δεδοµένων. Όλες οι παραπάνω λειτουργίες προϋποθέτουν επικοινωνία µε το υλικό του υπολογιστή (π.χ. το µαγνητικό δίσκο του υπολογιστή). Αυτή η επικοινωνία γίνεται µέσω του λογισµικού του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων. Η επικοινωνία αυτή συνήθως δεν είναι ορατή από τον χρήστη της Βάσης ∆εδοµένων, ο οποίος απλά βλέπει τα αποτελέσµατα από τις λειτουργίες που ζήτησε να επιτελούνται. Αυτό είναι 22 KEºA§AIO 1: EI™A°ø°H και το σηµείο που κάνει αρκετούς χρήστες να συγχέουν τις έννοιες Βάση ∆εδοµένων και Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. 1.2.2 ¢ÔÌ‹ ÂÓfi˜ Û˘ÛÙ‹Ì·ÙÔ˜ ‰È·¯Â›ÚÈÛ˘ ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ Ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων µπορεί να απεικονισθεί όπως στο σχήµα 1.1. Στο δεξιό µέρος του σχήµατος 1.1 παρουσιάζεται το είδος (µέσο αποθήκευσης) του υλικού (hardware) του υπολογιστή στον οποίο αποθηκεύονται τα δεδοµένα. Σε µικρές Βάσεις ∆εδοµένων το µέσο αυτό συνήθως είναι ο σκληρός δίσκος του υπολογιστή, ενώ σε µεγάλες Βάσεις ∆εδοµένων χρησιµοποιούνται πολλαπλά επίπεδα αποθήκευσης που ποικίλουν από σκληρούς δίσκους διαφορετικής ταχύτητας και χωρητικότητας, juke boxes από CDs, µαγνητικές ταινίες κτλ. Σύστηµα διαχείρησης βάσεων δεδοµένων Bάση δεδοµένων 1 … ™¯‹Ì· 1.1 Λογισµικό χειρισµού ερωτήσεων Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων Bάση δεδοµένων N Λογισµικό αποθήκευσης και ανάκλησης δεδοµένων Aποθηκευµένα δεδοµένα Ο χειρισµός των δεδοµένων στο υλικό του υπολογιστή γίνεται από το λογισµικό του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων που στο σχήµα 1.1 ονοµάζεται «Λογισµικό Αποθήκευσης και Ανάκλησης ∆εδοµένων». Αυτό το λογισµικό αναλαµβάνει να µεταφέρει όλες τις εντολές του χρήστη προς το υλικό. Το λογισµικό αυτό συνεργάζεται µε το άλλο τµήµα του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων που είναι το «Λογισµικό Χειρισµού Ερωτήσεων». Όλα τα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων παρέχουν µία γλώσσα υποβολής ερωτήσεων προς τη Βάση ∆εδοµένων. Αυτές οι ερωτήσεις επεξεργάζονται από το Λογισµικό Χειρισµού Ερωτήσεων και στη συνέχεια µετατρέπονται σε εντολές για ανάκληση συγκεκριµένων δεδοµένων από το υλικό και µεταφέρονται στο Λογισµικό Αποθήκευσης και Ανάκλησης ∆εδοµένων. Στο αριστερό µέρος του σχήµατος 1.1 απεικονίζονται Ν Βάσεις ∆εδοµένων. (Με το σύστηµα µπορούν να υλοποιηθούν αρκετές Βάσεις ∆εδοµένων που ο αριθµός τους στο σχήµα 1.1 ορίζεται ως Ν.) Ο χρήστης µίας Βάσης ∆εδοµένων δεν αντιλαµβάνεται τη διαδικασία, όπως την υλοποιεί το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Συνήθως 1.2 ™À™∆∏ª∞ ¢π∞Ã∂πƒπ™∏™ µ∞™∂ø¡ ¢∂¢√ª∂¡ø¡ 23 δεν γνωρίζει που βρίσκονται τα δεδοµένα (δηλαδή σε ποιο υλικό είναι αποθηκευµένα). Ο χρήστης απλά εκτελεί λειτουργίες (εισαγωγή, διαγραφή, ή τροποποίηση) στα δεδοµένα και υποβάλει ερωτήσεις. Βλέπει µόνο τη Βάση ∆εδοµένων χωρίς να τον απασχολούν οι λειτουργίες του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων. Τώρα που έχετε κατανοήσει τι είναι Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων πρέπει να σας πούµε ότι η χρήση του δεν είναι ο µόνος τρόπος για να δηµιουργήσουµε µία Βάση ∆εδοµένων. Θεωρητικά κάποιος µπορεί να ετοιµάσει µία Βάση ∆εδοµένων υλοποιώντας όλο το λογισµικό που χρησιµοποιεί το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων από την αρχή και κατασκευάζοντας εξειδικευµένο λογισµικό µόνο για τη συγκεκριµένη Βάση ∆εδοµένων. Αυτή η προσέγγιση θα είχε πολύ µεγαλύτερο κόστος και χρόνο υλοποίησης, αφού θα έπρεπε να υλοποιήσει από την αρχή όλο το λογισµικό που παρέχεται έτοιµο από ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Αν και σε ορισµένες περιπτώσεις ακολουθείται αυτή η πρακτική, ο κανόνας είναι οι Βάσεις ∆εδοµένων να υλοποιούνται και να χρησιµοποιούνται µέσω ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων. Ακολουθούν µερικές προτάσεις. Ποιες από αυτές είναι σωστές και ποιες λάθος Επιλέξτε Σωστό ή Λάθος. Σωστό Λάθος Για κάθε Βάση ∆εδοµένων χρειαζόµαστε διαφορετικό Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Τη µεταφορά των δεδοµένων από και προς το υλικό αποθήκευσης την αναλαµβάνει το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων είναι πολλές Βάσεις ∆εδοµένων µαζί. Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων αποτελείται από το Λογισµικό Χειρισµού Ερωτήσεων, το Λογισµικό Αποθήκευσης και Ανάκλησης ∆εδοµένων και το Υλικό Αποθήκευσης των ∆εδοµένων. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.4 ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ 24 KEºA§AIO 1: EI™A°ø°H 1.2.3 TÈ ·Ú¤¯ÂÈ ¤Ó· Û‡ÛÙËÌ· ‰È·¯Â›ÚÈÛ˘ ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ Όπως σας αναφέραµε στο τέλος της ενότητας 1.2.2 µία Βάση ∆εδοµένων µπορεί να υλοποιηθεί και αυτόνοµα χωρίς να χρησιµοποιηθεί ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Όµως κατά κανόνα οι παροχές ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων είναι αυτές που τελικά ωθούν τους χρήστες να το χρησιµοποιήσουν. Στην ενότητα αυτή θα περιγράψουµε τι παρέχει ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. ∂À∫√§π∞ ™∆∏ ™Ã∂¢π∞™∏ ∫∞π À§√¶√π∏™∏ Όπως ήδη γνωρίζετε ένας χρήστης µίας Βάσης ∆εδοµένων θέλει αρχικά να σχεδιάσει τη Βάση ∆εδοµένων και να ορίσει τους τύπους δεδοµένων (για τους οποίους θα µιλήσουµε στην ενότητα 2.2.1) που θα χρησιµοποιεί, µετά να δηµιουργήσει τη Βάση ∆εδοµένων και στη συνέχεια να χρησιµοποιεί τη Βάση ∆εδοµένων ή να επιτρέπει και σε άλλους χρήστες να τη χρησιµοποιούν ταυτόχρονα µε αυτόν. Η υλοποίηση του λογισµικού που πραγµατοποιεί αυτές τις διαδικασίες δε χρειάζεται να γίνει, µια και όλα τα παραπάνω παρέχονται από το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Επίσης το σύστηµα παρέχει στον χρήστη ένα ενιαίο τρπο για να ορίζει τις Βάσεις ∆εδοµένων του και µια φιλοσοφία που τον καθοδηγεί στις ενέργειές του. ∂¶π¶∂¢∞ Ã∏™∆ø¡ ∫∞π ∂§∂°Ã√™ ¶ƒ√™µ∞™∏™ Επειδή µία Βάση ∆εδοµένων µπορεί να χρησιµοποιείται από πολλούς χρήστες µε διαφορετικές ανάγκες και γνώσεις, το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων παρέχει τη δυνατότητα ορισµού διαφορετικών κατηγοριών χρηστών. Για κάθε κατηγορία χρηστών ορίζονται τα όρια εξουσιοδότησης που παρέχονται σε κάθε επίπεδο. Κάποια δεδοµένα είναι πιθανόν να είναι εµπιστευτικά και να µην επιτρέπεται να έχουν πρόσβαση σε αυτά όλοι οι χρήστες. Επίσης, κάθε κατηγορία χρηστών θα πρέπει να έχει το δικαίωµα να επιτελεί διαφορετικές λειτουργίες από τις άλλες κατηγορίες. Κάποιοι χρήστες για παράδειγµα θα µπορούν µόνο να διαβάζουν δεδοµένα, ενώ άλλοι θα µπορούν να εισάγουν ή να κάνουν αλλαγές στα δεδοµένα. Σκεφτείτε το παράδειγµα 1.1 µε τη Μετεωρολογική Βάση ∆εδοµένων που συζητήσαµε στην 1.2 ™À™∆∏ª∞ ¢π∞Ã∂πƒπ™∏™ µ∞™∂ø¡ ¢∂¢√ª∂¡ø¡ 25 ενότητα 1.1.2. Εισαγωγή και τροποποίηση δεδοµένων θα µπορεί να κάνει καθένας που θα θέλει να χρησιµοποιήσει τη Βάση ∆εδοµένων; Προφανώς όχι. Η δυνατότητα αυτή θα πρέπει να δίνεται µόνο στο εξουσιοδοτηµένο προσωπικό (Μετεωρολόγους), ενώ οι υπόλοιποι θα πρέπει να µπορούν µόνο να βλέπουν τα δεδοµένα. Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων παρέχει διαφορετικά επίπεδα χρηστών ανάλογα µε τις δυνατότητες και απαιτήσεις καθενός. Επίσης το σύστηµα φροντίζει για την τήρηση των κανόνων ασφαλείας και ελέγχει την πρόσβαση σε αυτό και στις Βάσεις ∆εδοµένων και δεν επιτρέπει παραβάσεις των επιπέδων πρόσβασης. Τα επίπεδα πρόσβασης δεν ισχύουν µόνο για τις Βάσεις ∆εδοµένων, αλλά και για το ίδιο το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Αναλυτικά για τα επίπεδα χρηστών θα συζητήσουµε στην ενότητα 1.4. ¶ƒ√™∆∞™π∞ ∞¶√ µ§∞µ∂™ À§π∫√À Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων παρέχει δυνατότητες για τήρηση αντιγράφων ασφαλείας καθώς και δυνατότητες ανάληψης της Βάσης ∆εδοµένων µετά από βλάβες. Έτσι εξασφαλίζει καλύτερη προστασία των δεδοµένων. Η ανάληψη (ή ανάνηψη) των δεδοµένων είναι η διαδικασία κατά την οποία το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων είτε αυτόµατα (χωρίς τη συµβολή του διαχειριστή) είτε χειροκίνητα (µε τη συµβολή του διαχειριστή) ανακτά τα δεδοµένα που χάθηκαν έπειτα από µία βλάβη. ¢À¡∞∆√∆∏∆∞ ¶∂ƒπ°ƒ∞º∏™ ¶∂ƒπ√ƒπ™ªø¡ √ƒ£√∆∏∆∞™ Σε µία Βάση ∆εδοµένων µπορούν να τεθούν περιορισµοί ορθότητας. Τέτοιοι περιορισµοί σχετίζονται µε την οργάνωση των δεδοµένων στη Βάση, ή τις τιµές που µπορούν να λάβουν κάποια δεδοµένα. Για παράδειγµα στη Μετεωρολογική Βάση ∆εδοµένων που αναφέραµε στο παράδειγµα 1.1, θα µπορούσαµε να ορίσουµε ότι η τιµή της θερµοκρασίας θα κυµαίνεται από –50 έως +50 βαθµούς. Με αυτόν τον τρόπο αν κάποιος εισήγαγε κατά λάθος την τιµή «177» αντί για «17» το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων θα εντόπιζε το λάθος και δε θα δεχόταν την τιµή. (Θα αντιλαµβανόταν δηλαδή ότι η τιµή 177 δεν µπορεί να είναι πραγµατική τιµή για θερµοκρασία.) Με αυτό τον τρόπο το σύστηµα υλοποιεί ελέγχους και προστατεύει τη Βάση ∆εδο- 26 KEºA§AIO 1: EI™A°ø°H µένων από λαθεµένες εισαγωγές δεδοµένων. Προσέξτε όµως: Ακόµα και µε τον παραπάνω περιορισµό, κάποιος θα µπορούσε να κάνει λάθος και αντί για «17» να εισάγει «27». Αυτό το λάθος δεν µπορεί να εντοπιστεί από το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, αλλά µόνο από τους χρήστες. ¢À¡∞∆√∆∏∆∞ ∂§∂°Ã√À ¶§∂√¡∞™ªø¡ Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων πραγµατοποιεί και ελέγχους για πλεονασµό δεδοµένων. Υποθέστε ότι, αντί για Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων χρησιµοποιούσαµε µία Βάση ∆εδοµένων µε καρτέλες όπως στο παράδειγµα 1.2 της ενότητας 1.1.3, και ότι για την τήρηση των αρχείων ήταν επιφορτισµένοι δύο υπάλληλοι. Από κάποιο λάθος λοιπόν έγραψαν και οι δύο καρτέλα για την «Αθήνα – Ιανουάριος 1998». Εκτός από το πρόβληµα ότι θα είχαµε διπλά τα δεδοµένα, θα µπορούσαν να προκύψουν µεγαλύτερα προβλήµατα που σχετίζονται µε την συµβατότητα των δεδοµένων. Υποθέστε ότι εντοπίστηκε ένα λάθος στις µετρήσεις και η τιµή για την ηµεροµηνία 16 Ιανουαρίου πρέπει να αλλάξει και από 21 °C πρέπει να γίνει 18 °C. Εάν κάποιος αναλάβει να κάνει την αλλαγή θα την κάνει σε µία µόνο καρτέλα, ενώ η άλλη θα συνεχίζει να έχει την λάθος τιµή. Αυτό σηµαίνει ότι η Βάση ∆εδοµένων θα περιέχει λάθος δεδοµένα, παρά τις διορθώσεις. Στην περίπτωση του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων οι πλεονασµοί ελέγχονται αυτόµατα από το σύστηµα και η συµβατότητα των δεδοµένων προστατεύεται από το ίδιο το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων απλοποιώντας την εργασία του χρήστη. ¢Ú·ÛÙËÚÈfiÙËÙ· 1.2 Στο παράδειγµα 1.1 παρουσιάσαµε µία Μετεωρολογική Βάση ∆εδοµένων. Σε αυτή τη Βάση ∆εδοµένων δεν µιλήσαµε ούτε για επίπεδα χρηστών, ούτε για περιορισµούς ορθότητας. Με βάση την εµπειρία που αποκτήσατε από τη µελέτη της παραπάνω ενότητας προτείνετε τουλάχιστον δύο επίπεδα χρηστών (και περιγράψτε ποιες δυνατότητες θα επιτρέπει το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων για κάθε κατηγορία). Επίσης προτείνετε τουλάχιστον τρεις περιορισµούς ορθότητας και τεκµηριώστε γιατί τους προτείνετε. 1.3 ∆π ¶∞ƒ∂Ã∂π ∏ µ∞™∏ ¢∂¢√ª∂¡ø¡ 27 1.3 ∆È ·Ú¤¯ÂÈ Ë ‚¿ÛË ‰Â‰ÔÌ¤ÓˆÓ ™ÎÔfi˜ Σκοπός αυτής της ενότητας είναι να τονίσει τα πλεονεκτήµατα που παρέχει η χρήση µίας Βάσης ∆εδοµένων. Τώρα που έχετε µάθει τι σηµαίνει Βάση ∆εδοµένων, αλλά και τι είναι το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων καθώς και τι πλεονεκτήµατα παρέχει, είστε σε θέση να αναγνωρίσετε τι µπορεί να παρέχει µία Βάση ∆εδοµένων στους χρήστες της και να συγκρίνετε την οργάνωση ενός µοντέλου του πραγµατικού κόσµου σε Βάση ∆εδοµένων που υλοποιήθηκε µε τη χρήση ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων, έναντι της παραδοσιακής οργάνωσης σε αρχεία (είτε σε υπολογιστή, είτε χωρίς). ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • αναφέρετε τι πλεονεκτήµατα παρέχει η χρήση της Βάσης ∆εδοµένων • συγκρίνετε µεταξύ της χρήσης Βάσεων ∆εδοµένων και ενός παραδοσιακού µοντέλου µε αρχεία • αναφέρετε περιπτώσεις όπου απαιτείται η χρήση Βάσεων ∆εδοµένων και περιπτώσεις όπου η χρήση Βάσεων ∆εδοµένων για την οργάνωση ενός µοντέλου του πραγµατικού κόσµου, δεν είναι απαραίτητη ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Η χρήση Βάσεων ∆εδοµένων για µοντελοποίηση ενός προβλήµατος του πραγµατικού κόσµου παρέχει τα παρακάτω πλεονεκτήµατα, όπως τα αναφέρουµε επιγραµµατικά: 1. ∆υνατότητα ταυτόχρονης προσπέλασης πολλών χρηστών στα δεδοµένα και έλεγχο της προσπέλασης. 2. ∆υνατότητα ταχύτατης εξαγωγής απαντήσεων σε απλές ερωτήσεις. 3. Ευελιξία σε πιθανές αλλαγές και γενικότερα ευκολία παρακολούθησης των αλλαγών του µοντέλου του πραγµατικού κόσµου. 4. Υψηλή ποιότητα δεδοµένων. Στις ενότητες 1.3.1 έως 1.3.5 που ακολουθούν θα αναλύσουµε τα παρακάτω πλεονεκτήµατα. 28 KEºA§AIO 1: EI™A°ø°H 1.3.1 T·˘Ùfi¯ÚÔÓË ÚÔۤϷÛË Ένα βασικό κέρδος από την χρήση Βάσης ∆εδοµένων είναι η δυνατότητα που παρέχει σε πολλούς χρήστες να έχουν ταυτόχρονη προσπέλαση στα δεδοµένα, αλλά και η αυτοµατοποίηση των ελέγχων που συνεπάγεται αυτή η ταυτόχρονη προσπέλαση. Για παράδειγµα, το Σύστηµα ∆ιαχείρισης της Bάσης ∆εδοµένων φροντίζει να αποκλείει περιπτώσεις ταυτόχρονης αλλαγής ενός δεδοµένου από δύο ή περισσότερους χρήστες. Επίσης, το Σύστηµα ∆ιαχείρισης της Bάσης ∆εδοµένων φροντίζει για το έλεγχο των εξουσιοδοτηµένων ή µη προσπελάσεων στα δεδοµένα, παρέχοντας σε κάθε χρήστη µόνο τα δεδοµένα αυτά για τα οποία έχει εξουσιοδότηση, και επιτρέποντάς του µόνο τις πράξεις (π.χ. διαγραφή, ή αλλαγή) αυτές για τις οποίες έχει αρµοδιότητα. 1.3.2 ∆·¯‡Ù·ÙË ÂÍ·ÁˆÁ‹ ··ÓÙ‹ÛÂˆÓ Ένα µεγάλο πρόβληµα της οργάνωσης ενός µοντέλου του πραγµατικού κόσµου χωρίς τη χρήση Βάσης ∆εδοµένων είναι η αδυναµία αποφυγής αρκετής εργασίας από τον άνθρωπο για να αντληθεί η απαιτούµενη πληροφορία, προκειµένου να εξαχθούν απαντήσεις σε απλές ερωτήσεις. Ένα σύστηµα αρχείων οργανώνει την πληροφορία σειριακά σε αρχεία, χωρίς τη δυνατότητα αναζήτησης παρά µόνο σειριακά (δηλαδή ανάγνωση ενός τµήµατος του αρχείου στη µνήµη, έλεγχος και µετά ανάγνωση του επόµενου τµήµατος, κτλ). Θυµηθείτε τις ερωτήσεις που συζητήσαµε στο παράδειγµα 1.2. Σε ένα παραδοσιακό σύστηµα αρχείων σε ηλεκτρονικό υπολογιστή η απάντηση στην ερώτηση «∆ώσε µας την πόλη που είχε την υψηλότερη θερµοκρασία για κάθε ηµέρα από το 1990 µέχρι σήµερα», θα σήµαινε άνοιγµα εκατοντάδων αρχείων και ανθρώπινη εργασία για την καταγραφή και σύγκριση δεδοµένων. Ακριβώς επειδή τα δεδοµένα συνήθως συλλέγονται για την απόκτηση πληροφορίας µε την µορφή απαντήσεων σε τέτοιου είδους ερωτήσεις, η χρήση παραδοσιακών µοντέλων οργάνωσης δεν είναι εξυπηρετική, αφού η παροχή τέτοιου είδους πληροφορίας είναι πρακτικά ανέφικτη. Ο λόγος είναι ότι η οργάνωση των δεδοµένων δεν υποστηρίζει την αυτόµατη εξαγωγή τέτοιους είδους απαντήσεων σε ερωτήσεις. 1.3 ∆π ¶∞ƒ∂Ã∂π ∏ µ∞™∏ ¢∂¢√ª∂¡ø¡ 29 Αντίθετα, µε τη χρήση Βάσης ∆εδοµένων τέτοιου είδους πληροφορίες µπορούν να είναι διαθέσιµες ταχύτατα στο χρήστη. Ο τρόπος οργάνωσης των δεδοµένων δίνει τη δυνατότητα στις Βάσεις ∆εδοµένων να µπορούν να δίνουν απαντήσεις αυτόµατα και ταχύτατα τόσο σε πολύπλοκες ερωτήσεις, όσο και σε απλές ερωτήσεις οι οποίες όµως θα ήταν πολύ δύσκολο να απαντηθούν εάν είχε ακολουθηθεί οργάνωση βασισµένη σε ένα παραδοσιακό σύστηµα (είτε µε χειρόγραφα, είτε µε µη οργανωµένα σε Bάση ∆εδοµένων αρχεία στο ηλεκτρονικό υπολογιστή). 1.3.3 E˘ÂÏÈÍ›· Πολλές φορές το µοντέλο του πραγµατικού κόσµου αλλάζει. Αυτό κατά κανόνα απαιτεί αλλαγές που τις περισσότερες φορές είναι πολύ δύσκολο να υλοποιηθούν σε ένα παραδοσιακό µοντέλο. Αντίθετα, ο τρόπος οργάνωσης των δεδοµένων σε µία Βάση ∆εδοµένων, κατά κανόνα, επιδέχεται αλλαγές και µπορεί πολύ πιο εύκολα να ακολουθεί το µοντέλο του πραγµατικού κόσµου. Αυτό σηµαίνει ότι οι χρήστες της Βάσης ∆εδοµένων µπορούν να προσαρµόσουν την µορφή των δεδοµένων ευκολότερα και οι αλλαγές αυτές να εφαρµοστούν σε όλα τα δεδοµένα, σε αντίθεση µε το παραδοσιακό µοντέλο. 1.3.4 À„ËÏ‹ ÔÈfiÙËÙ· ‰Â‰ÔÌ¤ÓˆÓ Η Βάση ∆εδοµένων χρησιµοποιεί τις δυνατότητες που παρέχει το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων και ελέγχει για πλεονασµούς και παραβιάσεις της ορθότητας των δεδοµένων, καθώς και για ταυτόχρονες προσπελάσεις και µη εξουσιοδοτηµένες εγγραφές. Έτσι τα δεδοµένα προστατεύονται από ένα µηχανισµό που δεν θα µπορούσε να υπάρξει σε ένα παραδοσιακό σύστηµα οργάνωσης. Με αυτό τον τρόπο διασφαλίζεται η ποιότητα των δεδοµένων, δηλαδή ο χρήστης έχει µεγαλύτερη ασφάλεια ότι τα δεδοµένα που παίρνει ως απάντηση στις ερωτήσεις του είναι σωστά. 30 KEºA§AIO 1: EI™A°ø°H ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.5 Ακολουθούν µερικές προτάσεις. Ποιες από αυτές είναι σωστές και ποιες λάθος; Σωστό Η χρήση της Βάσης ∆εδοµένων µας εξασφαλίζει ότι δύο χρήστες δεν θα µπορέσουν να διαβάσουν ταυτόχρονα τα ίδια δεδοµένα. Η Βάση ∆εδοµένων παρέχει ένα µηχανισµό που παρέχει ταχύτατα απαντήσεις σε ερωτήσεις του χρήστη. Η Βάση ∆εδοµένων δεν επιτρέπει αλλαγές στη µορφή των δεδοµένων. Η ποιότητα των δεδοµένων είναι καλύτερη, εάν χρησιµοποιήσουµε αρχεία αντί για Βάση ∆εδοµένων. Λάθος ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ 1.3.5 ∞Èٛ˜ ÁÈ· ÌË ¯Ú‹ÛË ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ Όπως είπαµε, η Βάση ∆εδοµένων παρέχει πολλά πλεονεκτήµατα έναντι του παραδοσιακού µοντέλου µε αρχεία στο υπολογιστή ή µε χειρόγραφες εγγραφές σε καρτέλες και αρχεία. Παρόλα αυτά η χρήση Βάσης ∆εδοµένων δεν είνα πάντα επιβεβληµένη. Σίγουρα θα χρησιµοποιήσουµε Βάση ∆εδοµένων όταν έχουµε µεγάλο όγκο οµοειδών δεδοµένων ή δεδοµένων που µπορούν να κατηγοριοποιηθούν, συνεχή εισροή δεδοµένων (δυναµικότητα) και ανάγκη για απάντηση σε ερωτήσεις. Ωστόσο υπάρχουν λόγοι που πολλές φορές µας αναγκάζουν να µην χρησιµοποιήσουµε Βάση ∆εδοµένων. Ένας συνηθισµένος λόγος παλαιότερα ήταν το κόστος. Η υλοποίηση µίας Βάσης ∆εδοµένων συνεπάγεται το κόστος αγοράς ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων που παλαιότερα ήταν σηµαντικός παράγοντας και φυσικά το κόστος της ανάπτυξης και συντήρησης της Βάσης ∆εδοµένων. Σήµερα όµως, που το κόστος των Συστηµάτων ∆ιαχείρισης Βάσεων ∆εδοµένων έχει µειωθεί σηµαντικά και που υπάρχουν Συστήµατα που λειτουργούν σε προσωπικό υπο- 1.3 ∆π ¶∞ƒ∂Ã∂π ∏ µ∞™∏ ¢∂¢√ª∂¡ø¡ / 1.4 ∂¶π¶∂¢∞ Ã∏™∆ø¡ 31 λογιστή ο λόγος αυτός τείνει να εκλείψει. Όταν τα δεδοµένα είναι στατικά τότε κατά κανόνα δεν απαιτείται η υλοποίηση Βάσης ∆εδοµένων. Για δεδοµένα που είναι «παγωµένα», δηλαδή δεν πρόκειται να αλλάξουν, η Βάση ∆εδοµένων πιθανότητα θα ήταν περιττή. Προσέξτε όµως: Ακόµα και σε στατικά δεδοµένα όταν απαιτείται η συχνή ανάκτηση πληροφοριών οι οποίες δεν είναι εφικτό να ανακτηθούν λόγω της δοµής του µοντέλου τους, ίσως και πάλι να πρέπει να ακολουθηθεί η λύση της Βάσης ∆εδοµένων. Τέλος, για µικρό όγκο δεδοµένων, ή για δεδοµένα που προσπελαύνονται µόνο από ένα χρήστη συνήθως δεν είναι απαραίτητη η υλοποίηση Βάσης ∆εδοµένων. ¢Ú·ÛÙËÚÈfiÙËÙ· 1.3 Αναφέρατε τουλάχιστον δύο περιπτώσεις από παραδείγµατα µοντέλων του πραγµατικού κόσµου για το οποία δεν απαιτείται η υλοποίηση Βάσης ∆εδοµένων. Για κάθε περίπτωση αναφέρατε τα δεδοµένα του µοντέλου και αιτιολογήστε τους λόγους που σας κάνουν να πιστεύεται ότι η υλοποίηση µίας Βάσης ∆εδοµένων δεν θα ήταν επιβεβληµένη. Καταγράψτε τις απόψεις σας προσπαθώντας να µην υπερβείτε την µία σελίδα ανά παράδειγµα. 32 KEºA§AIO 1: EI™A°ø°H 1.4 ∂›Â‰· ¯ÚËÛÙÒÓ ™ÎÔfi˜ Έχοντας ολοκληρώσει τις ενότητες 1.1 έως 1.3 έχετε µάθει τη χρησιµότητα των Βάσεων ∆εδοµένων και γνωρίζετε τις λειτουργίες που παρέχει ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Ο σκοπός αυτής της ενότητας είναι να µελετήσετε τους χρήστες ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων, καθώς και τους χρήστες των Βάσεων ∆εδοµένων που δηµιουργούνται µε αυτό και να εξετάσετε τις αρµοδιότητες και τα δικαιώµατα καθενός από αυτούς. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • περιγράψετε τους χρήστες ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων • επιλέξετε τις κατηγορίες χρηστών που θα έχουν πρόσβαση στη Bάση ∆εδοµένων, όταν σας δίνεται ένα πρόβληµα του πραγµατικού κόσµου που θα υλοποιηθεί µε Βάση ∆εδοµένων • αναφέρετε τα δικαιώµατα και τους περιορισµούς για κάθε χρήστη ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή θα εξετάσουµε τέσσερα επίπεδα χρηστών. Αν και σε µερικά βιβλία θα δείτε διάκριση ανάµεσα σε χρήστες ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων και σε χρήστες των Βάσεων ∆εδοµένων, δεν θα κάνουµε τέτοια διάκριση και θα αναφέρουµε τις κατηγορίες των χρηστών συνολικά. Αρχίζοντας µε την κατηγορία µε τις περισσότερες εξουσίες (άρα και ευθύνες και αρµοδιότητες) και προχωρώντας στις κατηγορίες µε τις λιγότερες εξουσίες έχουµε: Τον ∆ιαχειριστή του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων, τους Ιδιοκτήτες των Βάσεων ∆εδοµένων, τους Χρήστες Υψηλής ∆ιαβάθµισης µιας Βάσης ∆εδοµένων, και τους Χρήστες Κατώτερης ∆ιαβάθµισης µίας Βάσης ∆εδοµένων. 1.4.1 ¢È·¯ÂÈÚÈÛÙ‹˜ Û˘ÛÙ‹Ì·ÙÔ˜ Ο ∆ιαχειριστής του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων είναι 1.4 ∂¶π¶∂¢∞ Ã∏™∆ø¡ 33 κατά κανόνα τεχνικός µε υψηλό επίπεδο κατάρτισης. Αρµοδιότητά του είναι η συντήρηση του συστήµατος, ο έλεγχος των πόρων του συστήµατος, η δηµιουργία ή εγκατάσταση εφαρµογών που χρησιµοποιούνται για τη δηµιουργία ή τη σχεδίαση Βάσεων ∆εδοµένων, η επίβλεψη της δηµιουργίας ή της διαγραφής Βάσης ∆εδοµένων και η ανάθεση πόρων του συστήµατος για την καλή λειτουργία των Βάσεων ∆εδοµένων. Με απλά λόγια, ο ∆ιαχειριστής έχει ως βασική του αρµοδιότητα να διευκολύνει όσους χρησιµοποιούν το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων παρέχοντας τους τη δυνατότητα να δηµιουργούν και να χειρίζονται Βάσεις ∆εδοµένων, καθώς και τα απαραίτητα εργαλεία για τη σχεδίαση και την υλοποίηση των εφαρµογών τους. Κατά κανόνα συνεργάζεται µε τους Ιδιοκτήτες των Βάσεων ∆εδοµένων για την εξυπηρέτηση των αναγκών τους. 1.4.2 π‰ÈÔÎÙ‹Ù˘ ‚¿Û˘ ‰Â‰ÔÌ¤ÓˆÓ Ο Ιδιοκτήτης µιας Βάσης ∆εδοµένων ονοµάζεται συχνά και ∆ιαχειριστής Βάσης ∆εδοµένων. Θα προτιµήσουµε την πρώτη ονοµασία για να µη συγχέεται µε τον ∆ιαχειριστή του Συστήµατος. Ο Ιδιοκτήτης µιας Βάσης ∆εδοµένων έχει δηµιουργήσει µία Βάση ∆εδοµένων και τις απαραίτητες εφαρµογές για την προσπέλασή της. Έχει σαν αρµοδιότητα να φροντίζει για τους πόρους υλικού και λογισµικού σε συνεργασία µε τον ∆ιαχειριστή του Συστήµατος. Επίσης, φροντίζει να ορίζει τους χρήστες της Βάσης ∆εδοµένων του, να καθορίζει τα επίπεδα διαβάθµισης κάθε χρήστη, να παρέχει δικαιώµατα σε χρήστες και να διαγράφει χρήστες οι οποίοι ολοκλήρωσαν τις δραστηριότητές τους στη Βάση ∆εδοµένων. Συνήθως ο Ιδιοκτήτης µιας Βάσης ∆εδοµένων συνεργάζεται µε ένα επιτελείο τεχνικών και αναλαµβάνουν την υλοποίηση των εφαρµογών προσπέλασης της Βάσης ∆εδοµένων, δηλαδή των προγραµµάτων λογισµικού µέσω των οποίων οι υπόλοιποι χρήστες θα προσπελαύνουν τα δεδοµένα της Βάσης ∆εδοµένων. 1.4.3 XÚ‹ÛÙ˜ ˘„ËÏ‹˜ ‰È·‚¿ıÌÈÛ˘ Χρήστες Υψηλής ∆ιαβάθµισης µιας Βάσης ∆εδοµένων είναι χρήστες της συγκεκριµένης Βάσης ∆εδοµένων στους οποίους ο Ιδιοκτήτης της Βάσης ∆εδοµένων έχει δώσει αυξηµένες αρµοδιότητες. Όπως µελετήσατε στις προηγούµενες ενότητες, οι δυνατότητες ενός χρήστη µιας Βάσης ∆εδο- 34 KEºA§AIO 1: EI™A°ø°H µένων συνοπτικά περιγράφονται ως εισαγωγή δεδοµένων, διαγραφή δεδοµένων, αλλαγή σε δεδοµένο και ανάγνωση δεδοµένων. Από αυτές τις δραστηριότητες µόνο η ανάγνωση δεδοµένων είναι µη καταστροφική δραστηριότητα, δηλαδή δεν προκαλεί αλλαγές στα δεδοµένα. Οι Χρήστες Υψηλής ∆ιαβάθµισης έχουν δικαιοδοσία να εκτελούν εντολές προς τη Βάση ∆εδοµένων που επιφέρουν αλλαγές στα δεδοµένα. Αυτή είναι και η βασική τους διαφορά από τους Χρήστες Κατώτερης ∆ιαβάθµισης. Πολλές φορές ο Ιδιοκτήτης µίας Βάσης ∆εδοµένων εκχωρεί περισσότερα δικαιώµατα σε µερικούς Χρήστες Υψηλής ∆ιαβάθµισης για να τον διευκολύνουν στο έργο του. Για παράδειγµα, εκχωρεί το δικαίωµα χειρισµού χρηστών σε κάποιον επιλεγµένο Χρήστη Υψηλής ∆ιαβάθµισης, έτσι ώστε να τον διευκολύνει στη δηµιουργία και διαγραφή χρηστών. 1.4.4 XÚ‹ÛÙ˜ ηÙÒÙÂÚ˘ ‰È·‚¿ıÌÈÛ˘ Οι Χρήστες Κατώτερης ∆ιαβάθµισης είναι χρήστες που χρησιµοποιούν τη Βάση ∆εδοµένων χωρίς να έχουν δικαίωµα να επιτελέσουν αλλαγές στα δεδοµένα. Συνήθως είναι χρήστες που λαβαίνουν πληροφορίες από τη Βάση ∆εδοµένων τις οποίες έχουν εισάγει οι Χρήστες Υψηλής ∆ιαβάθµισης. Πολλές φορές υπάρχουν επίπεδα διαβάθµισης και σε αυτούς τους χρήστες, επίπεδα που καθορίζει συνήθως ο Ιδιοκτήτης της Βάσης ∆εδοµένων. Συνήθως αυτοί οι χρήστες είναι χρήστες χωρίς πολλές τεχνικές γνώσεις που χρησιµοποιούν τη Βάση ∆εδοµένων απλά για ενηµέρωση. ¢Ú·ÛÙËÚÈfiÙËÙ· 1.4 Α. Στη δραστηριότητα 1.2 σας ζητήθηκε να αναφέρετε δύο κατηγορίες χρηστών για τη Μετεωρολογική Βάση ∆εδοµένων του παραδείγµατος 1.1. Τώρα µε την εµπειρία που έχετε αποκτήσει από τη µελέτη αυτής της ενότητας, αναφέρετε όλες τις κατηγορίες χρηστών για αυτή τη Βάση ∆εδοµένων και περιγράψτε αναλυτικά τις αρµοδιότητες καθενός. Β. Στα πλαίσια της δραστηριότητας 1.1 σας ζητήθηκε να αναφέρατε και να περιγράψετε τρία ακόµα παραδείγµατα Βάσεων ∆εδοµένων. Για αυτά τα παραδείγµατα αναφέρετε όλες τις κατηγορίες χρηστών για κάθε µία Βάση ∆εδοµένων που έχετε ήδη αναφέρει και περιγράψτε αναλυτικά τις αρµοδιότητες καθενός. BA™EI™ ¢E¢OMENøN 35 ™‡ÓÔ„Ë Στο κεφάλαιο αυτό σας εισάγαµε στις βασικές έννοιες των Βάσεων ∆εδοµένων. Με την εµπειρία που έχετε αποκτήσει από τη µελέτη αυτού του κεφαλαίου µπορείτε να διακρίνετε ανάµεσα σε έννοιες που σχετίζονται µε τις Βάσεις ∆εδοµένων και που πολλοί σπουδαστές τις συγχέουν, όπως δεδοµένα και πληροφορία, Βάση ∆εδοµένων και Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Γνωρίζετε τι είναι Βάση ∆εδοµένων, τι παρέχει στους χρήστες της, πότε πρέπει να χρησιµοποιείται και πότε όχι. Επίσης γνωρίζετε τι είναι Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, ποια είναι η δοµή του, τι παρέχει στους χρήστες, ποιοι είναι οι χρήστες ενός τέτοιου συστήµατος και σε τι κατηγορίες χωρίζονται. Είναι σαφές ότι µε τη µελέτη αυτού του κεφαλαίου έχετε αποκτήσει εµπειρία σε βασικές έννοιες Βάσεων ∆εδοµένων. Αυτή την εµπειρία πρέπει να την καλλιεργήσετε, είτε µε περισσότερες δραστηριότητες, είτε µε παραπάνω µελέτη. Ακολουθούν µία συγκεντρωτική άσκηση αυτοαξιολόγησης και µία δραστηριότητα που θα σας βοηθήσουν στην επανάληψη της ύλης και στον έλεγχο των γνώσεων που αποκτήσατε. Σας προτείνουµε πριν προχωρήσετε στην επίλυση των ασκήσεων να ολοκληρώσετε µία επανάληψη του κεφαλαίου και επίσης να συµβουλευτείτε και τη βιβλιογραφία προαιρετικής ανάγνωσης που έπεται. 36 KEºA§AIO 1: EI™A°ø°H ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.6 Ακολουθούν µερικές προτάσεις. Ποιες από αυτές είναι σωστές και ποιες λάθος; Σωστό Πληροφορία είναι δεδοµένα που δεν έχουν αποθηκευτεί σε ηλεκτρονικό υπολογιστή. Στη Βάση ∆εδοµένων αποθηκεύονται δεδοµένα, από τα οποία εξάγονται πληροφορίες. Κάθε συλλογή δεδοµένων αποτελεί µία Βάση ∆εδοµένων. Βάση ∆εδοµένων δεν µπορεί να υπάρξει χωρίς ηλεκτρονικό υπολογιστή. Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων διευκολύνει τη δηµιουργία και συντήρηση Βάσεων ∆εδοµένων. Ο ∆ιαχειριστής ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων µπορεί να δηµιουργήσει Βάσεις ∆εδοµένων και να ορίσει Ιδιοκτήτες για κάθε Βάση ∆εδοµένων. Οι Ιδιοκτήτες µίας Βάσης ∆εδοµένων µπορούν να διαγράψουν ή να ορίσουν χρήστες σε αυτή τη Βάση ∆εδοµένων. Οι Ιδιοκτήτες µίας Βάσης ∆εδοµένων µπορούν να διαγράψουν ή να ορίσουν µόνο τους Χρήστες Κατώτερης ∆ιαβάθµισης σε αυτή τη Βάση ∆εδοµένων. ❏ Λάθος ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ BA™EI™ ¢E¢OMENøN 37 Βρείτε µια µικρή επιχείρηση, κατά προτίµηση κάποιο κατάστηµα ενός συγγενή ή ενός γνωστού σας, η οποία να έχει πελάτες και προϊόντα. Μιλήστε µε τον ιδιοκτήτη της επιχείρησης για τους πελάτες, την αποθήκη (στοκ), τα προϊόντα και τις πωλήσεις του. Προσπαθήστε να κατανοήσετε τα δεδοµένα που χρησιµοποιεί και τις πληροφορίες που θέλει να αντλεί από αυτά τα δεδοµένα. Σκεφτείτε την προοπτική οργάνωσής των µε τη χρήση µίας Βάσης ∆εδοµένων. Στην περίπτωση που κρίνετε πως η χρήση Βάσης ∆εδοµένων είναι λογική, περιγράψτε αναλυτικά τα δεδοµένα που θα αποθηκευτούν, τις πιθανές ερωτήσεις προς τη Βάση ∆εδοµένων, τους πιθανούς χρήστες και τα οφέλη που θα προσκοµίσει η επιχείρηση από τη Βάση ∆εδοµένων. Σε αντίθετη περίπτωση τεκµηριώστε αναλυτικά την άποψή σας γιατί δεν απαιτείται η χρήση Βάσης ∆εδοµένων. Aς σηµειωθεί ότι το πρόβληµα πελάτες – προϊόντα – αποθήκη είναι ένα πολύ κοινό πρόβληµα και περιγράφεται σχεδόν σε κάθε βιβλίο για Βάσεις ∆εδοµένων. ∆εν ζητάµε από εσάς να µας δώσετε ένα γενικό µοντέλο που θα βρείτε σε κάποιο βιβλίο, αλλά ένα µοντέλο του πραγµατικού κόσµου για µία συγκεκριµένη και υπαρκτή επιχείρηση. ¢Ú·ÛÙËÚÈfiÙËÙ· 1.5 BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ÌÂϤÙË [1] Elmasri R. & Navathe S. B.,Fundamentals of Database Systems, Addison–Wesley, 1994 Το βιβλίο υπάρχει και σε Ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Στο κεφάλαιο 1 του βιβλίου θα µπορέσετε να βρείτε περιγραφή των εισαγωγικών εννοιών. Επίσης υπάρχει µια πολύ εµπεριστατωµένη και εκτενής ιστορική αναδροµή της εξέλιξης των Συστηµάτων ∆ιαχείρισης Βάσεων ∆εδοµένων, κάτι που δεν υπάρχει σε αυτό το εγχειρίδιο µελέτης. [2] Ulman J. D., Principles of Database Systems, Computer Science Press, 1982. Είναι ένα από το πρώτα και βασικότερα βιβλία για Βάσεις ∆εδοµένων. Στο κεφάλαιο 1 µε τίτλο Introduction to Database System Concepts, µπορείτε να βρείτε ένα εναλλακτικό τρόπο παρουσίασης των εισαγωγικών εννοιών. [3] Silberschatz A., Korth H., Sudarshan S, Database System Concepts, 38 KEºA§AIO 1: EI™A°ø°H Third Edition, McGraw–Hill, 1986. Ένα πολύ καλό βιβλίο που προτείνουµε σε όσους γνωρίζουν καλά αγγλικά και θέλουν «το κάτι παραπάνω», να το χρησιµοποιήσουν για µελέτη παράλληλα µε το µάθηµα. Στο κεφάλαιο 1 υπάρχουν εισαγωγικές έννοιες για Βάσεις ∆εδοµένων. [4] Abiteboul, Hull and Addison–Wesley, 1995. Vianou, Foundations of Databases, Στα κεφάλαια 1 και 2 του βιβλίου αυτού θα βρείτε µια εισαγωγή στο πρόβληµα των Βάσεων ∆εδοµένων. Το προτείνουµε στους σπουδαστές που έχουν καλό µαθηµατικό υπόβαθρο, καθώς παρουσιάζεται µία µαθηµατική προσέγγιση των µοντέλων των Βάσεων ∆εδοµένων. [5] Everest G., Database Management, McGraw–Hill, 1986. Όλο το τµήµα Ι του βιβλίου, δηλαδή τα κεφάλαια 1 έως και 5 ασχολούνται µε τις εισαγωγικές έννοιες που µελετήσαµε στο κεφάλαιο 1 του εγχειριδίου αυτού. Απευθύνεται περισσότερο σε αναγνώστες που έχουν ήδη ένα ισχυρό επίπεδο στην Τεχνολογία Λογισµικού και θέλουν να εντάξουν Βάσεις ∆εδοµένων στα πλαίσια των εφαρµογών τους. [6] Ullman J. D., Widom J., A First Course in Database Systems, Prentice–Hall, 1997. Ένα από το πιο σύγχρονα βιβλία σε Βάσεις ∆εδοµένων. Το κεφάλαιο 1 καλύπτει τις εισαγωγικές έννοιες που µελετήσατε, ωστόσο εισάγει και σε έννοιες αντικειµενοστραφών Βάσεων ∆εδοµένων τις οποίες καλύτερα να αφήσουµε για το τέλος της µελέτης σας. ∫ ∂ AÚ¯ÈÙÂÎÙÔÓÈ΋ Î·È º˘ÛÈ΋ OÚÁ¿ÓˆÛË Aگ›ˆÓ ™ÎÔfi˜ Σκοπός αυτού του κεφαλαίου είναι να περιγράψει τις Βάσεις ∆εδοµένων από πλευράς οργάνωσης στο φυσικό επίπεδο και να επεξηγήσει τις διαφορές ανάµεσα στον τρόπο που αντιλαµβάνεται ο χρήστης ότι οργανώνονται τα δεδοµένα, µε τον τρόπο που αυτά οργανώνονται πραγµατικά στα µέσα αποθήκευσης που χρησιµοποιεί ο ηλεκτρονικός υπολογιστής. Επίσης, να εξηγήσει τις οµές που χρησιµοποιούνται για την οργάνωση των δεδοµένων στο φυσικό επίπεδο και τις τεχνικές οργάνωσης που µπορούν να χρησιµοποιηθούν για να διευκολυνθεί η προσπέλαση των δεδοµένων, καθώς και τους τρόπους µε τους οποίους βελτιστοποιείται η απόδοση της Βάσης ∆εδοµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • εξηγήσετε τις διαφορές ανάµεσα στα επίπεδα αρχιτεκτονικής µίας Βάσης ∆εδοµένων • σχεδιάσετε σε αδρές γραµµές τη γενική εικόνα της αρχιτεκτονικής µιας Βάσης ∆εδοµένων και να περιγράψετε τον τρόπο µε τον οποίο τα δεδοµένα διακινούνται και επεξεργάζονται από τον υπολογιστή • διακρίνετε ανάµεσα στις έννοιες «εσωτερικό επίπεδο», «επίπεδο αντίληψης» και «εξωτερικό επίπεδο» • εξηγήσετε τις διαφορές µεταξύ σταθερών αρχείων και µεταβλητών αρχείων • περιγράψετε τη χρήση των αρχείων από το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων • εξηγήσετε την έννοια «κατακερµατισµός» και να περιγράψετε τις τεχνικές κατακερµατισµού και τη χρήση αυτών στις Βάσεις ∆εδοµένων • περιγράψετε την έννοια «δεικτοδότηση» και να δικαιολογήσετε τη χρήση της σε µία Βάση ∆εδοµένων • διακρίνετε ανάµεσα σε πρωτεύουσες και δευτερεύουσες δοµές για ευρετήρια και να περιγράψετε τα ευρετήρια πολλαπλών επιπέδων 2 º ∞ § ∞ π √ 40 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ και τη χρήση τους στις Βάσεις ∆εδοµένων • αναφέρετε παραδείγµατα ευρετηρίων και τρόπους δεικτοδότησης µίας Βάσης ∆εδοµένων • εξηγήσετε την έννοια «∆έντρα τύπου Β» και να περιγράψετε τη χρήση των δέντρων αυτών στις Βάσεις ∆εδοµένων • αναφέρετε παραδείγµατα εγγραφών στο φυσικό επίπεδο και να προτείνετε τις κατάλληλες δοµές για τη δηµιουργία ευρετηρίων ŒÓÓÔȘ ÎÏÂȉȿ • Εξωτερικό Επίπεδο (External Level) • Επίπεδο Αντίληψης (Conceptual Level) • Εσωτερικό (Φυσικό) Επίπεδο (Internal (Physical) Level) • Εγγραφές (Records) • Πεδία (Fields) • Τύπος ∆εδοµένων (Data Type) • Αρχεία (Files) • ∆είκτες (Pointers) • ∆ιάταξη (Sorting) • ∆εικτοδότηση (Indexing) • Κατακερµατισµός (Hashing) • ∆έντρα τύπου Β (B–Trees) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό εισάγεται η έννοια της φυσικής οργάνωσης των Βάσεων ∆εδοµένων. Στην ενότητα 2.1 θα συζητήσουµε για θέµατα αρχιτεκτονικής και για επίπεδα της Βάσης ∆εδοµένων. Στην ενότητ 2.2 θα περιγράψουµε το φυσικό επίπεδο, τις µονάδες αποθήκευσης και τον τρόπο µεταφοράς των δεδοµένων. Τέλος, στην ενότητα 2.3 θα συζητήσουµε τα αρχεία και τον τρόπο µε τον οποίο οι εγγραφές αποθηκεύονται σε αρχεία τα οποία χρησιµοποιεί η Βάση ∆εδοµένων, θα περιγράψουµε τα ευρετήρια και θα µιλήσουµε για τις δοµές µε τις οποίες διευκολύνεται η πρόσβαση στα δεδοµένα που αποθηκεύονται στο φυσικό επίπεδο της Βάσης ∆εδοµένων. 2.1 E›Â‰· AÚ¯ÈÙÂÎÙÔÓÈ΋˜ ™ÎÔfi˜ Σκοπός της ενότητας είναι να ορίσει τα τρία επίπεδα της αρχιτεκτονικής των Βάσεων ∆εδοµένων. Περιγράφει τις διαφορές µεταξύ του περιβάλλοντος που «βλέπει» ο χρήστης (εξωτερικό επίπεδο), µε το περιβάλλον το οποίο πραγµατικά υλοποιεί τη Βάση ∆εδοµένων σε φυσικό επίπεδο. Επίσης, σκοπός της ενότητας είναι να επεξηγήσει τον τρόπο που συνδέονται αυτά τα δύο επίπεδα µε το επίπεδο αντίληψης το οποίο λειτουργεί ως ενδιάµεσο επίπεδο. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τους ορισµούς των τριών επιπέδων αρχιτεκτονικής των Βάσεων ∆εδοµένων • δώσετε τουλάχιστον τρία παραδείγµατα δεδοµένων για κάθε επίπεδο, αντλώντας το υλικό σας από ένα πρόβληµα του πραγµατικού κόσµου • περιγράψετε τις λειτουργίες που επιτελούνται σε κάθε επίπεδο αρχιτεκτονικής και να εξηγήσετε τις διαφορές ανάµεσα σε κάθε επίπεδο • εξηγήσετε τι σηµαίνει διαφάνεια στις Βάσεις ∆εδοµένων • σχεδιάσετε τον τρόπο µε τον οποίο αλληλεπιδρούν τα τρία επίπεδα αρχιτεκτονικής των Βάσεων ∆εδοµένων (δηλαδή να µπορείτε να δείξετε µε ένα σχήµα τι είναι το κάθε επίπεδο) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα 2.1.1 παρουσιάζεται η αρχιτεκτονική µίας Βάσης ∆εδοµένων και στις επόµενες ενότητες (ενότητες 2.1.2 έως 2.1.4) περιγράφονται συνοπτικά τα τρία επίπεδα της αρχιτεκτονικής. Η αρχή γίνεται από το επίπεδο που «βλέπει» πρώτα ο χρήστης, δηλαδή το εξωτερικό επίπεδο και µετά ακολουθεί το φυσικό επίπεδο, δηλαδή αυτό που υφίσταται πραγµατικά. Το επίπεδο αντίληψης περιγράφεται τελευταίο, αφού προϋποθέτει την περιγραφή των άλλων δύο. 42 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ 2.1.1 AÚ¯ÈÙÂÎÙÔÓÈ΋ ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ Η αρχιτεκτονική των Βάσεων ∆εδοµένων συνήθως διαιρείται σε τρία επίπεδα: το εξωτερικό επίπεδο, το επίπεδο αντίληψης και το εσωτερικό επίπεδο. Τα επίπεδα αυτά παρουσιάζονται στο σχήµα 2.1. Στο σχήµα 2.1 παρουσιάζονται οι χρήστες (στην αριστερή πλευρά του σχήµατος) και οι µονάδες αποθήκευσης (στη δεξιά πλευρά του σχήµατος). Οι µονάδες αποθήκευσης µαζί µε τους µηχανισµούς αποθήκευσης και ανάκλησης των δεδοµένων συγκροτούν το φυσικό επίπεδο. Το εξωτερικό επίπεδο αποτελείται από τις όψεις της Βάσης ∆εδοµένων που βλέπουν οι χρήστες και που µπορεί να είναι διαφορετικές για κάθε χρήστη (για αυτό και στο σχήµα παρουσιάζονται δύο χρήστες για να τονισθεί η διαφορά). Τέλος, το επίπεδο αντίληψης βρίσκεται ανάµεσα στο εξωτερικό και στο φυσικό επίπεδο. Eξωτερικό επίπεδο Φυσικό επίπεδο Eπίπεδο αντίληψης ™¯‹Ì· 2.1 Επίπεδα Αρχιτεκτονικής 2.1.2 ∆Ô Â͈ÙÂÚÈÎfi Â›Â‰Ô I Ως εξωτερικό επίπεδο της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα δεδοµένα της Βάσης ∆εδοµένων παρουσιάζονται στο χρήστη. Το εξωτερικό επίπεδο είναι το επίπεδο που βρίσκεται πιο κοντά στο χρήστη. Μπορεί να υπάρχει µία διαφορετική όψη του εξωτερικού επιπέδου για κάθε χρήστη (ή οµάδα χρηστών), δηλαδή ο κάθε χρήστης να «βλέπει» διαφορετικά τη Βάση ∆εδοµένων. Eίναι δηλαδή το επίπεδο µέσω του οποίου ο χρήστης έρχεται σε άµεση επαφή µε τα δεδοµένα της Bάσης ∆εδοµένων. I Έτσι, στο εξωτερικό επίπεδο, το χρήστη της Βάσης ∆εδοµένων δεν τον απασχολεί το πώς τα δεδοµένα αποθηκεύονται στη Βάση ∆εδοµένων, πώς κατανέµονται στους διάφορους αποθηκευτικούς µηχανισµούς και πώς οργανώνονται. Ο χρήστης βλέπει τα δεδοµένα σε ένα υψηλότερο επίπεδο αφαίρεσης και αδιαφορεί για τον τρόπο που αυτά 2.1 E¶π¶∂¢∞ AƒÃπ∆∂∫∆√¡π∫∏™ 43 τα δεδοµένα διαχειρίζονται από τη Βάση ∆εδοµένων. Ας ανατρέξουµε στο παράδειγµα 1.1 του προηγούµενου κεφαλαίου. Στο εξωτερικό επίπεδο ο χρήστης θα έρθει σε επαφή µόνο µε έννοιες όπως «η θερµοκρασία της Αθήνας στις 5 Νοεµβρίου 1998» χωρίς να έχει αντίληψη του πώς αυτές οι έννοιες µεταφέρονται και ανακαλούνται από τους αποθηκευτικούς µηχανισµούς της Βάσης ∆εδοµένων. 2.1.3 TÔ Ê˘ÛÈÎfi Â›Â‰Ô Το εσωτερικό επίπεδο ή φυσικό επίπεδο είναι το επίπεδο που βρίσκεται πιο κοντά στη φυσική µορφή της Βάσης ∆εδοµένων. Περιγράφει δηλαδή πως η Βάση ∆εδοµένων είναι «χτισµένη» πραγµατικά. I Στην ενότητα αυτή παρουσιάζουµε η θέση του φυσικού επιπέδου στην αρχιτεκτονική µίας Βάσης ∆εδοµένων. Αναλυτικά µε το φυσικό επίπεδο θα ασχοληθούµε στην ενότητα 2.2, όπου θα περιγραφεί και ο τρόπος αποθήκευσης των δεδοµένων στη Βάση ∆εδοµένων. Στο φυσικό επίπεδο δεν µας απασχολούν οι έννοιες και οι πληροφορίες, αλλά το πώς τα δεδοµένα αποθηκεύονται στη Βάση ∆εδοµένων, πώς κατανέµονται στους διάφορους αποθηκευτικούς µηχανισµούς και πώς οργανώνονται. Αντιµετωπίζονται οι έννοιες του χώρου που καταλαµβάνει κάθε πεδίο στους χώρους (συνήθως µαγνητικούς δίσκους) αποθήκευσης της Βάσης ∆εδοµένων. Όπως παρουσιάζεται στο σχήµα 2.1, το φυσικό επίπεδο είναι µία συλλογή από χώρους αποθήκευσης όπως µαγνητικοί δίσκοι, οπτικοί δίσκοι (µίας εγγραφής ή και µε δυνατότητα επανεγγραφής), µαγνητικές ταινίες (παλαιότερα), ροµπότ ταινιών, συστοιχίες δίσκων, συστοιχίες οπτικών δίσκων, κτλ. Ο χρήστης µίας Βάσης ∆εδοµένων δεν χρειάζεται να γνωρίζει πού ακριβώς είναι αποθηκευµένα τα δεδοµένα του. Απλά δίνει µία ερώτηση προς τη Βάση ∆εδοµένων και αυτή αναλαµβάνει να τη µετατρέψει σε εντολές προς το φυσικό επίπεδο, να αντλήσει τα δεδοµένα από τους αντίστοιχους αποθηκευτικούς χώρους και να τα επιστρέψει στο χρήστη. Το φαινόµενο αυτό ονοµάζεται διαφάνεια. I Ο συνδετικός κρίκος ανάµεσα στο εξωτερικό επίπεδο και στο φυσικό επίπεδο είναι το επίπεδο αντίληψης το οποίο θα περιγράψουµε στην επόµενη ενότητα. I Ως φυσικό επίπεδο της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα δεδοµένα αποθηκεύονται και οργανώνονται υπό τη µορφή bytes και σελίδων στο µηχανισµό αποθήκευσης της Βάσης ∆εδοµένων. I Ως διαφάνεια ορίζεται το γεγονός ότι ο χρήστης δεν γνωρίζει που βρίσκονται τα δεδοµένα του και απλά βλέπει το αποτέλεσµα των εντολών που εκτελεί στο εξωτερικό επίπεδο. 44 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ 2.1.4 ∆Ô Â›Â‰Ô ·ÓÙ›Ï˄˘ Στην ενότητα 2.1.2 περιγράψαµε το εξωτερικό επίπεδο και στην ενότητα 2.1.3 το φυσικό επίπεδο. Ανάµεσα στην υψηλής αφαίρεσης αφηρηµένη περιγραφή του εξωτερικού επιπέδου και στην πραγµατική αποθήκευση των δεδοµένων στο φυσικό επίπεδο παρεµβάλλεται το επίπεδο αντίληψης (ιδεατό επίπεδο). Το επίπεδο αντίληψης συνδέει το φυσικό επίπεδο µε τις όψεις των διαφόρων χρηστών στο εξωτερικό πίπεδο. I I Ως επίπεδο αντίληψης (ιδεατό επίπεδο) της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο περιγράφεται το σχήµα της Βάσης ∆εδοµένων µε αυστηρά καθορισµένο τρόπο, σε επίπεδο αφαίρεσης αµέσως υψηλότερο από αυτό του φυσικού επιπέδου. Θα πρέπει να σηµειωθεί ότι ο δίπλα ορισµός του επιπέδου αντίληψης δεν είναι ακριβής. Όµως για να δοθεί ένας πλέον απόλυτος ορισµός, χρειάζεται αναφορά σε έννοιες που δεν έχετε ακόµη διδαχθεί. Για να κατανοήσετε το ρόλο του επίπεδου αντίληψης θα δώσουµε ένα παράδειγµα µετάβασης από το εξωτερικό επίπεδο στο φυσικό επίπεδο, βασιζόµενοι στη µετεωρολογική Βάση ∆εδοµένων του παραδείγµατος 1.1. Στο σχήµα 2.2 παρουσιάζεται η εντολή ενός χρήστη που θέλει να βρει τη θερµοκρασία της Αθήνας στις 17 Νοεµβρίου 1998. Στο εξωτερικό επίπεδο ο χρήστης «βλέπει» µία εντολή «Ποια ήταν η θερµοκρασία της Αθήνας στις 17 Νοεµβρίου 1998;» και µία απάντηση «17 βαθµοί Κελσίου». Στο φυσικό επίπεδο, ζητείται από τη Βάση ∆εδοµένων να ανακτήσει ένα συγκεκριµένο τµήµα δεδοµένων από το χώρο αποθήκευσης το (101, 36116, 17). Όπου 101 είναι ο κωδικός της πόλης Αθήνα (υποθέτουµε ότι η Αθήνα έχει καταχωρηθεί µε αυτό τον κωδικό), 36.166 είναι οι µέρες που έχουν περάσει από την 1/1/1900 (υποθέτουµε ότι προβλέψαµε ηµεροµηνίες µετά το 1900) και 17 η τιµή της θερµοκρασίας εκείνη την ηµέρα. Η επεξεργασία της εντολής του χρήστη, ώστε να αναζητηθεί το συγκεκριµένο τµήµα του χώρου αποθήκευσης και η επεξεργασία του (101, 36116, 17) ώστε να παραχθεί η επιθυµητή απάντηση µε τρόπο κατανοητό από το χρήστη γίνεται στο επίπεδο αντίληψης (δηλαδή η µετάβαση από την εντολή του χρήστη Φυσικό επίπεδο ™¯‹Ì· 2.2 Από το Εξωτερικό στο Εσωτερικό Επίπεδο Eξωτερικό επίπεδο Ποιά είναι η θερµοκρασία … 101, 36116 Eπίπεδο αντίληψης 101, 36116, 17 17 17 βαθµοί 2.1 E¶π¶∂¢∞ AƒÃπ∆∂∫∆√¡π∫∏™ 45 στα δεδοµένα και από τα δεδοµένα στο αποτέλεσµα υπό τη µορφή κατανοητής απάντησης στο χρήστη). Στο σχήµα 2.2 το επίπεδο αντίληψης δεν παρουσιάζεται. Βλέπουµε όµως ότι η αρχική εντολή του χρήστη τελικά µετατράπηκε σε µία συγκεκριµένη εντολή (που ζητούσε την πόλη µε κωδικό 101 και την ηµεροµηνία 36116). Επίσης η τιµή 17 µετατράπηκε σε απάντηση προς τον χρήστη. Για να γίνουν όλα αυτά το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων έκανε µία σειρά από λειτουργίες σε υψηλότερο επίπεδο αφαίρεσης από τις εντολές που τελικά έφτασαν στο φυσικό επίπεδο. Αυτές οι λειτουργίες, τις οποίες ο χρήστης δεν είναι απαραίτητο να γνωρίζει στο εξωτερικό επίπεδο, παρουσιάζονται στο σχήµα 2.3. ™¯‹Ì· 2.3 Λειτουργίες στο Επίπεδο Αντίληψης Ποιά είναι η θερµοκρασία … Select temp from city where day = … 101, 36116 Storage manager 17 17 17 βαθµοί 17° C Στο σχήµα 2.3 φαίνεται ότι η εντολή του χρήστη έχει µεταφραστεί σε µία γλώσσα δεδοµένων. Αυτή η γλώσσα δεδοµένων έχει περάσει από ένα µηχανισµό µετάφρασης (parser) και έχει δηµιουργηθεί ένα δέντρο µε τα σχετικά δεδοµένα. Τα δεδοµένα αυτά έχουν δοθεί σε ένα µηχανισµό αποθήκευσης και ανάκλησης (storage manager) ο οποίος τα µετέτρεψε σε εντολές προς το φυσικό επίπεδο. Αντίστοιχη διαδικασία έγινε και για να δοθεί η απάντηση σε µορφή κατανοητή από τον χρήστη. Βασική λειτουργία που εκτελείται στο επίπεδο αντίληψης είναι η µετάφραση των εντολών του χρήστη από κάποια γλώσσα εντολών στις αντίστοιχες εντολές του µηχανισµού ανάκλησης και αποθήκευσης δεδοµένων. Για τις γλώσσες εντολών θα µιλήσουµε αναλυτικά στα κεφάλαια 5 και 6. 46 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.1 Ακολουθούν τρεις ορισµοί. Συµπληρώστε τα κενά µε λέξεις ή φράσεις επιλέγοντας από αυτές που ακολουθούν κάθε ορισµό. Προσοχή, τον κάθε ορισµό ακολουθούν περισσότερες λέξεις ή φράσεις από όσες χρειάζεστε, οπότε κάποιες θα περισσέψουν. α) Ως διαφάνεια ορίζεται το γεγονός ότι ο χρήστης δεν γνωρίζει που βρίσκονται …………………… και απλά βλέπει το αποτέλεσµα των …………………… που εκτελεί στο …………………… . (οι µεταβλητές, τα δεδοµένα, οι Βάσεις ∆εδοµένων, εντολών, δεδοµένων, γλωσσών, φυσικό επίπεδο, επίπεδο αντίληψης, εξωτερικό επίπεδο) β) Ως φυσικό επίπεδο της …………………… µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο …………………… αποθηκεύονται και οργανώνονται πραγµατικά στη …………………… (αρχιτεκτονικής, διαχείρισης, λειτουργίας, χρήσης, τα πεδία, τα δεδοµένα, οι εντολές, οι εντολές του χρήστη, αρχιτεκτονική, Βάση ∆εδοµένων) γ) Ως εξωτερικό …………………… της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα ……… …………… της Βάσης ∆εδοµένων παρουσιάζονται στο …………………… . (στοιχείο, επίπεδο, δεδοµένο, δεδοµένα, στοιχεία, περιεχόµενα, σύστηµα, χρήστη, µαγνητικό δίσκο) 2.1 E¶π¶∂¢∞ AƒÃπ∆∂∫∆√¡π∫∏™ 47 Ακολουθούν µερικές προτάσεις. Ποιες από αυτές είναι σωστές και ποιες λάθος; Σωστό Λάθος Ο χρήστης πρέπει να περιγράφει κάθε εντολή που δίνει στο εξωτερικό επίπεδο µε την αντίστοιχη εντολή στο φυσικό επίπεδο. Το επίπεδο αντίληψης συνδέει το φυσικό επίπεδο µε το εξωτερικό επίπεδο. Ο χρήστης βλέπει τα δεδοµένα στο εξωτερικό επίπεδο. ∆ιαφάνεια σηµαίνει ότι ο χρήστης βλέπει τη µορφή των δεδοµένων για κάθε επίπεδο. Στο επίπεδο αντίληψης δεν επιτελούνται στην πραγµατικότητα λειτουργίες, απλά είναι ένα επίπεδο για να συνδέει το φυσικό µε το εξωτερικό επίπεδο. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.2 ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ Βασισµένοι στο παράδειγµα 1.1 δώστε τρεις εντολές για τη Βάση ∆εδοµένων του παραδείγµατος. Για κάθε µία από αυτές τις εντολές σχεδιάστε τις εντολές όπως θα τις βλέπει ο χρήστης στο εξωτερικό επίπεδο και όπως φαντάζεστε ότι θα εµφανίζονται στο φυσικό επίπεδο. ¢Ú·ÛÙËÚÈfiÙËÙ· 2.1 48 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ 2.2 ∆Ô Ê˘ÛÈÎfi Â›Â‰Ô ™ÎÔfi˜ Σκοπός της ενότητας είναι να παρουσιάσουµε τις βασικές έννοιες που σχετίζονται µε την οργάνωση των δεδοµένων στο φυσικό επίπεδο, καθώς και τον τρόπο µε τον οποίο οργανώνονται τα δεδοµένα στις µονάδες αποθήκευσης του υπολογιστή. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • περιγράψετε τις έννοιες «τύποι δεδοµένων», «πεδία», «εγγραφές» και «αρχεία» • εξηγήσετε τον τρόπο οργάνωσης των δεδοµένων σε αρχεία στο φυσικό επίπεδο • δώσετε παραδείγµατα εγγραφών για ένα συγκεκριµένο πρόβληµα ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα 2.2.1 παρουσιάζονται οι ορισµοί των τύπων δεδοµένων και των πεδίων, ενώ στην ενότητα 2.2.2 οι ορισµοί των εγγραφών και των αρχείων. Τέλος στην ενότητα 2.2.3 περιγράφονται οι µονάδες αποθήκευσης που χρησιµοποιεί µία Βάση ∆εδοµένων. 2.2.1 ∆‡ÔÈ ‰Â‰ÔÌ¤ÓˆÓ Î·È Â‰›· I Οι Τύποι ∆εδοµένων καθορίζουν τη µορφή των δεδοµένων και τον αποθηκευτικό χώρο που θα δεσµεύσουν. Το αντικείµενο του φυσικού επιπέδου είναι η αποθήκευση και η οργάνωση αρχείων, τα οποία αποτελούνται από εγγραφές. (Για τα αρχεία και τις εγγραφές θα µιλήσουµε στην επόµενη ενότητα.) Κάθε εγγραφή αποτελείται από τιµές για µία συλλογή από πεδία µε κθορισµένο τύπο δεδοµένων για κάθε πεδίο. Έτσι, στο φυσικό επίπεδο, τα δεδοµένα αντιµετωπίζονται ως εγγραφές που περιέχουν πεδία. Πριν προχωρήσουµε ας παρουσιάσουµε τους ορισµούς για τις έννοιες που εισάγαµε. I Οι τύποι δεδοµένων εξαρτώνται από το επίπεδο αντίληψης (από τη γλώσσα που χρησιµοποιεί η Βάση ∆εδοµένων) και από το Σύστηµα ∆ιαχείρισης Βάσης ∆εδοµένων. Στο φυσικό επίπεδο, οι τύποι δεδο- 2.2 ∆√ ºÀ™π∫√ ∂¶π¶∂¢√ 49 µένων καθορίζουν το χώρο που θα δεσµευτεί στους αποθηκευτικούς χώρους της Βάσης ∆εδοµένων. Έτσι, για παράδειγµα, ένας τύπος δεδοµένων (κοινός για κάθε σύστηµα) είναι ο τύπος «char (N)». Το «char» καθορίζει ότι τα δεδοµένα αυτού του τύπου αποτελούνται από χαρακτήρες (είναι δηλαδή συµβολοσειρές), ενώ το «Ν» καθορίζει το µέγιστο αριθµό αυτών των χαρακτήρων. Έτσι ο τύπος δεδοµένων «char (5)» περιγράφει ένα πεδίο το οποίο έχει δεδοµένα αποτελούµενα από συµβολοσειρές αποτελούµενες από 0 έως και 5 σύµβολα. I Έτσι, πάλι στο παράδειγµα 1.1, πεδία είναι τα «Όνοµα Πόλης», «Ηµεροµηνία», «Θερµοκρασία». Για καθένα από αυτά τα πεδία είναι γνωστός ο τύπος δεδοµένων του. Για το πεδίο «Όνοµα Πόλης» ο τύπος δεδοµένων είναι «char (20)» δηλαδή το σύστηµα στο φυσικό επίπεδο θα δεσµεύσει 20 Bytes αποθηκευτικού χώρου για τα δεδοµένα αυτού του πεδίου. (Στην πραγµατικότητα, το σύστηµα πιθανότατα θα δεσµεύσει περισσότερο από 20 Bytes για το συγκεκριµένο πεδίο, αλλά αυτό εξαρτάται από δεσµεύσεις χώρου για ανάγκες του συστήµατος, όπως δείκτες κτλ., και δεν θα επεκταθούµε σε αυτό.) 2.2.2 ∂ÁÁڷʤ˜ Î·È ·Ú¯Â›· I Τα Πεδία είναι στοιχεία µε καθορισµένο τύπο δεδοµένων που δεσµεύουν αποθηκευτικό χώρο. Όπως αναφέραµε στην ενότητα 2.2.1 οι εγγραφές είναι συλλογές τιµών για καθορισµένα πεδία. Ο τρόπος οµαδοποίησης των εγγραφών σε αρχεία και ο αποτελεσµατικός τρόπος αποθήκευσης και ανάκλησης των εγγραφών είναι το αντικείµενο του φυσικού επιπέδου. I Ας ανατρέξουµε πάλι στο παράδειγµα 1.1. Η έννοια «Πόλη» θα µπορούσε να αποτελείται από το πεδίο «Κωδικός Πόλης» µε τύπο δεδοµένων «Ακέραιος» και το πεδίο «Ονοµασία Πόλης» µε τύπο δεδοµένων «Κείµενο (20)». Οι εγγραφές λοιπόν για τις πόλεις θα ήταν τιµές για δύο πεδία µε την πρώτη τιµή να είναι ακέραιος και τη δεύτερη µια συµβολοσειρά µέχρι 20 χαρακτήρες. Έτσι αποδεκτές τιµές θα ήταν για παράδειγµα οι «101, Αθήνα», 109, Θεσσαλονίκη», «145, Κόρινθος» κτλ. Οι εγγραφές αποθηκεύονται στη Βάση ∆εδοµένων σε αρχεία. I Τα αρχεία αποθηκεύονται σε ένα ή περισσότερα blocks (το block είναι η µονάδα δεδοµένων που διαβάζει το σύστηµα αρχείων). Οι βασικές λειτουργίες που πρέπει να επιτελεί η Βάση ∆εδοµένων σε ένα αρχείο είναι η αναζήτηση εγγραφής, εισαγωγή νέας εγγραφής, η διαγραφή εγγραφής και η µεταβολή εγγραφής. I Εγγραφές είναι συλλογές από τιµές για ένα καθορισµένο αριθµό πεδίων. I Τα Αρχεία είναι συλλογές από εγγραφές. 50 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ 2.2.3 ªÔÓ¿‰Â˜ ·Ôı‹Î¢Û˘ Aρχείο 1 Block 1 Block 2 Block 3 Aρχείο 2 Η λειτουργία της Βάσης ∆εδοµένων στο φυσικό επίπεδο καθορίζεται από το λειτουργικό σύστηµα του υπολογιστή στον οποίο φιλοξενείται. Τα δεδοµένα οργανώνονται στο δίσκο του υπολογιστή, όπως παρουσιάζεται στο σχήµα 2.4, και από το δίσκο µεταφέρονται στη µνήµη για να επεξεργαστούν από τον επεξεργαστή. Στο δίσκο του υπολογιστή υπάρχουν πολλά αρχεία (στο σχήµα 2.4 για λόγους απλότητας σχεδιάσαµε µόνο δύο) διαφορετικών µεγεθών. Κάθε αρχείο κατανέµεται σε ένα ή περισσότερα blocks. Για παράδειγµα στο σχήµα 2.4 το αρχείο 1 κατανέµεται σε 3 blocks. (Φυσικά και το αρχείο 2 κατανέµεται σε blocks, αλλά για λόγους απλότητας δεν έχουµε σχεδιάσει στο σχήµα τα αντίστοιχα blocks, ώστε να συζητήσουµε για το αρχείο 1. Κάθε block περιέχει ένα αριθµό εγγραφών και κάθε εγγραφή αποτελείται από ένα ή περισσότερα πεδία. Όταν η Βάση ∆εδοµένων θέλει πληροφορίες για κάποιο πεδίο (π.χ. τη θερµοκρασία µιας πόλης, όπως στο παράδειγµα 1.1), πρέπει να οδηγήσει τον επεξεργαστή στο block που περιέχει την αντίστοιχη εγγραφή. (∆ηλαδή να διαβάσει το συγκεκριµένο block στη µνήµη ώστε να το επεξεργαστεί ο υπολογιστής.) Για να µπορεί η Βάση ∆εδοµένων να λειτουργεί γρήγορα και αποδοτικά πρέπει να έχει τρόπους ώστε να εντοπίζει γρήγορα το block στο οποίο είναι αποθηκευµένη η ζητούµενη εγγραφή (ώστε να µειώνει τον χρόνο αναζήτησης) και να οµαδοποιεί εγγραφές σε blocks ώστε να µειώνεται ο αριθµός των blocks που θα χρειαστούν σε περίπτωση αναζητήσεως οµοειδών εγγραφών. Για αυτούς τους τρόπους θα µιλήσουµε στην επόµενη ενότητα. Πρέπει να γίνει κατανοητό ότι τα δεδοµένα που αποθηκεύονται στις Βάσεις ∆εδοµένων δεν µπορούν να αποθηκευτούν όλα στη µνήµη του υπολογιστή. Έτσι προκύπτει η ανάγκη να µεταφέρονται από τα µέσα µαγνητικής αποθήκευσης στη µνήµη και το αντίστροφο. Σε σχέση µε τις ―σχετικά χρονοβόρες― µηχανικές κινήσεις των συσκευών αποθήκευσης αυτό δηµιουργεί τα προβλήµατα τα οποία και καλούνται να λύσουν οι Βάσεις ∆εδοµένων σήµερα. ™¯‹Ì· 2.4 Οργάνωση Αρχείων και Blocks 2.2 ∆√ ºÀ™π∫√ ∂¶π¶∂¢√ 51 Θεωρήστε το παράδειγµα 1.1. Για να αποθηκεύσουµε τη θερµοκρασία µίας πόλης χρησιµοποιούµε τα πεδία «Κωδικός Πόλης», «Ηµεροµηνία» και «Θερµοκρασία». Οι τύποι δεδοµένων είναι αντίστοιχα «Ακέραιος µε µέγεθος 4 Bytes», «Κείµενο µε µέγεθος 20 χαρακτήρες» και «Ακέραιος µε µέγεθος 1 Byte». Ακολουθούν µερικά παραδείγµατα εγγραφών στις οποίες οι τιµές για κάθε πεδίο χωρίζονται µε κόµµα. Ποιες από αυτές είναι σωστές ως εγγραφές (δηλαδή θα µπορούσαν να είναι εγγραφές, άσχετα µε το εάν έχουν νόηµα ή όχι) και ποιες λάθος; Σωστό «102», «17/12/1998», «23» «132», «∆εν έγινε µέτρηση», «0» «8786117», «6201345α», «123» «12», «17/11/1998», «555» «ΑΒ», «13/02/1999», «23» ❏ ❏ ❏ ❏ ❏ Λάθος ❏ ❏ ❏ ❏ ❏ ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.3 Έστω ότι θέλουµε να αποθηκεύσουµε σε ένα αρχείο εγγραφές της µορφής που περιγράφεται στην άσκηση 2.3. Θεωρήστε ότι: α) κάθε εγγραφή χρειάζεται ακριβώς 4 + 20 + 1 = 25 Bytes ανεξάρτητα µε το περιεχόµενό της (δεν χρησιµοποιούνται δηλαδή παραπάνω Bytes από το σύστηµα), β) το σύστηµα χρησιµοποιεί blocks µε µέγεθος 200 Bytes, γ) κάθε block χρειάζεται 20 Bytes για ειδικούς σκοπούς (δηλαδή 20 bytes, που συµπεριλαµβάνονται στα 200, δεσµεύονται από το σύστηµα) και δ) µία εγγραφή πρέπει να είναι ολόκληρη στο ίδιο block. Απαντήστε στις παρακάτω ερωτήσεις: 1) Έστω ότι θέλουµε να αποθηκεύσουµε σε ένα αρχείο 200 εγγραφές. Πόσα blocks θα έχει το αρχείο αυτό; 2) Έστω ότι θέλουµε να αποθηκεύσουµε σε ένα αρχείο 1.000 εγγραφές. Πόσα blocks θα έχει το αρχείο αυτό; 3) Έστω ότι θέλουµε να αποθηκεύσουµε σε ένα αρχείο 2 εγγραφές. Πόσα blocks θα έχει το αρχείο αυτό; ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.4 52 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ ¢Ú·ÛÙËÚÈfiÙËÙ· 2.2 Με βάση τις προδιαγραφές της άσκησης αυτοαξιολόγησης 2.3 δώστε παραδείγµατα 20 εγγραφών που να είναι αποδεκτές από το σύστηµα. ¢Ú·ÛÙËÚÈfiÙËÙ· 2.3 Χρησιµοποιώντας τις εγγραφές που έχετε δώσει στην απάντηση της δραστηριότητας 2.2, σχεδιάστε τον τρόπο που θα είχαν αποθηκευτεί αυτές οι 20 εγγραφές σε ένα αρχεί. Χρησιµοποιήστε τετραγωνισµένο χαρτί και αναγράψτε τις εγγραφές χρησιµοποιώντας τα µεγέθη (για εγγραφή και block) της άσκησης αυτοαξιολόγησης 4 του κεφαλαίου 2. 2.3 OÚÁ¿ÓˆÛË ·Ú¯Â›ˆÓ ÛÙÔ Ê˘ÛÈÎfi Â›Â‰Ô ™ÎÔfi˜ Σκοπός της ενότητας είναι να παρουσιάσουµε τον τρόπο µε τον οποίο οργανώνονται τα αρχεία στο σύστηµα αποθήκευσης του υπολογιστή και να περιγράψουµε βασικές τεχνικές που διευκολύνουν την αναζήτηση των δεδοµένων από τα αρχεία, όπως η χρήση δεικτών και καταλόγων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • σχεδιάσετε τη µορφή ενός αρχείου στο δίσκο µετά από µία ακολουθία πράξεων • περιγράψετε τις έννοιες «κατάλογοι», «δείκτες», «αναδιάταξη αρχείου» και «διατεταγµένα αρχεία» • εξηγήσετε τις διαφορές ανάµεσα σε αρχεία µε εγγραφές σταθερού µήκους και αρχεία µε εγγραφές µεταβλητού µήκους • υπολογίσετε την επιβάρυνση σε χώρο αποθήκευσης από τη χρήση καταλόγων • περιγράψετε τις βασικές αρχές των δέντρων τύπου Β και των δέντρων τύπου Β+ 2 . 3 O ƒ °∞ ¡ ø ™ ∏ ∞ ƒ à ∂ π ø ¡ ™ ∆ √ º À ™ π ∫ √ ∂ ¶ π ¶ ∂ ¢ √ 53 ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα 2.3.1 παρουσιάζονται οι βασικές έννοιες της οργάνωσης αρχείων στο φυσικό επίπεδο όπως είναι η διάταξη των αρχείων, η χρήση καταλόγων, και η χρήση εγγραφών µεταβαλλόµενου µήκους. Στην ενότητα 2.3.2 περιγράφουµε την τεχνική κατακερµατισµού των αρχείων, στην ενότητα 2.3.3 συζητούµε το θέµα τις δεικτοδότησης των αρχείων και περιγράφουµε τους καταλόγους και τέλος στην ενότητα 2.3.4 συζητούµε για τα δέντρα τύπου Β και δέντρα τύπου Β+. 2.3.1 µ·ÛÈΤ˜ ¤ÓÓÔȘ Ù˘ ÔÚÁ¿ÓˆÛ˘ ·Ú¯Â›ˆÓ Στη δραστηριότητα 2.3 περιγράψαµε πώς µπορούν να αποθηκευτούν τα δεδοµένα στον αποθηκευτικό µηχανισµό του υπολογιστή (συνήθως στο δίσκο του υπολογιστή) οργανωµένα σε blocks που περιέχουν εγγραφές. Στη συγκεκριµένη δραστηριότητα οι εγγραφές είχαν τοποθετηθεί στο δίσκο χωρίς καµία διάταξη (δηλαδή τοποθετήθηκαν στο δίσκο µε τη σειρά που εµφανίσθηκαν). Η «διάταξη» αυτή ονοµάζεται σωρός (heap). Στην περίπτωση που κάποια εγγραφή θα έπρεπε να διαγραφεί, τότε ο χώρος αυτός θα έµενε ελεύθερος και θα µπορούσε να χρησιµοποιηθεί για κάποια νέα εγγραφή. Αυτό γίνεται από το σύστηµα για λόγους καθαρά πρακτικούς: Eάν κάθε νέα εγγραφή έµπαινε στο τέλος του σωρού και όι στα κενά που δηµιουργούνταν από τις διαγραφές τότε σύντοµα θα είχαµε ένα σωρό µε πολλά κενά που θα καταλάµβανε όλο το διαθέσιµο αποθηκευτικό χώρο. Για να διαγραφεί µία εγγραφή συνήθως χρησιµοποιείται ένα bit ελέγχου το οποίο παίρνει τιµή 1 στην περίπτωση που ο χώρος είναι διαθέσιµος. Η συγκεκριµένη δραστηριότητα προϋποθέτει εγγραφές σταθερού µήκους, δηλαδή εγγραφές µε συγκεκριµένο αριθµό πεδίων και µε συγκεκριµένο µέγεθος δεσµευµένο για κάθε πεδίο. Εκτός όµως από εγγραφές σταθερού µήκους µπορούµε να έχουµε αποθηκευµένες στη Βάση ∆εδοµένων εγγραφές µε δυναµικά µεταβαλλόµενο µήκος. Εγγραφές µε δυναµικά µεταβαλλόµενο µήκος µπορεί να προκύψουν γιατί κάποια πεδία της εγγραφής είναι προαιρετικά (δηλαδή µπορούν να δοθούν ή να µην δοθούν και κατά συνέπεια δεν δεσµεύεται ο χώρος από πριν). Έτσι, κάποια πεδία µπορούν να δέχονται περισσότερες από µία τιµές ή κάποια πεδία είναι µεταβλητού µήκους (έχουν τύπο δεδοµένων που δεν έχει σταθερό µήκος), κτλ. Στην περίπτωση εγγραφών µε δυναµικά µεταβαλλόµενο µήκος η εισα- 54 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ γωγή µίας νέας εγγραφής δεν είναι τόσο εύκολο να γίνει στο σηµείο που είχε διαγραφεί κάποια άλλη. Έτσι κάποιες φορές προκύπτει η ανάγκη αναδιάρθρωσης του αρχείου. Αναδιάρθρωση σηµαίνει ανάγνωση όλων, ή τµήµατος, των εγγραφών και τοποθέτησή τους εκ νέου στη µονάδα αποθήκευσης. Αναδιάρθρωση µπορεί να γίνει για πολλούς λόγους, όπως θα δούµε και στις επόµενες ενότητες. Η µορφή αποθήκευσης των δεδοµένων στο δίσκο που προέκυψε από το αποτέλεσµα της δραστηριότητας 3 του κεφαλαίου 2 δεν είναι η πιο αποτελεσµατική. Ας υποθέσουµε ότι οι συχνότερες ερωτήσεις ήταν οι θερµοκρασίες κάθε πόλης για κάποια συγκεκριµένη χρονική περίοδο. Έτσι όπως τοποθετήθηκαν τα δεδοµένα στο αρχείο, για να απαντηθεί µια ερώτηση όπως «Τι θερµοκρασίες είχε η Αθήνα από 10/12/1998 έως 20/12/1998;» θα έπρεπε να αναζητηθούν 11 εγγραφές που πιθανότατα θα βρίσκονταν σε 11 διαφορετικά blocks. Αυτό θα σήµαινε πολύ µεγάλη καθυστέρηση, αφού η ανάγνωση ενός block από το δίσκο στη µνήµη είναι συγκριτικά χρονοβόρα δραστηριότητα. Θα ήταν λοιπόν απόλυτα λογικό να έχουµε το αρχείο διατεταγµένο ανά πόλεις και ανά ηµεροµηνίες, δηλαδή να έχουµε όλες τις εγγραφές της πόλης µε κωδικό 101 µαζί και µάλιστα µε αύξουσα σειρά ηµεροµηνίας. Η διάταξη του αρχείου µας διασφαλίζει ότι θα φέρουµε από το δίσκο στη µνήµη τα λιγότερα δυνατά blocks. Είναι φανερό ότι, σε περίπτωση όπως αυτή που περιγράφουµε, η διάταξη του αρχείου θα επιταχύνει σηµαντικά την αναζήτηση. Όµως, η διάταξη δεν είναι χωρίς κάποιο τίµηµα. Μετά από κάθε διαγραφή ή εισαγωγή θα έπρεπε να γίνει αναδιάρθρωση του αρχείου ώστε να µην χαλάσει η διάταξη. Φανταστείτε τώρα ότι στο συγκεκριµένο παράδειγµα είχαµε διατεταγµένες τιµές µε ηµεροµηνίες από 1/1/1990 έως σήµερα. Εάν θέλαµε τη θερµοκρασία για τις 25/12/1995, εκτός από τη διάταξη θα έπρεπε να έχουµε και κάποιον τρόπο για να εντοπίσουµε πού περίπου βρίσκεται στον κατάλογο. (Αλλιώς πάλι θα έπρεπε να διαβάσουµε όλα τα blocks, ή να µαντέψουµε που περίπου βρίσκεται η ζητούµενη ηµεροµηνία.) Για να το επιτύχουµε αυτό χρησιµοποιούµε δείκτες και καταλόγους. ∆είκτης είναι η διεύθυνση ενός block, ή µίας εγγραφής στη µονάδα αποθήκευσης. Έτσι, στο συγκεκριµένο παράδειγµα, εάν υπάρχει κάποιος δείκτης σε κάθε block, ο οποίος αναφέρει την ηµεροµηνία της πρώτης εγγραφής του block, τότε µπορούµε να βρούµε κατευθείαν τη 2 . 3 O ƒ °∞ ¡ ø ™ ∏ ∞ ƒ à ∂ π ø ¡ ™ ∆ √ º À ™ π ∫ √ ∂ ¶ π ¶ ∂ ¢ √ 55 ζητούµενη ηµεροµηνία. Βέβαια πάλι αυτό δεν γίνεται χωρίς κάποιο τίµηµα. Πέρα από το τίµηµα ότι το αρχείο θα πρέπει να είναι διατεταγµένο θα πρέπει να αποθηκεύουµε κάπου και τους δείκτες. ∆ηµιουργούµε δηλαδή έναν κατάλογο µε τη χρήση του οποίου προσπελαύνουµε ευκολότερα και κυρίως πιο γρήγορα τη Βάση ∆εδοµένων. Χρησιµοποιώντας τις εγγραφές που έχετε δώσει στην απάντηση της δραστηριότητας 2.3, υλοποιήστε µία ακολουθία από διαγραφές δεδοµένων και εισαγωγές νέων δεδοµένων και σχεδιάστε στο τετραγωνισµένο χαρτί τις εγγραφές, όπως θα προκύψουν µετά την ακολουθία. Στις δύο ακολουθίες που δίνουµε ∆4 σηµαίνει «διαγραφή της 4ης στη σειρά εγγραφής» και Ε σηµαίνει «εισαγωγής νέας εγγραφής». Υποθέσετε ότι η Βάση ∆εδοµένων είναι διατεταγµένη σε σωρό, όπως και στη δραστηριότητα 3 του κεφαλαίου 2. Α) ∆5, ∆2, Ε, ∆11, Ε, ∆20, Ε, Ε, Ε, Ε, ∆1, ∆3, ∆4, Ε Β) ∆1, Ε, Ε, Ε, ∆8, Ε, ∆18, Ε, Ε, Ε, ∆2, ∆3, ∆,10, ∆12 ¢Ú·ÛÙËÚÈfiÙËÙ· 2.4 2.3.2 ∫·Ù·ÎÂÚÌ·ÙÈÛÌfi˜ ·Ú¯Â›ˆÓ Η οργάνωση αρχείων σε σωρό που παρουσιάσαµε στην προηγούµενη ενότητα δεν είναι πολύ αποτελεσµατική, όπως συζητήσαµε. Μια πιο αποτελεσµτική οργάνωση είναι ο κατακερµατισµός των αρχείων. Η βασική ιδέα του κατακερµατισµού είναι ότι το αρχείο χωρίζεται σε τµήµατα και κάθε τµήµα περιέχει ένα ή περισσότερα blocks συνδεδεµένα µεταξύ τους. Έχοντας ένα κατάλογο των τµηµάτων µπορούµε να εντοπίσουµε το ζητούµενο block από τον κατάλογο και να το φέρουµε στη µνήµη. Στο σχήµα 2.5 παρουσιάζεται ένα κατακερµατισµένο αρχείο µε 5 τµήµατα και 9 blocks. Η επιλογή του τµήµατος στο οποίο θα εισαχθεί κάποιο αρχείο (και αντίστοιχα η αναζήτηση) γίνεται µε βάση έναν αλγόριθµο κατακερµατισµού. Η βασική ιδέα είναι η µείωση του χρόνου της αναζήτησης. Τώρα η αναζήτηση περιορίζεται σε ένα τµήµα (που καθορίζεται από τη συνάρτηση κατακερµατισµού) και όχι σε ολόκληρο τον όγκο των δεδοµένων. ∆ηλαδή, αντί να αναζητούµε σε όλο το αρχείο, εντοπίζουµε το τµήµα στο οποίο ανήκει η εγγραφή που αναζητούµε και περιοριζόµαστε στα blocks αυτού του τµήµατος µόνο, αγνοώντας τα υπόλοιπα. 56 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ ™¯‹Ì· 2.5 Κατακερµατισµένο Αρχείο 1 2 3 4 5 Block 1 Block 3 Block 4 Block 6 Block 7 Block 9 Block 8 Block 5 Block 2 2.3.3 ¢ÂÈÎÙÔ‰fiÙËÛË ·Ú¯Â›ˆÓ Î·È Î·Ù¿ÏÔÁÔÈ Όπως συζητήσαµε και στην ενότητα 2.2.1, ένα αρχείο µπορεί να δεικτοδοτηθεί και να δηµιουργηθεί κάποιος κατάλογος. Ας υποθέσουµε ότι έχουµε ένα αρχείο µε ονόµατα πόλεων διατεταγµένο κατά αλφαβητική σειρά. Επίσης, ας υποθέσουµε ότι σε κάθε block χωρούν 20 εγγραφές. Μια πολύ λογική αντιµετώπιση θα ήταν να δεικτοδοτήσουµε κάθε block δηµιουργώντας έναν κατάλογο µε την πρώτη εγγραφή του block. Έστω ότι είχαµε 1000 εγγραφές. Άρα θα χρειαζόµαστε 1000/20=50 blocks (υποθέτουµε ένα τέλεια διαταγµένο αρχείο) για να συγκεντρώσουµε τους δείκτες και θα έπρεπε να έχουµε ένα κατάλογο µε 50 εγγραφές, όπου καθεµία θα ήταν ένας δείκτης στο αντίστοιχο block. Με αυτό τον τρόπο εξασφαλίζουµε ότι η αναζήτησή µας θα γίνει πιο γρήγορα, αφού θα χρειαστεί να διαβάσουµε µόνο τον κατάλογο για να εντοπίσουµε τη θέση µίας εγγραφής (δηλαδή σε πιο block ανήκει). Με τον ίδιο τρόπο που δεικτοδοτήσαµε το αρχείο µπορεί να δεικτοδοτηθεί και ο κατάλογος. Έτσι ο κατάλογος έχει 50 εγγραφές (άρα 3 blocks) και µπορεί να δηµιουργηθεί ένα νέο block που να έχει δείκτες στα 3 blocks του καταλόγου. Με αυτό τον τρόπο έχουµε δηµιουργήσει έναν κατάλογο µε δύο επίπεδα, όπως φαίνεται στο σχήµα 2.6. Οι κατάλογοι µε τους οποίους δεικτοδοτούµε τα αρχεία στη Βάση ∆εδοµένων µπορεί να είναι πολλαπλών επιπέδων (πολύ περισσότερα 2 . 3 O ƒ °∞ ¡ ø ™ ∏ ∞ ƒ à ∂ π ø ¡ ™ ∆ √ º À ™ π ∫ √ ∂ ¶ π ¶ ∂ ¢ √ 57 Aθήνα Bέρροια ∆ράµα … Aθήνα Aµαλιάδα Aµφιλοχία … Aθήνα Θεσσαλονίκη Tρίπολη Θεσσαλονίκη Kαλαµάτα Kόρινθος … Bέροια Bόλος Γρεβενά … Tρίπολη … Φλώρινα Xαλκίδα Xαλκίδα Xίος Ψαρά … ™¯‹Ì· 2.6 Κατάλογος δύο επιπέδων από τα δύο επίπεδα του σχήµατος 2.6). Μια ενδιαφέρουσα µορφή καταλόγου µε πολλά επίπεδα είναι το δέντρο τύπου Β, το οποίο είναι δεικτοδότηση µε πολλούς καταλόγους σε µορφή δέντρου που εξασφαλίζει ότι δεν θα αποµένει κενός χώρος από διαγραφές και ότι το δέντρο θα είναι ισοζυγισµένο. Τα δέντρα τύπου Β συζητούνται στην ενότητα 2.3.4, που ακολουθεί. Σε ένα αρχείο µπορούµε να έχουµε περισσότερους από έναν καταλόγους. Ο κατάλογος που παρουσιάζεται στο σχήµα 2.6 αναφέρεται στο πεδίο «Πόλη» κάθε εγγραφής. Θα µπορούσαν να υλοποιηθούν και άλλοι κατάλογοι για κάποια άλλα πεδία της εγγραφής (π.χ. κατάλογος για τον κωδικό της πόλης). Έτσι, σε κάθε αρχείο θεωρητικά (και χωρίς αυτό να σηµαίνει καλή σχεδίαση) θα µπορούσαν να υπάρχουν πολλοί κατάλογοι µε πολλά επίπεδα για κάθε κατάλογο. Πέρα από το προφανές όφελος στην ταχύτητα της αναζήτησης των δεδοµένων, οι κατάλογοι επιβαρύνουν το σύστηµα. Kατ' αρχήν το επιβαρύνουν γιατί αυξάνεται η απαίτηση σε αποθηκευτικό χώρο. ∆είτε το σχήµα 2.6. Αντί για 50 blocks τελικά χρησιµοποιήθηκαν 54 blocks. Επίσης, σε περίπτωση εισαγωγής ή διαγραφής θα πρέπει να γίνουν οι απαραίτητες αλλαγές στους καταλόγους και πολλές φορές θα πρέπει να αναδιαρθρωθούν πλήρως οι κατάλογοι, γεγονός που τελικά επιβαρύνει το 58 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ σύστηµα. Η επιλογή της χρήσης ή όχι δεικτοδότησης για κάποια αρχεία και η επιλογή των πεδίων για τα οποία θα χρησιµοποιηθούν κατάλογοι δεν είναι απλή και εύκολη απόφαση και προϋποθέτει εµπειρία σε Βάσεις ∆εδοµένων. Πρέπει να σηµειωθεί ότι το σχήµα 2.6 παρουσιάζει σχηµατικά τα blocks χωρίς περισσότερες πληροφορίες για κάθε block. Στην πραγµατικότητα για κάθε block θα υπήρχαν βασικές πληροφορίες (όπως το block ID, η θέση του, κτλ), οι οποίες παραλείφθηκαν για να δοθεί η απαραίτητη έµφαση στην παρουσίαση της βασικής ιδέας της δεικτοδότησης ενός καταλόγου. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.5 Έστω ότι στο παράδειγµα που απεικονίζεται στο σχήµα 2.6 έχουµε 2000 εγγραφές και ότι είναι διατεταγµένες τέλεια (δηλαδή δεν υπάρχουν κενές εγγραφές ανάµεσά τους). Υπολογίστε το ποσοστό των blocks που αυξάνονται από τη χρήση των καταλόγων στις εξής περιπτώσεις: 1) Κάθε block (τόσο στο αρχείο όσο και στον κατάλογο) χωράει 20 εγγραφές και υλοποιούµε κατάλογο ενός επιπέδου. 2) Κάθε block (τόσο στο αρχείο όσο και στον κατάλογο) χωράει 10 εγγραφές και υλοποιούµε κατάλογο δύο επιπέδων. 3) Κάθε block (τόσο στο αρχείο όσο και στον κατάλογο) χωράει 10 εγγραφές και υλοποιούµε κατάλογο πολλαπλών επιπέδων µέχρι που το τελευταίο επίπεδο να χωράει σε ένα block. ¢Ú·ÛÙËÚÈfiÙËÙ· 2.5 Γράψτε σε ένα κοµµάτι χαρτί τις 54 πόλεις πρωτεύουσες νοµών της Ελλάδας διατεταγµένες αλφαβητικά. Υποθέσετε ότι το χαρτί είναι το αρχείο σας στο δίσκο. Χωρίστε τις σε blocks των 5 πόλεων (τραβήξτε µία γραµµή ανάµεσα τους) και δεικτοδοτήστε τις µε καταλόγους πολλαπλών επιπέδων. Αναγράψτε όλα τα ονόµατα των πόλεων στα blocks κάθε κατάλογου. 2 . 3 O ƒ °∞ ¡ ø ™ ∏ ∞ ƒ à ∂ π ø ¡ ™ ∆ √ º À ™ π ∫ √ ∂ ¶ π ¶ ∂ ¢ √ 59 2.3.4 ¢¤ÓÙÚ· Ù‡Ô˘ B Î·È ‰¤ÓÙÚ· Ù‡Ô˘ B+ Στην ενότητα 2.3.3 που προηγήθηκε µιλήσαµε για καταλόγους δεδοµένων και για δείκτες. Κατάλογοι δεδοµένων (ευρετήρια) µπορούν να δηµιουργηθούν µε τη χρήση γνωστών δοµών δεδοµένων, όπως είναι τα δέντρα τύπου Β (B–trees). Τα δέντρα τύπου Β χρησιµοποιούνται στις Βάσεις ∆εδοµένων σήµερα τόσο ως δέντρα αναζήτησης, όσο και ως πρωτεύουσες οργανώσεις αρχείων. Στην ενότητα αυτή θα περιγράψουµε σε πολύ αδρές γραµµές τα δέντρα τύπου Β και τα δέντρα τύπου Β+, τα οποία είναι και η συχνότερη µορφή υλοποίησης των δυναµικών ευρετηρίων πολλαπλών επιπέδων. Προτείνουµε, πάντως, να ανατρέξετε στην προτεινόµενη βιβλιογραφία για περισσότερες πληροφορίες για τα τύπου Β και τα δέντρα τύπου Β+. Όπως συζητήσαµε και στην ενότητα 2.3.3, ένα αρχείο µπορεί να δεικτοδοτηθεί και να δηµιουργηθεί κάποιος κατάλογος. Ένας τέτοιος κατάλογος µπορεί να έχει τη µορφή ενός δένδρου. Ας εξηγήσουµε τι εννοούµε: Ένα δένδρο είναι µία συλλογή από κόµβους συνδεδεµένους µεταξύ τους. Υπάρχει ένας ειδικός κόµβος που ονοµάζεται ρίζα του δένδρου και βρίσκεται στην κορυφή του δέντρου. Όλοι οι κόµβοι του δένδρου εκτός από τη ρίζα έχουν ένα γονέα και, (προαιρετικά), ένα ή περισσότερα παιδιά. Ένας κόµβος που δεν έχει παιδιά ονοµάζεται φύλλο. Κάθε κόµβος έχει ένα επίπεδο, το οποίο κατά σύµβαση είναι 0 για τη ρίζα και για κάθε άλλο κόµβο είναι το επίπεδο του γονέα του αυξηµένο κατά ένα. Τα δέντρα τύπου Β είναι δέντρα στα οποία ισχύει µία σειρά από περιορισµούς (τους οποίους δεν θα συζητήσουµε εδώ, αλλά συνιστούµε να τους διαβάσετε οπωσδήποτε στην προτεινόµενη βιβλιογραφία). Οι περιορισµοί αυτοί εξασφαλίζουν ότι τα δέντρα θα είναι πλήρη σε βαθµό τουλάχιστον 50% µετά από διαγραφές και ότι θα είναι ισοζυγισµένα. Για να γίνει αυτό, οι αλγόριθµοι εισαγωγής και διαγραφής είναι σχετικά πολύπλοκοι (αν και στις περισσότερες περιπτώσεις η εισαγωγή και η διαγραφή γίνεται µε απλό τρόπο) και, µερικές φορές, απαιτείται επανασχεδίαση του δένδρου. Στα δέντρα τύπου Β σε κάθε κόµβο (είτε είναι ρίζα, είτε εσωτερικός κόµβος, είτε φύλλο) αποθηκεύονται δείκτες προς τους κόµβους–παιδιά του κόµβου και δείκτες προς τα δεδοµένα. Ένα δέντρο τύπου Β αρχίζει να γεµίζει µε τη δηµιουργία ενός κόµβου που περιέχει δείκτες για δεδοµέ- 60 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ να. Μόλις αυτός ο κόµβος γεµίσει, τότε δηµιουργούνται δύο κόµβοι παιδιά του και αυτός ο κόµβος διατηρεί µόνο τη µεσαία τιµή (και, φυσικά, τους δείκτες για τα παιδιά). Οι υπόλοιπες τιµές µοιράζονται στα παιδιά. Αυτό συµβαίνει κάθε φορά που ο κάθε κόµβος γεµίζει, κ.ο.κ. Τα δέντρα τύπου Β+ είναι εξειδίκευση των δέντρων τύπου Β. Στα δέντρα τύπου Β+ υπάρχει ο επιπλέον περιορισµός ότι τα δεδοµένα (δείκτες προς τα blocks που περιέχουν δεδοµένα) αποθηκεύονται µόνο στα φύλλα του δέντρου και, συνήθως, τα φύλλα ενός δέντρου τύπου Β+ είναι συνδεδεµένα µεταξύ τους παρέχοντας µια ενιαία διατεταγµένη µορφή καταλόγου. Έτσι, όλοι οι κόµβοι που δεν είναι φύλλα περιέχουν δείκτες του ίδιου του δέντρου, αλλά όχι δείκτες σε δεδοµένα. Αυτό σηµαίνει ότι στους εσωτερικούς κόµβους µπορούν να αποθηκευτούν περισσότεροι δείκτες, άρα να µικρύνει πολύ το βάθος του δέντρου και ο χρόνος αναζήτησης. Υπάρχουν αλγόριθµοι που περιγράφουν την εισαγωγή και τη διαγραφή δεδοµένων από τα δέντρα τύπου Β και τα δέντρα τύπου Β+, τους οποίους µπορείτε να βρείτε στη βιβλιογραφία. Γενικά, τα δέντρα τύπου Β και τύπου Β+ περιγράφονται εκτενώς στη βιβλιογραφα, κάτι που δεν έγινε σε αυτό το βιβλίο, αφού θεωρήσαµε καλό να δώσουµε τις γενικές αρχές των δέντρων αυτών και να σας αφήσουµε να τα µελετήσετε σε βάθος από τη σχετική βιβλιογραφία. BA™EI™ ¢E¢OMENøN 61 ™‡ÓÔ„Ë Στο κεφάλαιο αυτό µιλήσαµε για την οργάνωση της Βάσης ∆εδοµένων στο φυσικό επίπεδο. Περιγράψαµε βασικά στοιχεία της αρχιτεκτονικής Βάσεων ∆εδοµένων και αναλύσαµε τον τρόπο µε τον οποίο οργανώνονται τα αρχεία στο φυσικό επίπεδο. Περιγράψαµε την οργάνωση των αρχείων ως συλλογή εγγραφών, που περιέχουν τιµές για τα πεδία και µελετήσαµε τρόπους για δεικτοδότηση αρχείων και δηµιουργία καταλόγων. Εάν θέλετε να επεκταθείτε σε θέµατα του φυσικού επιπέδου, όπως είναι ο κατακερµατισµός αρχείων (τεχνικές και αλγόριθµοι) και τα δέντρα τύπου Β που δεν καλύψαµε σε βάθος, σας συµβουλεύουµε να ανατρέξετε στη σχετική βιβλιογραφία που παραθέτουµε ακολούθως. BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ÌÂϤÙË [1] C.J.Date, An Introduction to Database Systems, Volume I, Fourth Edition, Addison–Wesley, 1986. Στο κεφάλαιο 2 αυτού του βιβλίου θα µπορέσετε να βρείτε βασικούς ορισµούς για την αρχιτεκτονική µίας Βάσης ∆εδοµένων. Επίσης στο κεφάλαιο 3 υπάρχει µια πολύ εµπεριστατωµένη παρουσίαση του φυσικού επιπέδου. [2] Elmasri R. & Navathe S. B., Fundamentals of Database Systems, Addison–Wesley, 1994. Το βιβλίο υπάρχει και σε Ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Στο κεφάλαιο 4 του βιβλίου θα µπορέσετε να βρείτε υλικό για επιπλέον µελέτη σχετικά µε το φυσικό επίπεδο. [3] Silberschatz A., Korth H., Sudarshan S, Database System Concepts, Third Edition, McGraw–Hill, 1986. Ένα πολύ καλό βιβλίο που προτείνουµε να το χρησιµοποιήσετε για µελέτη παράλληλα µε το µάθηµα. Στα κεφάλαια 10 και 11 καλύπτονται τα θέµατα της οργάνωσης αρχείων στο φυσικό επίπεδο του κατακερµατισµού και της δεικτοδότησης των αρχείων. [4] Ulman J. D., Principles of Database Systems, Computer Science Press, 1982. Είναι ένα από το πρώτα και βασικότερα βιβλία για Βάσεις ∆εδοµένων. Στο κεφάλαιο 2 µε τίτλο Physical Data Organization, µπορείτε να βρείτε ένα αναλυτικό τρόπο παρουσίασης της οργάνωσης στο φυσι- 62 K E º A § A I O 2 : A ƒ à π ∆ ∂ ∫ ∆ √ ¡ π ∫ ∏ ∫ ∞ π º À ™ π ∫ ∏ O ƒ °∞ ¡ ø ™ ∏ A ƒ à ∂ π ø ¡ κό επίπεδο και το κλασικό παράδειγµα µε τους δεινοσαύρους. Το βιβλίο επεκτείνεται πέρα από την ύλη που καλύπτουµε σε αυτό το µάθηµα και το προτείνουµε ανεπιφύλακτα για όσους θέλουν να µελετήσουν αυτό το «κάτι παραπάνω». [5] Papazoglou M. and Valder W., Relational Database Management, Prentice Hall, 1989. Eάν θέλετε, διαβάστε τα κεφάλαια 5 (File Management) και 6 (The Physical Database Implementation). Πάντως, επειδή το βιβλίο είναι γραµµένο από την πρακτική του σχεσιακού µοντέλου, ίσως είναι καλύτερα να µην το µελετήσετε τώρα, αλλά να το διαβάσετε µετά το επόµενο κεφάλαιο του µαθήµατος ως µία καλή επανάληψη στο φυσικό επίπεδο από τη σκοπιά του σχεσιακού µοντέλου. [6] Gio Wiederhold, File Organization for Database Design, Mc–Graw Hill, 1987. Ένα βιβλίο αφιερωµένο αποκλειστικά στην οργάνωση των αρχείων Βάσεων ∆εδοµένων στο φυσικό επίπεδο. Κατάλληλο για όσους θέλουν πραγµατικά να εµβαθύνουν στο φυσικό επίπεδο και στην οργάνωση αρχείων Βάσεων ∆εδοµένων. ∫ ∂ ªÔÓÙÂÏÔÔ›ËÛË Î·È £¤Ì·Ù· ™¯Â‰›·Û˘ ™ÎÔfi˜ Σκοπός του κεφαλαίου είναι να σας παρέχει µία σύντοµη περιγραφή δύο παλαιότερων µοντέλων δεδοµένων, του ιεραρχικού και του δικτυακού µοντέλου, παρουσιάζοντας τις βασικές αρχές και τη φιλοσοφία αυτών των µοντέλων, χωρίς να εµβαθύνουµε. Επίσης, σκοπός είναι η παρουσίαση ενός βασικού µοντέλου σχεδίασης Βάσεων ∆εδοµένων του µοντέλου σχέσεων – οντοτήτων. Θα περιγράψουµε τα ∆ιαγράµµατα Σχέσεων – Οντοτήτων και την εφαρµογή τους στις Βάσεις ∆εδοµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • εξηγήσετε τους βασικούς όρους του ιεραρχικού µοντέλου • περιγράψετε τις έννοιες «δέντρο», «ρίζα», «φύλλα», «σύνδεση», «σύνδεση γονιού µε παιδί» • διακρίνετε ανάµεσα σε ιεραρχικά δέντρα και σε δικτυακές δοµές • δώσετε παραδείγµατα ιεραρχικών δέντρων και παραδείγµατα δικτυακών δοµών δεδοµένων • περιγράψετε το ρόλο των εγγραφών στο ιεραρχικό και στο δικτυακό µοντέλο • προτείνετε µετατροπές σε δικτυακά µοντέλα δεδοµένων ώστε να προκύψουν ιεραρχικά µοντέλα δεδοµένων • περιγράψετε τις έννοιες «οντότητα», «σχέση», «κλειδί» και «κατηγόρηµα» που χαρακτηρίζουν ένα διάγραµµα σχέσεων – οντοτήτων • διακρίνετε το είδος κάθε σχέσης σε ένα διάγραµµα σχέσεων – οντοτήτων • σχεδιάσετε τα βασικά δοµικά στοιχεία ενός διαγράµµατος σχέσεων – οντοτήτων και να εξηγήσετε τι είναι το καθένα • εντοπίσετε τις οντότητες και τις σχέσεις από την περιγραφή ενός προβλήµατος του πραγµατικού κόσµου • σχεδιάσετε το διάγραµµα σχέσεων – οντοτήτων από την περιγραφή ενός προβλήµατος του πραγµατιού κόσµου • εντοπίσετε προβλήµατα και προτείνετε αλλαγές σε ένα διάγραµµα σχέσεων – οντοτήτων 3 º ∞ § ∞ π √ 64 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ ŒÓÓÔȘ ÎÏÂȉȿ • Ιεραρχικό Μοντέλο (Hierarchic Model) • ∆έντρο (Tree) • Παιδί (Child) • Γονιός (Parent) • Φύλλο (Leaf) • Σύνδεση (Link) • Οντότητα (Entity) • Ασθενής Οντότητα (Weak Entity) • Σχέση (Relation) • Κατηγόρηµα (Attribute) • Κλειδί (Key) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό περιγράφουµε µοντέλα δεδοµένων και εισάγουµε βασικές έννοιες σχεδίασης Βάσεων ∆εδοµένων παρουσιάζοντας τα διαγράµµατα σχέσεων – οντοτήτων. (Τα συγκεκριµένα διαγράµµατα αναφέρονται στη βιβλιογραφία και ως «διαγράµµατα οντοτήτων – συσχετίσεων» ή «διαγράµµατα οντοτήτων – συσχετισµών».) Υπάρχουν τέσσερα βασικά µοντέλα δεδοµένων: Το ιεραρχικό µοντέλο, το δικτυακό µοντέλο, το σχεσιακό µοντέλο και το αντικειµενοστραφές µοντέλο. Μερικές φορές χρησιµοποιούνται και «ανάµεικτα» µοντέλα δεδοµένων, τα οποία χρησιµοποιούν στοιχεία από όλα ή κάποια από τα παραπάνω µοντέλα. Σήµερα στις περισσότερες Βάσεις ∆εδοµένων κυριαρχεί το σχεσιακό µοντέλο, ενώ σταδιακά κερδίζει έδαφος το αντικειµενοστραφές µοντέλο. Τα δύο αυτά µοντέλα (λόγω της σηµασίας τους) θα τα καλύψουµε σε ξεχωριστά κεφάλαια. Σε αυτό το κεφάλαιο παρουσιάζουµε εν συντοµία τα δύο πρώτα µοντέλα. Στην ενότητα 3.1 παρουσιάζεται το ιεραρχικό µοντέλο και στην ενότητα 3.2 το δικτυακό µοντέλο. Τέλος, στην ενότητα 3.3 περιγράφονται τα διαγράµµατα σχέσεων – οντοτήτων. Τα διαγράµµατα σχέσεων – οντοτήτων παρουσιάζονται ως το βασικό εργαλείο για τη σχεδίαση Βάσεων ∆εδοµένων, που θα χρησιµοποιήσετε και στο αντίστοιχο εργαστηριακό µάθηµα. 3.1 ∆Ô ÈÂÚ·Ú¯ÈÎfi ÌÔÓÙ¤ÏÔ ™ÎÔfi˜ Σκοπός της ενότητας είναι να γίνει µία εισαγωγή στις έννοιες του ιεραρχικού µοντέλου. Η ενότητα αυτή παρουσιάζει συνοπτικά το ιεραρχικό µοντέλο και σας παραπέµπει σε βιβλιογραφία προαιρετικής ανάγνωσης για περαιτέρω εµβάθυνση στο συγκεκριµένο µοντέλο. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τους ορισµούς «δέντρο», «κόµβος», «παιδί», «γονιός», «ρίζα» και «φύλλο» • δώσετε τουλάχιστον τρία παραδείγµατα ιεραρχικών δέντρων • περιγράψετε τις προϋποθέσεις που πρέπει να πληροί ένα δέντρο για να µπορεί να χρησιµοποιηθεί σε ένα ιεραρχικό µοντέλο • εντοπίσετε τα φύλλα, τη ρίζα, τα παιδιά και τους γονιούς σε κάθε ιεραρχικό δέντρο ή στις εγγραφές που το αποτελούν ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή παρουσιάζεται εν συντοµία το ιεραρχικό µοντέλο. Για πιο εκτενή µελέτη του µοντέλου αυτού µπορείτε να ανατρέξετε στις βιβλιογραφικές πηγές που σας δίνουµε στο τέλος του κεφαλαίου. ∆√ ª√¡∆∂§√ Το ιεραρχικό µοντέλο είναι ένα σχετικά παλαιό µοντέλο. Τα πρώτα συστήµατα Βάσεων ∆εδοµένων που βασίστηκαν στο ιεραρχικό µοντέλο εκδόθηκαν στα τέλη της δεκαετίας του 1960 (όπως το IMS/360 της IBM). Η φιλοσοφία του ιεραρχικού µοντέλου είναι αυτή ακριβώς που υποδηλώνει το όνοµά του, δηλαδή η ιεράρχηση των δεδοµένων που ενσωµατώνονται στο σύστηµα. Ένα σύστηµα Βάσεων ∆εδοµένων βασισµένο στο ιεραρχικό µοντέλο αποτελείται από δέντρα. Κάθε δέντρο είναι µία σειρά από εγγραφές διαταγµένες µε συγκεκριµένο τρόπο, έτσι ώστε κάθε εγγραφή να έχει 66 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ ορισµένη θέση ιεραρχικά. Στο σχήµα 3.1 παρουσιάζεται ένα παράδειγµα δέντρου µε 6 κόµβους. Κάθε κόµβος συνδέεται µε µία σύνδεση µε άλλους κόµβους (έναν ή περισσότερους). Η ιεραρχία σε κάθε δέντρο καθορίζεται από τη σύνδεση Παιδί µε Γονιού. Γονέας ενός κόµβου είναι ο κόµβος που είναι ψηλότερα στην ιεραρχία από αυτόν και µε τον οποίο συνδέεται. Παιδί ενός κόµβου είναι ο συνδεδεµένος µε αυτόν κόµβος που βρίσκεται κατώτερα στην ιεραρχία. Ο κόµβος του δέντρου που βρίσκεται υψηλότερα από όλους στην ιεραρχία ονοµάζεται ρίζα, ενώ οι κόµβοι του δέντρου που βρίσκονται στο χαµηλότερο επίπεδο της ιεραρχίας ονοµάζονται φύλλα. Η ρίζα του δέντρου δεν έχει κανένα γονιό, ενώ τα φύλλα δεν έχουν κανένα παιδί. Έτσι, στο σχήµα 2.6 ρίζα του δέντρου είναι ο κόµβος 1. Ο κόµβος 1 έχει δύο παιδιά (τους κόµβους 2 και 3) και ο κόµβος 5 έχει γονιό τον κόµβο 2. Φύλλα του δέντρου είναι οι κόµβοι 4, 5 και 6. Kόµβος 1 Kόµβος 2 ™¯‹Ì· 3.1 Kόµβος 3 Παράδειγµα ∆έντρου Kόµβος 4 Kόµβος 5 Kόµβος 6 Το ιεραρχικό µοντέλο λοιπόν αποτελείται από ένα ή περισσότερα δέντρα. Αυτά τα δέντρα έχουν ως κόµβους εγγραφές. (Για τον ορισµό των εγγραφών ανατρέξτε στην ενότητα 2.2.2.) Άρα κάθε δέντρο είναι µία ιεραρχική διάταξη εγγραφών. Τα δέντρα που συµµετέχουν στο ιεραρχικό µοντλο έχουν δύο βασικές ιδιότητες: • Κάθε εγγραφή, εκτός από τη ρίζα του δέντρου, έχει ένα µόνο γονέα. • Τα παιδιά είναι διατεταγµένα. 3 . 1 ∆ √ π ∂ ƒ∞ ƒ à π ∫ √ ª √ ¡ ∆ ∂ § √ 67 106 Mετρήσεις Eργαστήριο 177 Bασιλείου Bοηθός 621 Nικολάου Eπιµελήτρια 777 Ξανθός Bοηθός 11 Mακρής Φοιτητής 411 Γεωργίου Eπιµελητής 13 Παπαδόπουλος Φοιτητής 35 Mακρή Φοιτήτρια 17 Pασσιά Φοιτήτρια 21 Aντωνίου Φοιτήτρια ™¯‹Ì· 3.2 24 Bασιλάκη Φοιτήτρια Ιεραρχικό ∆έντρων Εγγραφών Εάν πληρούνται οι παραπάνω προϋποθέσεις, τότε το δέντρο µπορεί να συµµετέχει στο µοντέλο. Ένα τέτοιο δέντρο θα το ονοµάζουµε ιεραρχικό δέντρο. Έτσι, το ιεραρχικό µοντέλο αποτελείται από ιεραρχικά δέντρα, τα οποία έχουν ως κόµβους τους εγγραφές µε τα δεδοµένα της Βάσης ∆εδοµένων. Στο σχήµα 3.2 παρουσιάζεται ένα ιεραρχικό δέντρο µε εγγραφές εκπαιδευτών και µαθητών για ένα εργαστήριο. (Για το εργαστήριο «µετρήσεις» που βρίσκεται στη ρίζα του δέντρου.) Προσέξτε ότι τα παιδιά κάθε γονιού πρέπει να είναι διατεταγµένα (για λόγους σύµβασης στο σχήµα εµφανίζονται από αριστερά προς τα δεξιά ή από πάνω προς τα κάτω). Στο σχήµα 3.2 δεν έχουν αναπαρασταθεί οι βασικές λεπτοµέρειες της δοµής (όπως παράδειγµα ο χώρος που καταλαµβάνουν οι δείκτες), αφού ο στόχος είναι να φανεί η θεωρητική οργάνωση των δεδοµένων στο ιεραρχικό µοντέλο. ∆εν θα επεκταθούµε περισσότερο στο ιεραρχικό µοντέλο. Ως µοντέλο χρησιµοποιείται σήµερα σε µερικά συστήµατα (όπως το MARS VI και το S–200), αλλά γενικά το µοντέλο που κυριάρχησε ως σήµερα είναι το σχεσιακό µοντέλο, ενώ το µοντέλο που αναµένεται να κυριαρχήσει µελλοντικά είναι το αντικειµενοστραφές. Για τα δύο αυτά µοντέλα θα αφιερώσουµε χωριστά κεφάλαια. 68 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.1 Μελετήστε το δέντρο του σχήµατος 3.2. Κάθε εγγραφή στο σχήµα έχει ένα κωδικό (στο αριστερό της µέρος) και θα αναφερόµαστε στην κάθε εγγραφή µε αυτό τον κωδικό. Απαντήστε στις παρακάτω ερωτήσεις: i. Ποια εγγραφή είναι η ρίζα του δέντρου; ii. Ποιες εγγραφές είναι τα φύλλα του δέντρου; iii. Η εγγραφή µε κωδικό 411 ποιες εγγραφές έχει ως παιδιά; iv. Η εγγραφή µε κωδικό 17 ποια εγγραφή έχει ως γονιό; v. Ποιες εγγραφές είναι τα παιδιά της εγγραφής µε κωδικό 621; ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.2 Ποιες από τις προτάσεις που ακολουθούν είναι σωστές και ποιες όχι όταν αναφερόµαστε στο δέντρο του σχήµατος 2.6; Σωστό Η εγγραφή µε κωδικό 177 είναι η ρίζα των εγγραφών µε κωδικούς 11, 13 και 17. Η εγγραφή µε κωδικό 177 είναι παιδί της εγγραφής µε κωδικό 106. Η εγγραφή µε κωδικό 411 είναι παιδί της εγγραφής µε κωδικό 621. Η εγγραφή µε κωδικό 621 είναι φύλλο. Η εγγραφή µε κωδικό 13 είναι γονιός της εγγραφής µε κωδικό 17. ❏ ❏ ❏ ❏ ❏ Λάθος ❏ ❏ ❏ ❏ ❏ ¢Ú·ÛÙËÚÈfiÙËÙ· 3.1 Σχεδιάστε το γενεαλογικό σας δέντρο χρησιµοποιώντας εγγραφές µε τα παρακάτω πεδία (κωδικός, επώνυµο, όνοµα). Προσπαθήστε να καταγράψετε τουλάχιστον τέσσερις γενεές. 1) Είναι το δέντρο που προέκυψε ιεραρχικό δέντρο; 2) Θα µπορούσε να εισαχθεί σε µία ιεραρχική Βάση ∆εδοµένων; 3) Τι αλλαγές πρέπει να γίνουν για να µπορεί να εισαχθεί σε µία ιεραρχική Βάση ∆εδοµένων; 3 . 2 ∆ √ ¢ π ∫ ∆ À∞ ∫ √ ª √ ¡ ∆ ∂ § √ 69 3.2 ∆Ô ‰ÈÎÙ˘·Îfi ÌÔÓÙ¤ÏÔ ™ÎÔfi˜ Σκοπός της ενότητας είναι να γίνει µία εισαγωγή στις έννοιες του δικτυακού µοντέλου. Η ενότητα αυτή παρουσιάζει συνοπτικά το δικτυακό µοντέλο και σας παραπέµπει σε βιβλιογραφία προαιρετικής ανάγνωσης για περαιτέρω εµβάθυνση στο συγκεκριµένο µοντέλο. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τη λογική των δικτύων και του δικτυακού µοντέλου • διακρίνετε διαφορές σε συνδεδεµένες εγγραφές του ιεραρχικού µε αυτές του δικτυακού µοντέλου • εντοπίσετε τις αλλαγές που πρέπει να γίνουν σε ένα δίκτυο εγγραφών για να µετατραπεί σε δέντρο του ιεραρχικού µοντέλου ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή παρουσιάζεται εν συντοµία το δικτυακό µοντέλο. Για πιο εκτενή µελέτη του µοντέλου αυτού µπορείτε να ανατρέξετε στις βιβλιογραφικές πηγές που σας δίνουµε στο τέλος του κεφαλαίου. Το δικτυακό µοντέλο είναι επίσης ένα σχετικά παλαιό µοντέλο. Τα πρώτα συστήµατα Βάσεων ∆εδοµένων που βασίστηκαν στο δικτυακό µοντέλο εκδόθηκαν στις αρχές της δεκαετίας του 1970, όπως το IDMS. Η φιλοσοφία του δικτυακού µοντέλου είναι αυτό ακριβώς που υποδηλώνει το όνοµά του, δηλαδή η σύνδεση των δεδοµένων ώστε να αποτελούν ένα δίκτυο. Στην προηγούµενη ενότητα µιλήσαµε για το ιεραρχικό µοντέλο. Το δικτυακό µοντέλο θα µπορούσε να αντιµετωπισθεί ως επέκταση του ιεραρχικού µοντέλου. Η ειδοποιός διαφορά είναι ότι στο δικτυακό µοντέλο δεν υπάρχει ο περιορισµός ότι κάθε εγγραφή πρέπει να έχει ένα µόνο γονιό. Έτσι κάθε εγγραφή θα µπορούσε να έχει κανένα, ένα ή περισσότερους γονιούς. Με αυτή τη λογική οι εγγραφές σε αυτό το µοντέλο διατάσσονται δηµιουργώντας ένα δίκτυο. Στο δικτυακό µοντέλο ουσιαστικά αναφερόµαστε σε δύο σύνολα. Ένα σύνολο που αποτελείται από εγγραφές και ένα σύνολο που αποτελείται 70 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ από συνδέσεις ανάµεσα στις εγγραφές. Οι συνδέσεις είναι διαταγµένες (δηλαδή σε κάθε σύνδεση υπάρχει πάλι ο γονέας και το παιδί όπως και στο ιεραρχικό µοντέλο). Έτσι, οι εγγραφές στο δικτυακό µοντέλο σχηµατίζουν ένα δίκτυο µε κατευθυνόµενες συνδέσεις ανάµεσά τους. Eγγραφή 1 Eγγραφή 2 Eγγραφή 3 Eγγραφή 4 Eγγραφή 5 ™¯‹Ì· 3.3 Παράδειγµα ∆ικτύου Eγγραφή 6 Eγγραφή 7 Eγγραφή 8 Βασικό πλεονέκτηµα του δικτυακού µοντέλου είναι ότι µε τη λογική του δικτύου µπορούν να ορισθούν πολύπλοκες και επαναλαµβανόµενες οµάδες δεδοµένων. Για παράδειγµα, σε µία Βάση ∆εδοµένων µε τα στοιχεία µίας οµάδας µπάσκετ θα µπορούσε να ορισθεί µια επαναλαµβανόµενη οµάδα «στατιστικά παίκτη» για κάθε εγγραφή «παίκτης» και για κάθε αγώνα και έτσι να τηρούνται τα στατιστικά κάθε παίκτη για κάθε αγώνα. Στο σχήµα 3.3 παρουσιάζεται ένα δίκτυο µε εγγραφές ως παράδειγµα ενός δικτυακού µοντέλου. ∆εν θα επεκταθούµε περισσότερο στο δικτυακό µοντέλο, αφού η αναφορά σε αυτό έγινε για ιστορικούς λόγους. Στη βιβλιογραφία, στο τέλος του κεφαλαίου, θα βρείτε αναφορές σε βιβλία µε τα οποία µπορείτε να εµβαθύνετε στο συγκεκριµένο µοντέλο. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.3 Μελετήστε το δίκτυο του σχήµατος 3.3. Θα µπορούσε να µετατραπεί σε δέντρο; Ακολούθως δίνουµε κάποιες συνδέσεις, οι οποίες εάν αφαιρεθούν το δίκτυο θα γίνει δέντρο. Οι συνδέσεις δίνονται µε τους αριθµούς των εγγραφών, δηλαδή η σύνδεση (1,2) σηµαίνει σύνδεση από την εγγραφή 1 στην εγγραφή 2 (δηλαδή η 1 είναι γονιός και η 2 παιδί). Επιλέξτε για ποια ή ποιες περιπτώσεις το δίκτυο έγινε δέντρο και εντοπίστε τη ρίζα του και τα φύλλα. (1,2) (5,3) (1,3) (8,1) (5,3) (8,1) 3 . 2 ∆ √ ¢ π ∫ ∆ À∞ ∫ √ ª √ ¡ ∆ ∂ § √ / 3 . 3 ¢ π ∞ ° ƒ ∞ ª ª ∞ ∆ ∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 71 Σχεδιάστε το γενεαλογικό σας δέντρο χρησιµοποιώντας εγγραφές µε τα παρακάτω πεδία (κωδικός, επώνυµο, όνοµα). Προσπαθήστε να καταγράετε τουλάχιστον τέσσερις γενεές, όπως στη δραστηριότητα 1 του κεφαλαίου. Aυτή τη φορά όµως σχεδιάστε το δίκτυο χωρίς τους περιορισµούς του ιεραρχικού µοντέλου. ¢Ú·ÛÙËÚÈfiÙËÙ· 3.2 3.3 ¢È·ÁÚ¿ÌÌ·Ù· Û¯¤ÛÂˆÓ – OÓÙÔÙ‹ÙˆÓ ™ÎÔfi˜ Σκοπός της ενότητας αυτής είναι η περιγραφή των διαγραµµάτων σχέσεων – οντοτήτων, η ανάλυση των δοµικών στοιχείων ενός διαγράµµατος σχέσεων – οντοτήτων και η εξήγηση των εννοιών που χρησιµοποιούνται σε αυτό. Βασικός σκοπός είναι, µετά τη µελέτη αυτού του κεφαλαίου, να είστε σε θέση να σχεδιάζετε διαγράµµατα σχέσεων – οντοτήτων και να τα χρησιµοποιείτε στις Βάσεις ∆εδοµένων που θα δηµιουργήσετε. Τα διαγραµµάτων σχέσεων – οντοτήτων είναι βασικά για τη σχεδίαση των Βάσεων δεδοµένων και θα τα χρησιµοποιήσουµε και στα παραδείγµατα του σχεσιακού µοντέλου που θα ακολουθήσουν. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τους ορισµούς των οντοτήτων, κατηγορηµάτων, κλειδιών και σχέσεων • περιγράψετε τις οντότητες και τις σχέσεις για κάθε πρόβληµα του πραγµατικού κόσµου, να εντοπίσετε τα κατηγορήµατα και να επιλέξετε τα κατάλληλα κλειδιά για κάθε οντότητα • εντοπίσετε τον τύπο κάθε σχέσης για κάθε πρόβληµα του πραγµατικού κόσµου και τις οντότητες που συµµετέχουν σε αυτή • περιγράψετε τους τύπων σχέσεων σε ένα διάγραµµα σχέσεων – οντοτήτων • σχεδιάστε τα δοµικά συστατικά ενός διαγράµµατος σχέσεων – οντοτήτων, να περιγράψετε τι είναι κάθε ένα από αυτά, καθώς και που χρησιµοποιούνται 72 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ • σχεδιάσετε το διάγραµµα σχέσεων – οντοτήτων για προβλήµατα του πραγµατικού κόσµου • εκλεπτύνετε ένα διάγραµµα σχέσεων – οντοτήτων • εντοπίσετε και διορθώσετε σχεδιαστικές ατέλειες • προτείνετε σχεδιαστικές λύσεις στη µοντελοποίηση µε διαγράµµατα σχέσεων – οντοτήτων για συγκεκριµένα προβλήµατα του πραγµατικού κόσµου ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα 3.3.1 παρουσιάζουµε τις βασικές έννοιες για τις οντότητες, τα κατηγορήµατα και τα κλειδιά. Στην ενότητα 3.3.2 αναλύουµε τις σχέσεις ανάµεσα σε οντότητες και τους τύπους σχέσεων. Στην ενότητα 3.3.3 περιγράφουµε τα δοµικά στοιχεία ενός διαγράµµατος σχέσεων – οντοτήτων, δηλαδή πώς σχεδιάζουµε ένα διάγραµµα σχέσεων – οντοτήτων. Τέλος στην ενότητα 3.3.4 αναφέρουµε τη µέθοδο µοντελοποίησης Βάσεων ∆εδοµένων χρησιµοποιώντας διαγράµµατα σχέσεων – οντοτήτων. 3.3.1 √ÓÙfiÙËÙ˜ Î·È Î·ÙËÁÔÚ‹Ì·Ù· I Οντότητα στο διάγραµµα σχέσεων – οντοτήτων είναι ένα στοιχείο του πραγµατικού περιβάλλοντος µε αυτόνοµη πραγµατική ή θεωρητική υπόσταση. Τα διαγράµµατα σχέσεων – οντοτήτων έχουν ως βασικό στοιχείο τους την οντότητα. Η οντότητα είναι η αναπαράσταση µιας αυτόνοµης ύπαρξης του πραγµατικού κόσµου (µε υλική υπόσταση) ή µια συµβατική ύπαρξη (µε θεωρητική υπόσταση). ∆ηλαδή οντότητα είναι ένας φοιτητής (δηλαδή ένας άνθρωπος µε όνοµα, επώνυµο, χαρακτηριστικά κτλ), αλλά και ένα µάθηµα που διδάσκεται σε µία σχολή (δηλαδή κάτι άυλο, αλλά µε συµβατική υπόσταση που έχει στοιχεία, όπως ώρες διδασκαλίας, αντικείµενο κτλ). Έτσι προκύπτει ο δίπλα ορισµός. I Τα δεδοµένα τα οποία θα αποθηκευτούν στις οντότητες του διαγράµµατος σχέσεων – οντοτήτων αντιστοιχούν σε εγγραφές στο φυσικό επίπεδο της Βάσης ∆εδοµένων. Έτσι, µία οντότητα έχει ένα όνοµα που τη χαρακτηρίζει και κάποια χαρακτηριστικά που την περιγράφουν. Τα χαρακτηριστικά αυτά ονοµάζονται κατηγορήµατα της οντότητας. ∆ίπλα, ο ορισµός. I Τα κατηγορήµατα περιγράφουν την κάθε οντότητα. Άρα, αναλύοντας αυτό που είπαµε λίγο πριν, τα δεδοµένα τα οποία θα αποθηκευτούν στις οντότητες του διαγράµµατος σχέσεων – οντοτήτων αντιστοιχούν I Κατηγορήµατα µίας οντότητας του διαγράµµατος σχέσεων – οντοτήτων είναι τα στοιχεία που καθορίζουν τα χαρακτηριστικά της συγκεκριµένης οντότητας. 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 73 σε εγγραφές στο φυσικό επίπεδο της Βάσης ∆εδοµένων και ειδικότερα τα κατηγορήµατα για κάθε οντότητα αντιστοιχούν µε τις τιµές για τα πεδία κάθε εγγραφής. Ας δούµε το παράδειγµα που ακολουθεί. ¶·Ú¿‰ÂÈÁÌ· 3.1 Στο παράδειγµα αυτό εξετάζουµε ένα πρωτάθληµα καλαθοσφαίρισης (µπάσκετ). Το πρωτάθληµα αποτελείται από οµάδες στις οποίες συµµετέχουν παίκτες. Για τις ανάγκες του πρωταθλήµατος γίνονται αγώνες ανάµεσα σε οµάδες και κάθε αγώνας τελειώνει µε κάποιο συγκεκριµένο αποτέλεσµα. Για λόγους απλότητας θεωρούµε ότι τα στοιχεία που χαρακτηρίζουν κάθε οµάδα είναι η ονοµασία της, το όνοµα του ιδιοκτήτη της, το όνοµα του χορηγού της, το έτος που ιδρύθηκε και η πλη στην οποία εδρεύει. Επίσης κάθε παίκτης χαρακτηρίζεται από το όνοµά του, το επώνυµό του, το πατρώνυµό του, τον αριθµό µητρώου του στην οµοσπονδία καλαθοσφαίρισης, το ύψος του, την ηµεροµηνία γέννησης του και την πόλη καταγωγής του. Τέλος, πάλι για λόγους απλότητας ένας αγώνας χαρακτηρίζεται µόνο από τις οµάδες που συµµετείχαν, το γήπεδο στο οποίο έγινε, την ηµεροµηνία διεξαγωγής του και το τελικό σκορ. Με όσα γνωρίζετε µέχρι τώρα για τα διαγράµµατα σχέσεων – οντοτήτων θα µπορούσατε να εντοπίσετε τρεις οντότητες στο παράδειγµα 3.1: • Οµάδα • Παίκτης • Αγώνας Τα κατηγορήµατα για κάθε οντότητα είναι τα εξής: • Για την οντότητα «Οµάδα»: ονοµασία, όνοµα ιδιοκτήτη, όνοµα σπόνσορα, έτος ίδρυσης, έδρα. • Για την οντότητα «Παίκτης»: όνοµα, επώνυµο, πατρώνυµο, αριθµός µητρώου, ύψος, ηµεροµηνία γέννησης, καταγωγή. • Για την οντότητα «Αγώνας»: γηπεδούχος οµάδα, φιλοξενούµενη οµάδα, γήπεδο διεξαγωγής, ηµεροµηνία, σκορ γηπεδούχου, σκορ φιλοξενούµενης. Με τον παραπάνω τρόπο έχουµε περιγράψει τη Βάση ∆εδοµένων που 74 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ θα χρησιµοποιήσουµε για να συγκεντρώσουµε τα δεδοµένα του παραδείγµατος 3.1, χρησιµοποιώντας ένα υψηλότερο επίπεδο αφαίρεσης. Κάθε οντότητα περιγράφει µία συγκεκριµένη κατηγορία εγγραφών τις οποίες µπορούµε να τις οµαδοποιήσουµε. Έτσι, όταν θα αναφερόµαστε σε εγγραφές που εντάσσονται στην οντότητα «Οµάδα» θα γνωρίζουµε ότι πρέπει να έχουν πεδία που αντιστοιχούν στα κατηγορήµατα που περιγράψαµε παραπάνω. Παραδείγµατα τεσσάρων εγγραφών οµάδων είναι τα ακόλουθα: 1. («Ατρόµητος», «Νικολάου», «Ψητοπωλείο η Ωραία Πάτρα», «1918», «Πάτρα») 2. («Ανίκητος», «Βασιλείου», «Κλειδαράς ο Μήτσος», «1934», «Αχαγιά») 3. («Κεραυνός Κάτω Πλαγιάς», «Χατζηγιάννης», «Ουζερί ο Μεζές», «1964», «Κάτω Πλαγιά») 4. («Κεραυνός Άνω Πλαγιάς», «Νικολαΐδης», « », «1971», « Άνω Πλαγιά») Προσέξτε τη διαφορά ανάµεσα στην οντότητα του διαγράµµατος σχέσεων – οντοτήτων και στην εγγραφή στο φυσικό επίπεδο. Η οντότητα είναι µία αφηρηµένη (υψηλού επιπέδου) αναπαράσταση της έννοιας «οµάδα», ενώ εγγραφές από οµάδες είναι δεδοµένα οµάδων από το περιβάλλον του πραγµατικού κόσµου. Ορίσαµε τα κατηγορήµατα που περιγράφουν τα χαρακτηριστικά κάθε οντότητας. Για να µπορούµε όµως να κάνουµε ααφορές σε εγγραφές που αντιστοιχούν σε οντότητες πρέπει να υπάρχει ένας τρόπος να εντοπίζουµε µία εγγραφή ανάµεσα στις άλλες (να τη διακρίνουµε δηλαδή από τις άλλες). Ας δούµε το παράδειγµα των παικτών. Εάν πούµε ο παίκτης «Νικολάου» είναι επαρκές για να καταλάβουµε για ποιον παίκτη αναφερόµαστε; Θα µπορούσε να είναι, αλλά κατά κανόνα είναι πολύ πιθανό να υπάρχουν δύο παίκτες µε το ίδιο επώνυµο στο πρωτάθληµα. Αντίθετα, ο αριθµός µητρώου καλαθοσφαιριστή είναι µοναδικός για κάθε καλαθοσφαιριστή (γιατί έτσι επιβάλλει η οµοσπονδία καλαθοσφαίρισης). Μπορούµε λοιπόν να πούµε ότι το κατηγόρηµα «αριθµός µητρώου καλαθοσφαιριστή» είναι µοναδικό για κάθε καλαθοσφαιριστή. Αυτό το κατηγόρηµα µπορεί να αποτελέσει το κλειδί για την οντότητα «παίκτης». Ακολουθεί ο ορισµός. I Όπως φαίνεται και από τον ορισµό, κλειδί µπορεί να είναι και ένα σύνο- I Κλειδί για µία οντότητα του διαγράµµατος σχέσεων – οντοτήτων είναι το σύνολο των κατηγορηµάτων της οντότητας τα οποία είναι µοναδικά για κάθε εγγραφή και τη διακρίνουν πλήρως από τις άλλες. 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 75 λο από κατηγορήµατα αντί για ένα µόνο κατηγόρηµα. Ας υποθέσουµε ότι στο παράδειγµα 3.1 µπορούσαν να υπάρχουν οµάδες µε το ίδιο όνοµα, αλλά όχι και από την ίδια πόλη. Έτσι το όνοµα της οµάδας και η πόλη θα µπορούσαν να αποτελούν το κλειδί για την οντότητα «Οµάδα». Θεωρητικά µπορούν να υπάρχουν πολλά σύνολα που είναι δυνατόν να αποτελέσουν το κλειδί για µία οντότητα. Για παράδειγµα, στην οντότητα «Παίκτης» κλειδί θα µπορούσε να είναι ο «αριθµός µητρώου καλαθοσφαιριστή», αλλά θα µπορούσε και να είναι το σύνολο των κατηγορηµάτων («Όνοµα», «Επώνυµο», «Πατρώνυµο», «Ηµεροµηνία Γέννησης»). Το σύνολο αυτό όµως έχει δύο µειονεκτήµατα: α) Προϋποθέτει ότι δεν θα υπάρχουν δύο παίκτες µε το ίδιο ακριβώς όνοµα, επώνυµο και όνοµα πατέρα που να έχουν γεννηθεί την ίδια ηµέρα και β) χρησιµοποιεί τέσσερα κατηγορήµατα αντί για ένα. Η πρώτη υπόθεση είναι απόλυτα λογική, αν και θα µπορούσε να συµβεί (άσχετα µε το πόσο απίθανη είναι). Παρόλα αυτά ως κλειδί για µία οντότητα είναι καλύτερο να χρησιµοποιείται το απλούστερο δυνατό σύνολο κατηγορηµάτων. Έτσι η επιλογή του κατηγορήµατος «αριθµός µητρώου καλαθοσφαιριστή» είναι η καλύτερη επιλογή. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.4 ∆ίνονται οι παρακάτω προτάσεις. Συµπληρώστε τα κενά επιλέγοντας από τις λέξεις που δίδονται στο τέλος κάθε πρότασης. Οντότητα στο διάγραµµα σχέσεων – οντοτήτων είναι ένα ……… ………… του πραγµατικού …………………. µε ……………….. πραγµατική ή θεωρητική …………………….. (δεδοµένο, στοιχείο, σύνολο, συνόλου, περιβάλλοντος, µοναδική, αυτόνοµη, συνολική, οντότητα, υπόσταση, εξουσία). Κατηγορήµατα µίας ……………………. του διαγράµµατος σχέσεων – οντοτήτων είναι τα στοιχεία που καθορίζουν τα ………………. της συγκεκριµένης …………………. (ύπαρξη, οντότητα, περιγραφή, χαρακτηριστικά, δεδοµένα, σύνολα, ύπαρξης, οντότητας, περιγραφής). Κλειδί για µία …………………. του διαγράµµατος σχέσεων – οντοτήτων είναι το σύνολο των ………………… της ……………….. τα οποία είναι µοναδικά για κάθε …………………. και τη διακρίνουν 76 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ πλήρως από τις άλλες. (οντότητας, κατηγορίας, περίπτωσης, δεδοµένων, εγγραφών, κατηγορηµάτων, οντότητας, κατηγορίας, περίπτωσης, εγγραφή, οντότητα, σχέση). ¢Ú·ÛÙËÚÈfiÙËÙ· 3.3 Εντοπίστε τις πιθανές οντότητες στο παράδειγµα 1.1 του κεφαλαίου 1 και τα πιθανά κατηγορήµατα. Εντοπίστε τέλος και τα πιθανά κλειδιά για κάθε οντότητα. Περιγράψτε τους περιορισµούς που θεωρείτε ότι ισχύουν για να επιλέξετε αυτά τα κλειδιά. 3.3.2 ™¯¤ÛÂȘ ÔÓÙÔÙ‹ÙˆÓ Στην προηγούµενη ενότητα µιλήσαµε για οντότητες σε ένα διάγραµµα σχέσεων – οντοτήτων. Όπως ορίζει και το όνοµά του, το διάγραµµα σχέσεων – οντοτήτων περιγράφει σχέσεις ανάµεσα σε οντότητες. Θυµηθείτε το παράδειγµα 3.1. Εκεί µιλήσαµε για τρεις οντότητες (Οµάδα, Παίκτης, Αγώνας). Θεωρητικά αυτό το σχήµα θα µπορούσε να είναι ένα σωστό διάγραµµα σχέσεων – οντοτήτων, αλλά ίσως όχι το καλύτερο δυνατό. Ο αγώνας είναι στην πραγµατικότητα µία σχέση ανάµεσα σε δύο οµάδες. Αλλά ας αφήσουµε προς το παρόν τον αγώνα και ας δούµε τους παίκτες και τις οµάδες. Είναι φανερό ότι υπάρχει µία σχέση ανάµεσα σε οµάδες και παίκτες. Κάθε οµάδα αποτελείται από κάποιους παίκτες της. Άρα οι οντότητες µπορούν να έχουν σχέσεις µεταξύ τους, σχέσεις που είναι ουσιαστικές για τη Βάση ∆εδοµένων. Για παράδειγµα η ερώτηση «σε ποια οµάδα παίζει ο Τάδε παίκτης;» είναι µια πολύ φυσιολογική ερώτηση στη Βάση ∆εδοµένων του παραδείγµατος 3.1. Η ερώτησ αυτή δεν αφορά κάποια συγκεκριµένη οντότητα, αλλά τη σχέση δύο οντοτήτων (της οντότητας παίκτης µε την οντότητα οµάδα). Ακολουθεί ο ορισµός. I Προσέξτε ότι στον ορισµό δεν αναφέραµε σχέση ανάµεσα σε δύο οντότητες, αλλά ανάµεσα σε οντότητες. Σε µία σχέση λοιπόν µπορούν να συµµετέχουν περισσότερες των δύο οντοτήτων. I Επίσης µία σχέση µπορεί να έχει κατηγορήµατα που προσδιορίζουν τη σχέση, ακριβώς όπως έχουν και οι οντότητες. I Η σχέση ανάµεσα σε οντότητες καθορίζει ένα σύνολο από συσχετισµούς ανάµεσα σε εγγραφές των οντοτήτων αυτών. I Βαθµός µιας σχέσης ονοµάζεται ο αριθµός των οντοτήτων που συµµετέχουν στη σχέση. 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 77 Ας επιστρέψουµε στο παράδειγµα 3.1. Αρχικά είχαµε µιλήσει για τρεις οντότητες. Μήπως θα µπορούσαν να γίνουν δύο οντότητες και η οντότητα «Αγώνας» να θεωρηθεί σχέση; Φυσικά και θα µπορούσαν και αυτή η λύση είναι καλύτερη σχεδιαστικά. Ας µελετήσουµε λίγο τη σχέση «Αγώνας». Θα πρέπει να έχει κατηγορήµατα τα κατηγορήµατα που προσδιορίζουν τη σχέση, δηλαδή τα «γήπεδο διεξαγωγής», «ηµεροµηνία», «σκορ γηπεδούχου», «σκορ φιλοξενούµενης». Παρατηρήσατε ότι δεν αναγράψαµε ως κατηγορήµατα τα «γηπεδούχος οµάδα» και «φιλοξενούµενη οµάδα» που είχαµε αναφέρει στην οντότητα «Αγώνας». Αυτό έγινε, γιατί τα στοιχεία για τις οµάδες θα µπορέσουν να αντληθούν από την οντότητα «Οµάδα». Πώς όµως θα µεταφερθεί η σχέση «Αγώνας» στο φυσικό επίπεδο; Φυσικά θα είναι πάλι µία εγγραφή που θα έχει ως πεδία τα κατηγορήµατα που αναφέραµε παραπάνω. Επειδή όµως πρέπει να έχει και τρόπο να αναφέρεται και στις οµάδες θα χρησιµοποιεί επίσης ως πεδία τα κατηγορήµατα που χαρακτηρίζουν απόλυτα τις οµάδες, δηλαδή τα κλειδιά. Έτσι µία εγγραφή για ένα αγώνα θα είχε ως πεδία τα εξής: «κωδικός γηπεδούχου οµάδας», «κωδικός φιλοξενούµενης οµάδας», «γήπεδο διεξαγωγής», «ηµεροµηνία», «σκορ γηπεδούχου», «σκορ φιλοξενούµενης». Προσέξτε ότι θεωρήσαµε ότι η οντότητα «Οµάδα» έχει ένα κατηγόρηµα κλειδί, το οποίο ονοµάσαµε «κωδικό». Αυτό είναι κάτι σύνηθες στις Βάσεις ∆εδοµένων, δηλαδή να ορίζουµε έναν κωδικό για κλειδί, όπου δεν µπορούµε να έχουµε µοναδικά κλειδιά. (Θυµηθείτε ότι το όνοµα της οµάδας δεν αρκούσε για κλειδί.) ∫∞∆∏°√ƒπ∂™ ™Ã∂™∂ø¡ Μέχρι αυτό το σηµείο µιλήσαµε για σχέσεις στις οποίες συµµετέχουν οντότητες χωρίς να αναλύσουµε το είδος κάθε σχέσης ως προς τις εγγραφές που συµµετέχουν από κάθε οντότητα σε µία σχέση. Οι σχέσεις διακρίνονται στις παρακάτω κατηγορίες: Σχέσεις 1 προς 1 Σχέσεις ISA Σχέσεις 1 προς Ν Σχέσεις Ν προς M 78 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ Μερικά βιβλία δεν αναφέρουν καθόλου τη σχέση ISA, την οποία θεωρούν ως µία εξειδικευµένη 1 προς 1 σχέση. Ας δούµε τι σηµαίνει καθένας από τους παραπάνω ορισµούς σχέσεων. Για λόγους απλότητας θα µιλήσουµε για σχέσεις στις οποίες συµµετέχουν δύο µόνο οντότητες, αν και ό,τι περιγράφουµε ανάγεται και για περισσότερες οντότητες. Η σχέση 1 προς 1 σηµαίνει ότι οι οντότητες που συµµετέχουν στη σχέση είναι σε αναλογία µία προς µία, δηλαδή ότι «κάθε εγγραφή της πρώτης οντότητας σχετίζεται µε µία εγγραφή της δεύτερης οντότητας και το αντίστροφο». Η σχέση ISA είναι µία ειδική σχέση 1 προς 1 που χρησιµοποιείται για να επεξηγήσει καλύτερα µία σχέση. Σηµαίνει ότι «κάθε εγγραφή της πρώτης οντότητας σχετίζεται µε µία εγγραφή της δεύτερης οντότητας και το αντίστροφο, αλλά και η εγγραφή της πρώτης οντότητας είναι µέλος της δεύτερης οντότητας, άρα έχει τα χαρακτηριστικά των εγγραφών της δεύτερης οντότητας». Ας δούµε ένα παράδειγµα από κάθε περίπτωση για να είµαστε περισσότερο κατανοητοί. Έχουµε εργαζόµενους σε µία επιχείρηση και ο καθένας έχει τον δικό του προσωπικό υπολογιστή τον οποίο δεν το χρησιµοποιεί κανένας άλλος. Αν λοιπόν θέλαµε να ορίσουµε τη σχέση «Εργαζόµενος» µε «Υπολογιστή», έστω η σχέση «χρεώνεται» (που σηµαίνει ο εργαζόµενος Ε χρεώνεται τον υπολογιστή Υ), αυτή η σχέση θα ήταν σχέση 1 προς 1. ∆ηλαδή κάθε εργαζόµενος θα είχε µόνο έναν υπολογιστή χρεωµένο σε αυτόν και κάθε υπολογιστής θα είχε µόνο ένα εργαζόµενο στον οποίο θα είχε χρεωθεί. Ας υποθέσουµε τώρα ότι υπάρχει µία ειδική κατηγορία εργαζοµένων οι «Τεχνικοί». Κάθε τεχνικός είναι εργαζόµενος, άρα έχει όλα τα χαρακτηριστικά του εργαζόµενου, αλλά έχει και µερικά επιπλέον κατηγορήµατα, τα οποία δεν έχει κάθε εργαζόµενος. Έτσι για τον τεχνικό θα οριζόταν µία νέα οντότητα, η οποία θα ήταν σε σχέση ISA µε την οντότητα «Εργαζόµενος». Αυτό σηµαίνει ότι ο «Τεχνικός» έχει ως οντότητα µόνο τα ειδικά κατηγορήµατα, αλλά µέσω της σχέσης ISA ορίζεται ως εργαζόµενος και χρησιµοποιεί όλα τα κατηγορήµατα του εργαζόµενου. Η σχέση 1 προς Ν σηµαίνει ότι «κάθε εγγραφή της πρώτης οντότητας σχετίζεται µε πολλές εγγραφές της δεύτερης οντότητας, αλλά κάθε εγγραφή της δεύτερης οντότητας σχετίζεται µόνο µε µία εγγραφή της πρώτης οντότητας». 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 79 Ας υποθέσουµε ότι στο προηγούµενο παράδειγµα ένα εργαζόµενος µπορούσε να χρεωθεί περισσότερους του ενός υπολογιστές, αλλά δεν είχε νόηµα να χρεωθεί ένας υπολογιστής σε δύο ή περισσότερους εργαζόµενους. Τότε η σχέση «χρεώνεται» θα ήταν σχέση 1 προς Ν, δηλαδή 1 εργαζόµενος χρεώνεται Ν υπολογιστές. Προσέξτε ότι η σχέση θα µπορούσε να αναφέρετε και σαν σχέση Ν προς 1 ανάλογα µε την οντότητα που αναφέρουµε πρώτη στη σχέση. Τέλος, η σχέση Ν προς M σηµαίνει ότι «κάθε εγγραφή κάθε οντότητας σχετίζεται µε πολλές εγγραφές της άλλης οντότητας». Πάλι στο παραπάνω παράδειγµα εάν µιλούσαµε για ένα ανοικτό εργαστήριο στο οποίο κανένας εργαζόµενος δεν έχει τον αυστηρά προσωπικό του υπολογιστή θα µπορούσαµε να ορίσουµε τη σχέση «χρησιµοποιεί». Σε αυτή τη σχέση µία εγγραφή ενός εργαζόµενου θα µπορούσε να εµφανιστεί πολλές φορές (χρησιµοποίησε πολλούς διαφορετικούς υπολογιστές), αλλά και ένας υπολογιστής το ίδιο (τον χρησιµοποίησαν πολλοί εργαζόµενοι). Είναι λοιπόν σχέση Ν προς M. Ποιες από τις προτάσεις που ακολουθούν είναι σωστές και ποιες όχι; Επιλέξτε «Σωστό» ή «Λάθος» ανάλογα µε την περίπτωση. Σωστό Οι σχέσεις δεν αναπαριστώνται στο φυσικό επίπεδο. Στο φυσικό επίπεδο µε εγγραφές αντιστοιχούν µόνο οντότητες. Κάθε σχέση στην οποία µετέχουν δύο οντότητες θα έχει βαθµό 2. Κάθε σχέση ISA είναι και σχέση 1 προς 1. Μία σχέση είναι Ν προς M εάν µία εγγραφή από µία οντότητα συµµετέχει δύο ή περισσότερες φορές στη σχέση. Κάθε σχέση Ν προς M έχει βαθµό Ν. Λάθος ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 3.5 ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ 80 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ ¢Ú·ÛÙËÚÈfiÙËÙ· 3.4 Περιγράψτε τις σχέσεις και τις οντότητες για το παράδειγµα 3.1 µετά τις εξηγήσεις που δώσαµε στην ενότητα 3.3.2. Περιγράψτε τι σχέση είναι κάθε σχέση ανάµεσα στις οντότητες και δώστε τουλάχιστον πέντε (5) παραδείγµατα εγγραφών για κάθε σχέση και κάθε οντότητα. ¢Ú·ÛÙËÚÈfiÙËÙ· 3.5 Περιγράψτε τις σχέσεις και τις οντότητες για το παράδειγµα 1.1 του κεφαλαίου 1. Επεκτείνετε το παράδειγµα ορίζοντας τουλάχιστον µία ακόµα οντότητα, αυτή της «µέτρησης», και την αντίστοιχη σχέση µε τις πόλεις. Περιγράψτε τι σχέση είναι κάθε σχέση ανάµεσα στις οντότητες και δώστε τουλάχιστον τρία παραδείγµατα εγγραφών για κάθε σχέση και κάθε οντότητα. Kατηγόρηµα 3.3.3 ¢ÔÌÈο ÛÙÔȯ›· ÙˆÓ ‰È·ÁÚ·ÌÌ¿ÙˆÓ Kατηγόρηµα Oντότητα Kλειδί Μέχρι αυτό το σηµείο του κεφαλαίου παρουσιάσαµε τη βασική θεωρία που σχετίζεται µε τα διαγράµµατα σχέσεων – οντοτήτων. Tα διαγράµµατα σχέσεων–οντοτήτων είναι διαγράµµατα ακριβώς γιατί όσα συζητήσαµε στις δύο προηγούµενες ενότητες αναπαριστάνονται καλύτερα µε γραφικό τρόπο (ως διάγραµµα). Η ιδέα των διαγραµµάτων σχέσεων – οντοτήτων είναι να µπορούµε να έχουµε µία εποπτική εικόνα της Βάσης ∆εδοµένων βλέποντας ένα σχέδιο που την περιγράφει. Το σχεδιαστικό µοντέλο που βασίζεται στα διαγράµµατα σχέσεων – οντοτήτων παρέχει τη δυνατότητα σχεδίασης των οντοτήτων και των σχέσεων µε εύκολο τρόπο, µε βάση τους συµβολισµούς που θα αναλύσουµε σε αυτή την ενότητα. Στο σχήµα 3.4 παρουσιάζεται το σχέδιο µίας οντότητας. Οι οντότητες στο διάγραµµα σχέσεων – οντοτήτων αναπαριστάνονται µε παραλληλόγραµµα και τα κατηγορήµατα µίας οντότητας µε ελλείψεις. Το όνοµα της οντότητας αναγράφεται µέσα στο παραλληλόγραµµο, ενώ τα ονόµατα των κατηγορηµάτων αναγράφονται µέσα στις ελλείψεις. Το κατηγόρηµα ή τα κατηγορήµατα που είναι κλειδιά υπογραµµίζονται. Έτσι στο σχήµα 3.4 βλέπουµε µία οντότητα µε τρία κατηγορήµατα ένα από τα οποία είναι το κλειδί. Ένας εναλλακτικός τρόπος παρουσίασης ™¯‹Ì· 3.4 Οντότητα 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 81 B1 Σ1 A1 A A2 1 Σ N B B3 B2 ™¯‹Ì· 3.5 Σχέση 1 προς Ν που χρησιµοποιείται κυρίως για περιπτώσεις όπου έχουµε οντότητες µε πολλά κατηγορήµατα είναι να αναγράφονται τα κατηγορήµατα για κάθε οντότητα σε µία µόνο έλλειψη το ένα κάτω από το άλλο. Έτσι δεν γεµίζει ο χώρος µε ελλείψεις. Στο σχήµα 3.5 παρουσιάζεται µία σχέση 1 προς Ν ανάµεσα σε δύο οντότητες την οντότητα Α και την οντότητα Β. Οι σχέσεις παρουσιάζονται µε ένα ρόµβο, µέσα στον οποίο αναγράφεται το όνοµα της σχέσης. Στην περίπτωση που η σχέση είναι ISA, τότε µέσα στο ρόµβο αναγράφεται «ISA». Παρατηρήστε στο σχήµα ότι η οντότητα Α έχει δύο κατηγορήµατα και ένα από αυτά είναι το κλειδί (το κατηγόρηµα Α1), ενώ η οντότητα Β έχει για κλειδί το σύνολο των κατηγορηµάτων Β1 και Β2. Η σχέση ονοµάζεται Σ και έχει ένα κατηγόρηµα (το Σ1). Είναι 1 προς Ν από την οντότητα Α προς την οντότητα Β γεγονός που σηµαίνει ότι µία εγγραφή της οντότητας Α µπορεί να έχει πολλές εγγραφές της οντότητας Β, αλλά κάθε εγγραφή της οντότητας Β µετέχει µόνο σε µία εγγραφή της οντότητας Α. Με τον ίδιο τρόπο µπορούν να σχεδιασθούν και οι υπόλοιπες σχέσεις 1 προς 1, ISA και Ν προς M. ∞™£∂¡∂π™ √¡∆√∆∏∆∂™ ∫∞π ™Ã∂™∏ d Εκτός από τις οντότητες που περιγράψαµε στην ενότητα 3.3.2 υπάρχουν και κάποιες οντότητες που ονοµάζονται ασθενείς οντότητες. Αυτές οι οντότητες δεν έχουν κατηγορήµατα κλειδιά δικά τους και προσδιορίζονται από µία άλλη οντότητα. Οι ασθενείς οντότητες παρουσιάζονται στο διάγραµµα σχέσεων – οντοτήτων µε παραλληλόγραµµα µε διπλό πλαίσιο και οι αντίστοιχες σχέσεις (σχέση µε την οντότητα που τις χαρακτηρίζει) ως ρόµβος µε διπλό επίσης πλαίσιο. Η σχέση d (το d προκύπτει από το discover που σηµαίνει ανακαλύπτω) είναι µια σχέση που χρησιµοποιείται για να περιγραφεί αναλυτι- 82 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ κά µία οντότητα από κάποιες άλλες. Έστω για παράδειγµα ότι πρέπει να περιγράψουµε τους υπαλλήλους σε µία επιχείρηση, οι οποίοι µπορεί να είναι είτε διοικητικοί υπάλληλοι, είτε τεχνικοί, είτε βοηθητικό προσωπικό. Όλοι αυτοί έχουν κοινά στοιχεία, αλλά και αρκετά στοιχεία είναι διαφορετικά για κάθε κατηγορία. Τότε χρησιµοποιείται η σχέση d για να δείξει ότι και οι τρεις κατηγορίες υπαλλήλων είναι «υπάλληλοι». Μία σχέση d δηλαδή αντιστοιχεί δηλαδή σε πολλές σχέσεις ISA (στο συγκεκριµένο παράδειγµα µε τρεις σχέσεις ISA). A2 A1 B3 ™¯‹Ì· 3.6 A Ασθενής Οντότητα Σ B Στο σχήµα 3.6 παρουσιάζεται µία ασθενής οντότητα Β, η οποία χαρακτηρίζεται από την οντότητα Α µε σχέση Σ. Επίσης στο σχήµα 3.7 παρουσιάζεται µία σχέση d που ανακαλύπτει την οντότητα Α και την επεξηγεί στις οντότητες Β, Γ, ∆ και Ε. Οι οντότητες δηλαδή Β, Γ, ∆ και Ε είναι ISA στην Α. B1 A2 A1 B Γ1 A d Γ ∆1 ∆ E1 ™¯‹Ì· 3.7 E E2 Σχέση d Το βασικό είναι να γνωρίζετε τα δοµικά στοιχεία του σχεδίου και τι αναπαριστά καθένα από αυτά. Μετά, η µεταφορά ενός µοντέλου Βάσης ∆εδοµένων στο χαρτί µε τη χρήση του διαγράµατος σχέσεων – οντοτήτων είναι σχετικά εύκολη υπόθεση. Φυσικά χρειάζεστε εξάσκηση και σε αυτό µπορούν να σας βοηθήσουν οι δύο δραστηριότητες που ακο- 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 83 λουθούν. Αφιερώστε λίγο χρόνο για να αναζητήσετε στη βιβλιογραφία αντίστοιχα παραδείγµατα από διαγράµµατα σχέσεων – οντοτήτων και µελετήστε τα σχήµατα που εµφανίζονται. Προσπαθήστε είτε να εντοπίσετε το περιβάλλον του πραγµατικού κόσµου µελετώντας το διάγραµµα σχέσεων – οντοτήτων, είτε διαβάζοντας ένα παράδειγµα να απεικονίσετε το αντίστοιχο διάγραµµα σχέσεων – οντοτήτων. Στη δραστηριότητα 4 του κεφαλαίου 3 σας ζητήθηκε να περιγράψτε τις σχέσεις και τις οντότητες για το παράδειγµα 3.1, µετά τις εξηγήσεις που δώσαµε στην ενότητα 3.3.2, και να περιγράψτε τι σχέση είναι κάθε σχέση ανάµεσα στις οντότητες. Με δεδοµένη την εµπειρία που αποκτήσατε από την εκτέλεση αυτής της δραστηριότητας σχεδιάστε το διάγραµµα σχέσεων – οντοτήτων που προκύπτει. ¢Ú·ÛÙËÚÈfiÙËÙ· 3.6 Στη δραστηριότητα 5 του κεφαλαίου 3 σας ζητήθηκε να περιγράψτε τις σχέσεις και τις οντότητες για το παράδειγµα 1.1 του κεφαλαίου 1 και να επεκτείνετε το παράδειγµα ορίζοντας τουλάχιστον µία ακόµα οντότητα αυτή της «µέτρησης» και την αντίστοιχη σχέση µε τις πόλεις. Με δεδοµένη την εµπειρία που αποκτήσατε από την εκτέλεση αυτής της δραστηριότητας σχεδιάστε το διάγραµµα σχέσεων – οντοτήτων που προκύπτει. ¢Ú·ÛÙËÚÈfiÙËÙ· 3.7 3.3.4 ªÔÓÙÂÏÔÔ›ËÛË Ì ‰È·ÁÚ¿ÌÌ·Ù· Û¯¤ÛÂˆÓ – ÔÓÙÔÙ‹ÙˆÓ Σε αυτό το σηµείο της µελέτης σας έχετε αποκτήσει µία καλή εµπειρία στα σχεδιαστικά στοιχεία των διαγραµµάτων σχέσεων – οντοτήτων. Στην ενότητα αυτή θα δούµε πώς θα σχεδιάζαµε το διάγραµµα σχέσεων – οντοτήτων για ένα πρόβληµα του πραγµατικού κόσµου. Θυµάστε το παράδειγµα 3.1 που περιγράψαµε στην ενότητα 3.3.1. Θα δώσουµε ένα νέο παράδειγµα βασισµένο σε αυτό και θα προσπαθήσουµε να δούµε βήµα προς βήµα τις ενέργειες που πρέπει να γίνουν µέχρι να σχεδιάσουµε το διάγραµµα σχέσεων – οντοτήτων. Ας δούµε το παρακάτω νέο παράδειγµα. 84 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ ¶·Ú¿‰ÂÈÁÌ· 3.2 Στο παράδειγµα αυτό εξετάζουµε το πρωτάθληµα καλαθοσφαίρισης που περιγράψαµε στο προηγούµενο παράδειγµα µε αρκετές όµως προσθήκες. Το πρωτάθληµα αποτελείται από κατηγορίες στις οποίες συµµετέχουν οµάδες. Κάθε κατηγορία έχει ένα όνοµα (Α1, Α2, Β, Γ, ∆ και Τοπικά πρωταθλήµατα). Σε κάθε κατηγορία συµµετέχουν οµάδες που µπορούν να αλλάξουν από χρονιά σε χρονιά. Μία οµάδα µπορεί να συµµετέχει µόνο σε µία κατηγορία (ανάλογα µε την επίδοσή της την προηγούµενη χρονιά). Οι οµάδες µπορούν να «ανέβουν» σε άλλη κατηγορία ή να υποβιβαστούν από µία κατηγορία σε άλλη µικρότερη. Η σειρά των κατηγοριών διαταγµένες από την ανώτερη προς την κατώτερη είναι Α1, Α2, Β, Γ, ∆ και Τοπικά Πρωταθλήµατα. Στις οµάδες συµµετέχουν παίκτες και κάθε παίκτης συµµετέχει µόνο σε µία οµάδα κάθε χρονιά. Στη Βάση ∆εδοµένων δεν χρειαζόµαστε να έχουµε τις οµάδες που έχει συµµετάσχει κάποιος παίκτης, παρά µόνο την οµάδα στην οποία συµµετέχει αυτή τη χρονιά. Για τις ανάγκες του πρωταθλήµατος γίνονται αγώνες ανάµεσα σε οµάδες. Κάθε αγώνας ανήκει σε µία συγκεκριµένη κατηγορία και κάθε αγώνας τελειώνει µε κάποιο συγκεκριµένο αποτέλεσµα. Για λόγους απλότητας θεωρούµε ότι δεν γίνονται αγώνες ανάµεσα σε οµάδες που δεν ανήκουν στην ίδια κατηγορία (π.χ. δεν προβλέπονται αγώνες κυπέλλου). Επίσης για λόγους απλότητας υποθέτουµε ότι τα στοιχεία που χαρακτηρίζουν κάθε οµάδα είναι η ονοµασία της, το όνοµα του ιδιοκτήτη της, το όνοµα του σπόνσορά της, το έτος που ιδρύθηκε και η πόλη στην οποία εδρεύει. Επίσης κάθε παίκτης χαρακτηρίζεται από το όνοµά του, το επώνυµό του, το πατρώνυµό του, τον αριθµό µητρώου του στην οµοσπονδία καλαθοσφαίρισης, το ύψος του, την ηµεροµηνία γέννησης του και την πόλη καταγωγής του. Τέλος, πάλι για λόγους απλότητας, ένας αγώνας χαρακτηρίζεται µόνο από τις οµάδες που συµµετείχαν, το γήπεδο στο οποίο έγινε, την ηµεροµηνία διεξαγωγής του και το τελικό σκορ. Στη Βάση ∆εδοµένων θέλουµε να διατηρούµε πληροφορίες και για τους µάνατζερ των παικτών και των οµάδων. Μία οµάδα µπορεί να χρησιµοποιεί πολλούς µάνατζερ, αλλά ένας παίκτης µόνο ένα µάνατζερ. Οι µάνατζερ είναι ελεύθεροι να εκπροσωπούν όσες οµάδες ή παίκτες επιθυµούν. Για λόγους απλότητας υποθέτουµε ότι τα στοιχεία που µας ενδιαφέρουν για τους µάνατζερ είναι το όνοµα, το επώνυµο και το τηλέφωνό τους. 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 85 Το ζητούµενο είναι να οδηγηθούµε από την ασαφή περιγραφή του παραδείγµατος 3.2 σε µία καθορισµένη σχεδίαση που µας παρέχει η Βάση ∆εδοµένων. Προσέξτε! Η περιγραφή που δίνεται στο παράδειγµα 3.2 δεν είναι καθόλου ασαφής. Αντίθετα είναι αρκετά προσανατολισµένη ώστε να σας βοηθήσει να υλοποιήσετε εύκολα το διάγραµµα σχέσεων – οντοτήτων. Στην πράξη αυτό δεν γίνεται τόσο εύκολα. Περιγραφές που θα έχετε να δουλέψετε στην πράξη δεν θα είναι τόσο ξεκάθαρες, ώστε να οδηγούν αµέσως στη σχεδίαση, και θα χρειάζονται αρκετές διευκρινίσεις και επεξηγήσεις. Για να κάνουµε το συγκεκριµένο παράδειγµα πιο ρεαλιστικό έχουµε εισάγει δεδοµένα που είναι πληροφορίες σχετικές µε το αντικείµενο, αλλά δεν βοηθούν το στόχο µας που είναι η σχεδίαση του διαγράµµατος σχέσεων – οντοτήτων. Βασική εργασία είναι η αποµόνωση αυτών των πληροφοριών από τις βασικές πληροφορίες. Τα βήµατα που πρέπει να ακολουθήσετε για τη σχεδίαση του διαγράµµατος σχέσεων – οντοτήτων είναι τα παρακάτω: 1. Εντοπίζουµε τις βασικές έννοιες της Βάσης ∆εδοµένων που περιγράφει το παράδειγµα. 2. Επιλέγουµε τις οντότητες, τα κατηγορήµατα για κάθε οντότητα και τα κλειδιά. 3. Αναγνωρίζουµε τις σχέσεις και τα κατηγορήµατα των σχέσεων και εντοπίζουµε τον τύπο κάθε σχέσης. 4. Σχεδιάζουµε ένα πρώτο πλάνο του διαγράµµατος σχέσεων – οντοτήτων στο χαρτί χωρίς να δώσουµε έµφαση στα κατηγορήµατα και στα κλειδιά, αλλά µόνο σε σχέσεις και οντότητες. 5. Κάνουµε βελτιώσεις και διορθώσεις. Ας ακολουθήσουµε λοιπόν τα παραπάνω βήµατα. ∂¡∆√¶π™ª√™ µ∞™π∫ø¡ ∂¡¡√πø¡ Είναι φανερό ότι µέσα στο κείµενο του παραδείγµατος υπάρχει πληροφορία που δεν σχετίζεται µε τη σχεδίαση της Βάσης ∆εδοµένων, αλλά µε τα ίδια τα δεδοµένα. Τέτοιου είδους πληροφορία π.χ. είναι οι ονοµασίες των κατηγοριών ή ο τρόπος µε τον οποίο υποβιβάζονται οι οµάδες. Οι βασικές έννοιες που πρέπει να αποµονώσουµε είναι οι 86 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ παρακάτω (αντιγράφουµε από το κείµενο): • Στις κατηγορίες συµµετέχουν οµάδες. • Στις οµάδες συµµετέχουν παίκτες. • Γίνονται αγώνες ανάµεσα σε οµάδες. • Μία οµάδα χρησιµοποιεί µάνατζερ. • Ένας παίκτης χρησιµοποιεί µάνατζερ. Με αυτά τα στοιχεία µπορούµε να αρχίσουµε να εντοπίζουµε τις οντότητες και τις σχέσεις που συνθέτουν τη Βάση ∆εδοµένων. ∂¶π§√°∏ √¡∆√∆∏∆ø¡ Έχοντας εµπειρία από το παράδειγµα 3.1 που συζητήσαµε σίγουρα θα αναγνωρίσατε τις βασικές οντότητες του παραδείγµατος που είναι οι εξής: • Κατηγορία • Οµάδα • Παίκτης • Μάνατζερ Προσέξτε, θεωρητικά θα µπορούσαµε να έχουµε ορίσει µία οντότητα «Άνθρωπος» και να περιγράψουµε τόσο τους παίκτες όσο και τους µάνατζερ µε σχέσεις ISA µε αυτή την οντότητα. Όµως, επειδή τα µόνα κοινά στοιχεία ανάµεσα στους παίκτες και τους µάνατζερ είναι το όνοµα και το επώνυµο, αυτή η επιλογή είναι µάλλον περιττή. Παίρνοντας τα δεδοµένα από την περιγραφή µπορούµε εύκολα να εντοπίσουµε και τα κατηγορήµατα για κάθε οντότητα. Αν και για λόγους ευκολίας θα µπορούσαµε να ορίσουµε ένα κατηγόρηµα «κωδικός» σε κάθε οντότητα, ώστε να διευκολυνθούµε µε θέµατα κλειδιών, δεν θα το κάνουµε για να αναζητήσουµε τα κλειδιά για κάθε οντότητα από τα κατηγορήµατα που τη χαρακτηρίζουν. Οι οντότητες λοιπόν µε τα κατηγορήµατα είναι οι εξής (δίνουµε τα κλειδιά µε πλάγιους χαρακτήρες): • Κατηγορία (Ονοµασία Κατηγορίας, Χρονιά) • Οµάδα (Ονοµασία, Ιδιοκτήτης, Χορηγός, Έτος Ίδρυσης, Πόλη/Έδρα) 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 87 • Παίκτης (Όνοµα, Επώνυµο, Πατρώνυµο, Αριθµός µητρώου, Ύψος, Ηµεροµηνία γέννησης, Πόλη Καταγωγής) • Μάνατζερ (Όνοµα, Επώνυµο, Αριθµός Τηλεφώνου) Παρατηρήστε ότι επιλέξαµε ως κλειδί για την κατηγορία την ονοµασία της κατηγορίας και το έτος. Έτσι η (Α1, 1999) είναι µία µοναδική κατηγορία, αφού θα υπάρξουν πολλές Α1 για άλλες χρονιές και άλλες κατηγορίες για το 1999, αλλά καµία (Α1, 1999). Επίσης έγιναν οι παραδοχές ότι δεν υπάρχουν δύο οµάδες µε το ίδιο όνοµα στην ίδια πόλη, ότι δεν υπάρχουν δύο παίκτες µε τον ίδιο αριθµό µητρώου και ότι δεν υπάρχουν δύο µάνατζερ µε το ίδιο ονοµατεπώνυµο. ∂¶π§√°∏ ™Ã∂™∂ø¡ Έχοντας εντοπίσει τις οντότητες πρέπει να προχωρήσουµε και στον εντοπισµό των σχέσεων. Επιλέγουµε τις φράσεις από το κείµενο που µας βοηθούν: • Στις κατηγορίες στις οποίες συµµετέχουν οµάδες… Μία οµάδα µπορεί να συµµετέχει µόνο σε µία κατηγορία. • Στις οµάδες συµµετέχουν παίκτες και κάθε παίκτης συµµετέχει µόνο σε µία οµάδα. • Μία οµάδα µπορεί να χρησιµοποιεί πολλούς µάνατζερ. • Ένας παίκτης συνεργάζεται µόνο µε ένα µάνατζερ. • Γίνονται αγώνες ανάµεσα σε οµάδες. Με βάση τις παραπάνω φράσεις που διαβάσαµε στο κείµενο του παραδείγµατος µπορούµε να εντοίσουµε τις ακόλουθες σχέσεις (στις παρενθέσεις αναφέρουµε τις οντότητες που συµµετέχουν σε κάθε σχέση): • Συµµετέχει (Οµάδα, Κατηγορία) • Παίζει σε (Παίκτης, Οµάδα) • Χρησιµοποιεί (Οµάδα, Μάνατζερ) • Συνεργάζεται (Παίκτης, Μάνατζερ) • Αγώνας (Οµάδα, Οµάδα) Το επόµενο βήµα είναι να βρούµε τα κατηγορήµατα για κάθε σχέση, 88 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ όπου αυτά υπάρχουν. Για παράδειγµα στη σχέση «Συµµετέχει» θα µπορούσαν να υπάρχουν αρκετά κατηγορήµατα που να περιγράφουν την πορεία της οµάδας στη συγκεκριµένη κατηγορία τη συγκεκριµένη χρονιά (όπως τι θέση πήρε, τι βαθµούς συγκέντρωσε κτλ). Όµως επειδή το παράδειγµα δεν αναφέρει τίποτε θα περιοριστούµε µόνο στα δεδοµένα που µας ζητούνται. Έτσι, στη σχέση Αγώνας πρέπει να προστεθούν τα κατηγορήµατα που αναφέρονται στο παράδειγµα, δηλαδή για τα κατηγορήµατα έχουµε το εξής: • Αγώνας (Γήπεδο, Ηµεροµηνία διεξαγωγής, Σκορ) Υπάρχουν δύο τρόποι να αναφέρουµε το σκορ. Είτε να έχουµε δύο κατηγορήµατα (ένα σκορ για κάθε οµάδα), είτε να ακολουθήσουµε τη σύµβαση ότι η γηπεδούχος οµάδα αναγράφεται πρώτη. Στο παράδειγµα ακολουθήσαµε το δεύτερο τρόπο. Τέλος πρέπει να εντοπίσουµε και το είδος κάθε σχέσης. Βασιζόµενοι στις προτάσεις που περιγράφουν τις σχέσεις και τις οποίες αναφέραµε παραπάνω έχουµε τα εξής: • Συµµετέχει (Οµάδα, Κατηγορία) Ν προς M. Σε µία κατηγορία συµµετέχουν πολλές οµάδες, αλλά και µία οµάδα συµµετέχει σε πολλές κατηγορίες! Φαίνεται παράξενο, αλλά θυµηθείτε πώς ορίσαµε την κατηγορία. Ως ονοµασία και χρονιά. Έτσι, µία οµάδα µπορεί να συµµετέχει φέτος στην κατηγορία [Α1, 1999], πέρσι στην κατηγορία [Α1, 1998] και πρόπερσι στην κατηγορία [Α2, 1997]. Άρα η σχέση πρέπει να είναι Ν προς M. • Παίζει σε (Παίκτης, Οµάδα) Ν προς 1 Ένας παίκτης παίζει µόνο σε µία οµάδα. Θυµηθείτε ότι αποφασίσαµε ότι για τους παίκτες έχουµε στοιχεία µόνο για τη φετινή χρονιά. • Χρησιµοποιεί (Οµάδα, Μάνατζερ) Ν προς M. • Συνεργάζεται (Παίκτης, Μάνατζερ) Ν προς 1. Ένας παίκτης συνεργάζεται µόνο µε ένα µάνατζερ. • Αγώνας (Οµάδα, Οµάδα) Ν προς M. Κάθε οµάδα µπορεί να δώσει πολλούς αγώνες µε άλλες οµάδες. 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 89 Μπορείτε να ανατρέξετε στο παράδειγµα 3.1 για να επιβεβαιώσετε τους περιορισµούς που µας οδήγησαν να προσιορίσουµε µε αυτό τον τρόπο τις σχέσεις. ™Ã∂¢π∞™∏ ∆√À ¶§∞¡√À ¢π∞°ƒ∞ªª∞∆√™ ™Ã∂™∂ø¡ – √¡∆√∆∏∆ø¡ Aγώνας Oµάδα Xρησιµοποιεί Mάνατζερ Παίζει Συµµετέχει Παίκτης Συνεργάζεται Kατηγορία ™¯‹Ì· 3.8 Αρχικό Πλάνο Τώρα µπορούµε να αρχίσουµε να σχεδιάζουµε το πλάνο του διαγράµµατος σχέσεων – οντοτήτων. Επειδή το συγκεκριµένο παράδειγµα είναι σχετικά απλό θα µπορούσαµε να είχαµε σχεδιάσει κατευθείαν το διάγραµµα σχέσεων – οντοτήτων, αλλά σε µεγάλα και πολύπλοκα διαγράµµατα είναι καλύτερα να βλέπει κανείς πρώτα ένα προσχέδιο του διαγράµµατος σχέσεων – οντοτήτων στο χαρτί και µετά να σχεδιάζει την τελική έκδοση. Στο σχήµα 3.8 παρουσιάζεται το πλάνο του διαγράµµατος σχέσεων – οντοτήτων για το παράδειγµα 3.1. Παρατηρήστε ότι έχουµε απλά τοποθετήσει τις οντότητες και τις σχέσεις για να δούµε την εικόνα του διαγράµµατος. ∆∂§π∫√ ¢π∞°ƒ∞ªª∞ ™Ã∂™∂ø¡ – √¡∆√∆∏∆ø¡ Αφού ελέγξουµε το πλάνο και αποφασίσουµε για την ορθότητά του (ή κάνουµε τις απαραίτητες διορθώσεις), τότε «γεµίζουµε» το σχήµα και µε τις υπόλοιπες πληροφορίες (δηλαδή µε κατηγορήµατα, κλειδιά, είδη σχέσεων κτλ). Η διαδικασία των αλλαγών είναι επαναλαµβανόµενη, δηλαδή νέες αλλαγές µπορούν να δροµολογούνται συνεχώς. Να σηµειωθεί ότι η εργασία της σχεδίασης του διαγράµµατος σχέσε- 90 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ ων – οντοτήτων γίνεται από εξειδικευµένα εργαλεία τα οποία παρέχουν τα µεγάλα συστήµατα διαχείρισης Βάσεων ∆εδοµένων. Αυτά τα εργαλεία συνήθως παρέχουν και αρκετούς αυτοµατισµούς για τη δηµιουργία τµηµάτων της Βάσης ∆εδοµένων από το διάγραµµα σχέσεων – οντοτήτων. Το τελικό σχήµα θα µπορούσε να είναι της µορφής που παρουσιάζεται στο σχήµα 3.9. Όπως αναφέραµε, η διαδικασία της σχεδίασης του διαγράµµατος σχέσεων – οντοτήτων δεν είναι εύκολη υπόθεση και προϋποθέτει µεγάλη εµπειρία. Ακολουθούν δραστηριότητες που θα σας βοηθήσουν να πειραµατιστείτε µε τη σχεδίαση διαγραµµάτων σχέσεων – οντοτήτων. ™¯‹Ì· 3.9 ∆ιάγραµµα σχέσεων – οντοτήτων Oνοµασία Γήπεδο Όνοµα Iδιοκτήτης Aγώνας Hµερ/νία Eπώνυµο Σκορ Xορηγός M Έτος Iδρ. Oµάδα Έδρα M 1 Παίζει Συµµετέχει N Kατηγορία Όνοµα Oνοµασία Xρονιά Eπώνυµο Πατρώνυµο N Aρ. Mητρώου Παίκτης Πόλη Ύψος N Hµ. Γέν. Συνεργάζεται N M Xρησιµοποιεί N Mάνατζερ 1 Tηλέφωνο ¢Ú·ÛÙËÚÈfiÙËÙ· 3.8 Αλλάξτε το παραπάνω σχήµα και υλοποιήστε µία οντότητα «Άνθρωπος» και περιγράψτε µε βάση αυτή τις οντότητες «Παίκτης» και «Μάνατζερ». 3 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ™ à ∂ ™ ∂ ø ¡ – O ¡ ∆ √ ∆ ∏ ∆ ø ¡ 91 Υλοποιήστε παραδείγµατα εγγραφών για το παράδειγµα 3.1 βασιζόµενοι στο σχήµα 3.9. Υλοποιήστε τουλάχιστον τρεις εγγραφές για κάθε οντότητα και σχέση. ¢Ú·ÛÙËÚÈfiÙËÙ· 3.9 Παρουσιάσαµε σε αυτό το κεφάλαιο ένα παράδειγµα (το πρωτάθληµα καλαθοσφαίρισης), το οποίο σχεδιάστηκε σε πολύ αδρές γραµµές. Αυτό έγινε για λόγους απλότητας και για να επιτευχθεί έγιναν αρκετές παραδοχές. Μερικές από τις παραδοχές συζητήθηκαν και µερικές όχι. Προσπαθήστε να εντοπίσετε τις παραδοχές που έχουν γίνει στο παράδειγµα και που δεν ισχύουν στην πραγµατικότητα. Αφού εντοπίσετε τις αδυναµίες του παραδείγµατος, προσπαθήστε να σχεδιάσετε ένα διάγραµµα που να είναι πιο κοντά στην πραγµατικότητα. ¢Ú·ÛÙËÚÈfiÙËÙ· 3.10 ™‡ÓÔ„Ë Στο κεφάλαιο αυτό περιγράψαµε δύο µοντέλα δεδοµένων: το ιεραρχικό µοντέλο και το δικτυακό µοντέλο. Aναφέραµε τις βασικές αρχές για καθένα από αυτά τα µοντέλα και παραπέµψαµε στη βιβλιογραφία όσους θέλουν να ασχοληθούν περισσότερο µε κάποιο από αυτά. Αναφέραµε ότι σήµερα στις περισσότερες Βάσεις ∆εδοµένων κυριαρχεί το σχεσιακό µοντέλο, το οποίο παρουσιάζεται αναλυτικά στο επόµενο κεφάλαιο. Επίσης αναφέραµε και για το αντικειµενοστραφές µοντέλο, το οποίο έχει αρχίσει να χρησιµοποιείται ιδιαίτερα µετά την άνθιση των µεθόδων αντικειµενοστραφούς προγραµµατισµού και είπαµε ότι και σε αυτό το µοντέλο θα αναφερθούµε εκτενέστερα σε επόµενο κεφάλαιο (στο κεφάλαιο 7). Βασικό µέρος του κεφαλαίου αφιερώσαµε στην παρουσίαση του µοντέλου σχεδίασης Βάσεων ∆εδοµένων, που βασίζεται στα διαγράµµατα σχέσεων – οντοτήτων. Περιγράψαµε τις βασικές έννοιες που αναφέρονται σε αυτά τα διαγράµµατα και αναλύσαµε τα βασικά δοµικά στοιχεία της σχεδίασης των διαγραµµάτων σχέσεων – οντοτήτων. Τέλος δώσαµε ένα παράδειγµα για το πώς σχεδιάζουµε ένα διάγραµµα σχέσεων – οντοτήτων. 92 K E º A § A I O 3 : ª √ ¡ ∆ ∂ § √ ¶ √ π ∏ ™ ∏ ∫ ∞ π £ ∂ ª ∞∆ ∞ ™ à ∂ ¢ π ∞ ™ ∏ ™ BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ÌÂϤÙË [1] C.J.Date, An Introduction to Database Systems, Volume I, Fourth Edition, Addison–Wesley, 1986. Στο κεφάλαιο 22 του βιβλίου θα µπορέσετε να βρείτε πληροφορίες για το ιεραρχικό µοντέο βασισµένες στο σύστηµα IMS. Αντίστοιχα στο κεφάλαιο 23 περιγράφεται το δικτυακό µοντέλο βασισµένο στο σύστηµα IDMS. [2] Elmasri R. & Navathe S. B., Fundamentals of Database Systems, Addison–Wesley, 1994. Το βιβλίο υπάρχει και σε ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Στο κεφάλαιο 11 του βιβλίου θα µπορέσετε να µία πιο αναλυτική περιγραφή του ιεραρχικού µοντέλου. ∆ώστε έµφαση στους περιορισµούς ακεραιότητας στο ιεραρχικό µοντέλο και στη γλώσσα χειρισµού δεδοµένων για αυτό το µοντέλο. Αντίστοιχα στο κεφάλαιο 10 περιγράφεται το δικτυακό µοντέλο. Τα διαγράµµατα σχέσεων – οντοτήτων καλύπτονται στο κεφάλαιο 3 και µπορείτε να βρείτε ένα αρκετά εκτεταµένο παράδειγµα µε εργαζόµενους σε µία επιχείρηση. Επίσης στο κεφάλαιο 14 περιγράφονται αναλυτικότερα θέµατα σχεδιασµού µε αναφορές στα διαγράµµατα σχέσεων – οντοτήτων [3] Silberschatz A., Korth H., Sudarshan S, Database System Concepts, Third Edition, McGraw–Hill, 1986. Ένα πολύ καλό βιβλίο που προτείνουµε να το χρησιµοποιήσετε για µελέτη παράλληλα µε το µάθηµα. Το ιεραρχικό µοντέλο καλύπτεται εν συντοµία στο παράρτηµα Β του βιβλίου και το δικτυακό µοντέλο στο παράρτηµα Α. Το διάγραµµα σχέσεων – οντοτήτων καλύπτεται αναλυτικά στο κεφάλαιο 2 του βιβλίου. [4] Ulman J. D., Principles of Database and Knowledge–base Systems, Computer Science Press, 1988. Στο κεφάλαιο παρουσιάζεται το διάγραµµα σχέσεων – οντοτήτων και οι βασικές αρχές του. ∫ ∂ ™¯ÂÛȷΤ˜ B¿ÛÂȘ ¢Â‰ÔÌ¤ÓˆÓ ™ÎÔfi˜ Σκοπός του κεφαλαίου είναι η περιγραφή των σχεσιακών Βάσεων ∆εδοµένων, των βασικών εννοιών και των πράξεων καθώς και των περιορισµών ακεραιότητας. Περιγράφονται εν συντοµία δύο βασικά σχεσιακά µοντέλα ερωτήσεων, η σχεσιακή άλγεβρα και ο σχεσιακός υπολογισµός, και γίνεται µία εισαγωγή στις έννοιες του κλειδώµατος των δεδοµένων και της ταυτόχρονης προσπέλασης (έννοιες που είναι γενικές για κάθε µοντέλο και που εντάχθηκαν σε αυτό το κεφάλαιο). ¶ÚÔÛ‰ÔÎÒÌÂÓ· AÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • εξηγήσετε τους βασικούς όρους του σχεσιακού µοντέλου • περιγράψετε τις έννοιες «πίνακας», «κενή τιµή», «arity», και «cardinality» • περιγράψετε τις έννοιες «εισαγωγή», «επιλογή», «διαγραφή» και «ενηµέρωση» και τους περιορισµούς ακεραιότητας για κάθε πράξη • δώσετε σε αδρές γραµµές παραδείγµατα κλειδώµατος και γενικότερα της έννοιας της προστασίας από ταυτόχρονη προσπέλαση • περιγράψετε σε βασικές γραµµές τις αρχές της σχεσιακής άλγεβρας • περιγράψετε ερωτήσεις προς µία Βάση ∆εδοµένων εκφρασµένες µε σχεσιακή άλγεβρα • περιγράψετε σε βασικές γραµµές τις αρχές του σχεσιακού υπολογισµού • µετατρέψετε πράξεις από σχεσιακή άλγεβρα σε σχεσιακό υπολογισµό και το αντίστροφο ŒÓÓÔȘ ÎÏÂȉȿ • Πίνακας (Table) • Αριθµός Στηλών Πίνακα (Arity) • Αριθµός Γραµµών Πίνακα (Cardinality) • Κενή Τιµή (Null Value) • Επιλογή (Select) 4 º ∞ § ∞ π √ 94 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ • Εισαγωγή (Insert) • Ενηµέρωση (Update) • ∆ιαγραφή (Delete) • Ακεραιότητα (Integrity) • Κλείδωµα (Lock) • Aδιέξοδο (Deadlock) • Σχεσιακή Άλγεβρα (Relational Algebra) • Σχεσιακός Υπολογισµός (Relational Calculus) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό περιγράφουµε το µοντέλο που κυριαρχεί σήµερα στις περισσότερες Βάσεις ∆εδοµένων, δηλαδή το σχεσιακό µοντέλο. Στην ενότητα 4.1 γίνεται µία εισαγωγή στις έννοιες των σχεσιακών Βάσεων ∆εδοµένων. Στα πλαίσια της ενότητας 4.1 έχουµε εντάξει δύο βασικά θέµατα που ισχύουν για όλες τις Βάσεις ∆εδοµένων (άσχετα από το µοντέλο αναφοράς) και που είναι οι περιορισµοί ακεραιότητας και το κλείδωµα στην ταυτόχρονη προσπέλαση. Αυτά τα θέµατα καλύπτονται εν συντοµία και γίνονται αναφορές στη βιβλιογραφία για όσους από εσάς επιθυµούν να τα µελετήσουν περισσότερο. Ο λόγος που αυτά τα θέµατα εντάσσονται στο σχεσιακό µοντέλο είναι ότι χρησιµοποιούµε παραδείγµατα από σχεσιακές Βάσεις ∆εδοµένων για να εξηγήσουµε τα θέµατα που συζητούνται. Παρόλα αυτά, τις συγκεκριµένες ενότητες θα µπορούσατε να τις διαβάσετε και ανεξάρτητα από το σχεσιακό µοντέλο (για παράδειγµα αφού ολοκληρώσετε τη µελέτη του υπόλοιπου κεφαλαίου). Στις ενότητες 4.2 και 4.3 παρουσιάζονται δύο βασικά µοντέλα ερωτήσεων που περιγράφουν ερωτήσεις στις σχεσιακές Βάσεις ∆εδοµένων: η σχεσιακή άλγεβρα στην ενότητα 4.2 και ο σχεσιακός υπολογισµός στην ενότητα 4.3. Για να µπορέσετε να κατανοήσετε καλύτερα τη σχεσιακή άλγεβρα ίσως να χρειαστείτε κάποιες γνώσεις από θεωρία συνόλων, ενώ κάποιες γνώσεις µαθηµατικής συλλογιστικής θα σας χρειαστούν και στην ενότητα 4.3. Εάν οι έννοιες που θα καλύψουµε στις ενότητες 4.2 και 4.3 σας φανούν δύσκολες, µπορείτε να τις µελετήσετε σε αδρές γραµµές τώρα και να επαναλάβετε το κεφάλαιο µετά τη µελέτη των κεφαλαίων 5 και 6, ίσως µελετώντας παράλληλα και κάποιο από τα προτεινόµενα βιβλία. 4.1 ∆Ô Û¯ÂÛÈ·Îfi ÌÔÓÙ¤ÏÔ ™ÎÔfi˜ Σκοπός της ενότητας είναι να περιγραφεί το σχεσιακό µοντέλο. Θα περιγράψουµε τις βασικές έννοιες του σχεσιακού µοντέλου, θα το συγκρίνουµε µε το ιεραρχικό και το δικτυακό µοντέλο που παρουσιάσαµε στο προηγούµενο κεφάλαιο και θα αναφερθούµε σε θέµατα ακεραιότητας δεδοµένων και ταυτόχρονης προσπέλασης. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τους πίνακες σε µία σχεσιακή Βάση ∆εδοµένων και τον τρόπο µε τον οποίο οι οντότητες και οι σχέσεις του διαγράµµατος σχέσεων – οντοτήτων αντιστοιχούν σε πίνακες • αναφέρετε τους πίνακες που προκύπτουν από ένα διάγραµµα σχέσεων – οντοτήτων • περιγράψετε τις έννοιες arity και cardinality και να βρείτε τις τιµές τους για κάθε πίνακα • περιγράψετε την έννοια της ακεραιότητας και τους περιορισµούς ακεραιότητας • περιγράψετε τις πράξεις που µπορούν να γίνουν σε µία Βάση ∆εδοµένων και το πως επηρεάζουν την ακεραιότητά της • εντοπίσετε τις πράξεις για τις οποίες απαιτείται κλείδωµα και να αναλύσετε σε αδρές γραµµές την έννοια του κλειδώµατος ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή παρουσιάζεται το σχεσιακό µοντέλο. Για πιο εκτενή µελέτη του µοντέλου αυτού µπορείτε να ανατρέξετε στις βιβλιογραφικές πηγές που σας δίνουµε στο τέλος του κεφαλαίου. Η περιγραφή του µοντέλου έχει βασιστεί στα διαγράµµατα σχέσεων – οντοτήτων που περιγράψαµε στο προηγούµενο κεφάλαιο. Στην περίπτωση που δεν έχετε µελετήσει πρόσφατα την ενότητα 3.3, τότε ίσως θα ήταν καλό να προηγηθεί µία επανάληψη πριν προχωρήσετε στη µελέτη αυτού του κεφαλαίου. Στην ενότητα 4.1.1 παρουσιάζονται οι βασικές έννοιες των 96 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ σχεσιακών Βάσεων ∆εδοµένων και οι πράξεις που µπορούν να γίνουν σε µία σχεσιακή Βάση ∆εδοµένων, ενώ στην ενότητα 4.1.2 περιγράφεται η ακεραιότητα της Βάσης ∆εδοµένων και πώς επηρεάζεται από τις διάφορες πράξεις, καθώς και η έννοια του κλειδώµατος. Το θέµα του κλειδώµατος των δεδοµένων είναι ένα σηµαντικό πρόβληµα, όχι µόνο για τις σχεσιακές Βάσεις ∆εδοµένων, αλλά για κάθε σύστηµα. Στο κεφάλαιο αυτό απλά γίνεται εισαγωγή στο πρόβληµα και προτείνεται η σχεική βιβλιογραφία για εσάς που θέλετε να ασχοληθείτε σε βάθος µε το αντικείµενο. 4.1.1 µ·ÛÈΤ˜ ¤ÓÓÔȘ Στο κεφάλαιο 3 περιγράψαµε το ιεραρχικό και το δικτυακό µοντέλο. Είπαµε ότι το δικτυακό µοντέλο είναι, κατά κάποιο τρόπο, υπερσύνολο του ιεραρχικού. Με την ίδια λογική και το σχεσιακό µοντέλο είναι υπερσύνολο του δικτυακού, αφού σε αντίθεση µε το δικτυακό, που περιορίζει τις σχέσεις σε 1 προς Ν, το σχεσιακό επιτρέπει σχέσεις κάθε µορφής από αυτές που περιγράψαµε στα διαγράµµατα σχέσεων – οντοτήτων. Στην ενότητα 3.3 µιλήσαµε για οντότητες και για σχέσεις. Το σχεσιακό µοντέλο περιγράφει τη Βάση ∆εδοµένων και οργανώνει τις εγγραφές µε βάση τις σχέσεις. Για αυτό το λόγο η σχεδίαση µίας Βάσης ∆εδοµένων µε τη χρήση διαγραµµάτων σχέσεων – οντοτήτων µπορεί να οδηγήσει εύκολα στην υλοποίησή της σε ένα σχεσιακό σύστηµα. Σήµερα στην αγορά κυκλοφορούν αρκετά Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων βασισµένα στο σχεσιακό µοντέλο, τόσο µεγάλα συστήµατα (όπως για παράδειγµα η Oracle, η Ingress και η Sy–Base), όσο και µικρά συστήµατα (όπως για παράδειγµα η Access). Στις σχεσιακές Βάσεις ∆εδοµένων οι εγγραφές οργανώνονται σε πίνακες. Ένας πίνακας µπορεί να χρησιµοποιηθεί τόσο για εγγραφές που περιγράφουν οντότητες, όσο και για εγγραφές που περιγράφουν σχέσεις. Ακολουθεί ο ορισµός. I Έτσι, οι εγγραφές παρουσιάζονται στις γραµµές του πίνακα, ενώ σε κάθε στήλη του πίνακα υπάρχουν οι τιµές για ένα συγκεκριµένο πεδίο. Συνήθως, όταν γράφουµε πίνακες θεωρούµε ότι οι στήλες είναι διαταγµένες και κατά σύµβαση αναφέρουµε πρώτες τις στήλες που αντιστοιχούν σε κατηγορήµατα κλειδιά. Αντίθετα, οι γραµµές του πίνακα I Ο πίνακας σε µία σχεσιακή Βάση ∆εδοµένων αποτελείται από µία ή περισσότερες στήλες που αντιστοιχούν σε τιµές πεδίων, και από γραµµές που αντιστοιχούν σε τιµές για αυτά τα πεδία. 4.1 ∆√ ™Ã∂™π∞∫√ ª√¡∆∂§√ 97 συνήθως αναγράφονται µη διαταγµένες ή διαταγµένες µε βάση το κλειδί. Θυµηθείτε το παράδειγµα 3.2 µε το πρωτάθληµα καλαθοσφαίρισης που περιγράψαµε στην ενότητα 3.4. Ο πίνακας για την οντότητα «Οµάδα» που σχεδιάσαµε στο διάγραµµα σχέσεων – οντοτήτων µε πέντε εγγραφές θα µπορούσε να είναι ο ακόλουθος (τα δεδοµένα στον πίνακα είναι φανταστικά: Ονοµασία Ολυµπιακός ΑΕΚ Ολυµπιακός Πανιώνιος Περιστέρι Έδρα Πειραιάς Αθήνα Βόλος Αθήν Αθήνα Ιδιοκτήτης Κόκκαλης Φιλίππου Χρηστίδης ∆ήµος Ν.Σ. Εθνική ΑΤΚΕ Χορηγός Lacta Έτος Ίδρυσης 1924 1928 1967 1922 1977 Παρατηρήστε ότι, αν και υπάρχουν δύο οµάδες µε την ίδια ονοµασία και τρεις οµάδες µε την ίδια έδρα, δεν υπάρχει οµάδα µε την ίδια ονοµασία και έδρα, γιατί αυτό θα παραβίαζε την αρχή του κλειδιού, όπως το ορίσαµε στην ενότητα 3.3.1. Επίσης, παρατηρήστε ότι κάποια στοιχεία στον πίνακα είναι κενά (όπως ο Ιδιοκτήτης της οµάδας «Περιστέρι, Αθήνα»). Αυτό µπορεί να γίνει θεωρητικά για τα στοιχεία για όλες τις στήλες µίας εγγραφής εκτός από τις εγγραφές κλειδιά. Όταν ένα πεδίο δεν έχει τιµή σε µία εγγραφή τότε λέµε ότι έχει «κενή τιµή», ή ότι «έχει τιµή κενό». Μία κενή τιµή είναι διαφορετική από 0 ή από τον χαρακτήρα «SPACE». Έτσι είναι διαφορετικό στη στήλη «Έτος Ίδρυσης» να δώσουµε ως τιµή 0 από το να δώσουµε ως τιµή κενό. Επίσης είναι διαφορετικό στην στήλη «Ιδιοκτήτης» να δώσουµε κενή τιµή από το να δώσουµε ως τιµή έναν ή περισσότερους χαρακτήρες «SPACE». Ο αριθµός των στηλών ενός πίνακα σε µία σχεσιακή Βάση ∆εδοµένων ονοµάζεται arity και ο αριθµός των γραµµών του cardinality. Έτσι, ένας πίνακας που περιγράφει µία οντότητα µε 3 κατηγορήµατα θα έχει arity 3. Αντίστοιχα, ένας πίνακας µε cardinality 500 σηµαίνει ότι έχουν εισαχθεί σε αυτόν 500 εγγραφές. Οι βασικές πράξεις που µπορούν να γίνουν σε µία σχεσιακή Βάση ∆εδοµένων είναι οι ίδιες µε αυτές που γίνονται σε κάθε Βάση ∆εδοµένων, δηλαδή Επιλογή, Εισαγωγή, Ενηµέρωση και ∆ιαγραφή. 98 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ Επιλογή σηµαίνει αναζήτηση µίας συγκεκριµένης εγγραφής και η ανεύρεσή της µέσα στον πίνακα (δηλαδή ο εντοπισµός της γραµµής του πίνακα στην οποία βρίσκεται η ζητούµενη εγγραφή). Εισαγωγή σηµαίνει η προσθήκη µίας νέας εγγραφής στον πίνακα. Η προσθήκη µπορεί να γίνει στο τέλος του πίνακα ή σε συγκεκριµένη θέση του πίνακα (στην περίπτωση που έχουµε διατάξει τον πίνακα). Ενηµέρωση είναι η µεταβολή κάποιων τιµών για µερικά πεδία µίας εγγραφής (δηλαδή η αλλαγή των δεδοµένων για µερικές στήλες σε µία γραµµή). Τέλος, διαγραφή είναι το σβήσιµο µίας γραµµής από τον πίνακα. Στην επόµενη ενότητα θα δούµε πώς επηρεάζεται η ακεραιότητα µίας Βάσης ∆εδοµένων από κάποιες πράξεις που γίνονται σε αυτή και θα µελετήσουµε την ακεραιότητα της Βάσης ∆εδοµένων. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.1 Μελετήστε το σχήµα 3.9 του προηγούµενου κεφαλαίου. Στο σχήµα αυτό περιγράφεται ένα διάγραµµα σχέσεων – οντοτήτων µε 4 οντότητες και 5 σχέσεις. 1. Υπολογίστε την arity που θα πρέπει να έχει κάθε πίνακας σε µία σχεσιακή Βάση ∆εδοµένων για κάθε οντότητα και σχέση που περιγράφεται σε αυτό το διάγραµµα σχέσεων – οντοτήτων. 2. Ετοιµάστε τους πίνακες για µία σχεσιακή Βάση ∆εδοµένων για τις οντότητες που περιγράφονται στο διάγραµµα σχέσεων – οντοτήτων. 3. Ετοιµάστε τους πίνακες για µία σχεσιακή Βάση ∆εδοµένων για τις σχέσεις που περιγράφονται στο διάγραµµα σχέσεων – οντοτήτων, προσέχοντας τα κλειδιά για κάθε οντότητα που συµµετέχει στη σχέση. ¢Ú·ÛÙËÚÈfiÙËÙ· 4.1 Περάστε τυχαία δεδοµένα στους πίνακες που ετοιµάσατε ως απάντηση για την άσκηση αυτοαξιολόγησης 4.1. Προσέξτε να µην υπάρχει πρόβληµα µε τα κλειδιά στις οντότητες και στις σχέσεις. Φροντίστε ώστε κάθε πίνακας που περιγράφει σχέση να έχει cardinality 5 και κάθε πίνακας που περιγράφει οντότητα να έχει cardinality 10. 4.1 ∆√ ™Ã∂™π∞∫√ ª√¡∆∂§√ 99 4.1.2 ∞ÎÂÚ·ÈfiÙËÙ· ‰Â‰ÔÌ¤ÓˆÓ Στην προηγούµενη ενότητα µιλήσαµε για κλειδιά στους πίνακες και είπαµε ότι δεν µπορούν να εισαχθούν κενές τιµές σε ένα κλειδί. Αυτός είναι ένας περιορισµός. Σε περίπτωση που αυτός ο περιορισµός δεν είχε τηρηθεί θα είχαµε πρόβληµα µε τη Βάση ∆εδοµένων, αφού θα είχαµε τιµές χωρίς τα πεδία που τις χαρακτηρίζουν. Αυτό θα σήµαινε ότι θα είχαµε πρόβληµα ακεραιότητας στη Βάση ∆εδοµένων και για αυτό το λόγο ο περιορισµός που αναφέραµε παραπάνω ονοµάζεται περιορισµός ακεραιότητας. Υπάρχουν δύο τύποι περιορισµών ακεραιότητας, οι περιορισµοί που περιορίζονται µόνο σε έναν πίνακα και οι περιορισµοί που σχετίζονται µε πολλούς πίνακες. Στην πρώτη περίπτωση ανήκουν οι περιορισµοί όπως «ένα κλειδί δεν µπορεί να έχει ως τιµή το κενό» ή όπως «δεν µπορούν να υπάρχουν δύο εγγραφές µε το ίδιο κλειδί». Στη δεύτερη περίπτωση ανήκουν περιορισµοί που σχετίζονται µε δεδοµένα που αναφέρονται από ένα πίνακα σε κάποιον άλλο. Για παράδειγµα, δεν µπορεί να υπάρχει µία εγγραφή σε µία σχέση που δεν αντιστοιχεί σε καµία οντότητα και δεν µπορούν να υπάρχουν δύο εγγραφές σε µία σχέση που να περιγράφουν τη σχέση δύο ίδιων οντοτήτων µε τα ίδια κατηγορήµατα. Οι περιορισµοί αυτοί επιβάλλονται από το ίδιο το σύστηµα. Έτσι, όταν δηµιοργείται µία Βάση ∆εδοµένων µεταφέρει µαζί της και ένα σύνολο περιορισµών ακεραιότητας για την τήρηση των οποίων φροντίζει το σύστηµα. Για παράδειγµα, εάν στην οντότητα «Οµάδα» που περιγράψαµε στο παράδειγµα 3.2 είχε εισαχθεί µία οµάδα µε ονοµασία «ΑΕΚ» και Έδρα «Αθήνα», τότε το σύστηµα δεν θα επέτρεπε την εισαγωγή και µίας δεύτερης οµάδας µε το ίδιο όνοµα και έδρα, αλλά θα έδινε ένα µήνυµα της µορφής «Υπάρχει ήδη εγγραφή µε το ίδιο κλειδί». Εκτός από τους δύο τύπους περιορισµών ακεραιότητας που αναφέραµε παραπάνω υπάρχει και άλλη µία κατηγορία περιορισµών που σχετίζονται µε τη γνώση της εφαρµογής και όχι µε τη σχεδίαση της Βάσης ∆εδοµένων. Για παράδειγµα, στη Βάση ∆εδοµένων που περιγράφεται στο διάγραµµα σχέσεων – οντοτήτων του σχήµατος 3.9 µπορούµε να ορίσουµε περιορισµούς όπως «Κανένας παίκτης δεν µπορεί να έχει 100 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ γεννηθεί πριν από την τρέχουσα ηµεροµηνία» ή «Καµία οµάδα δεν µπορεί να έχει ιδρυθεί πριν από το 1911» ή «Κανένας παίκτης δεν µπορεί να έχει αριθµό µητρώου που να µην είναι εξαψήφιος αριθµός που να µην αρχίζει από 0». Αυτοί οι περιορισµοί δεν µπορούν φυσικά να προβλέπονται αυτόµατα από τη Βάση ∆εδοµένων (αφού σχετίζονται µε ιδιαιτερότητες της εκάστοτε εφαρµογής), αλλά όλα τα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων δίνουν τη δυνατότητα σχεδιασµού και επίβλεψης της τήρησης τέτοιων περιορισµών. Ας δούµε πώς επηρεάζεται η ακεραιότητα των δεδοµένων στις διάφορες πράξεις: ∂¶π§√°∏ Η επιλογή δεδοµένων είναι η πιο ακίνδυνη πράξη σε µία Βάση ∆εδοµένων, αφού δεν προϋποθέτει µεταβολές της Βάσης ∆εδοµένων στο φυσικό επίπεδο. Κατά συνέπεια, δεν επηρεάζει καθόλου την ακεραιότητα της Βάσης ∆εδοµένων. ∂π™∞°ø°∏ Κατά την εισαγωγή δεδοµένων η ακεραιότητα µπορεί να παραβιαστεί είτε µε την εισαγωγή µίας εγγραφής µε κενή τιµή σε κάποιο κλειδί, είτε µε εισαγωγή τιµής σε κλειδί που ήδη υπάρχει στη Βάση ∆εδοµένων, είτε µε εισαγωγή τιµών, για κάποια στήλη του πίνακα, που δεν ανταποκρίνονται στον αντίστοιχο τύπο δεδοµένων του κατηγορήµατος για τη συγκεκριµένη στήλη (π.χ. να εισαχθεί η τιµή «Νίκος» στο κατηγόρηµα έτος ίδρυσης, το οποίο αναµένει έναν ακέραιο αριθµό). Τα συστήµατα Βάσεων ∆εδοµένων φροντίζουν για την τήρηση των παραπάνω περιορισµών ενηµερώνοντας τον χρήστη για τα προβλήµατα στην εισαγωγή. ¢π∞°ƒ∞º∏ Η διαγραφή µπορεί να οδηγήσει σε παραβιάσεις ακεραιότητας σε σχέση µε άλλους πίνακες. Για παράδειγµα, εάν η οµάδα «Ολυµπιακός, Πειραιάς» έχει συµµετάσχει σε αγώνες και έχει παίκτες που αγωνίζονται σε αυτή και τη διαγράψουµε, τότε οι αγώνες θα αναφέρονται σε µία οµάδα που δεν υπάρχει και οι παίκτες θα αγωνίζονται σε οµάδα που δεν υπάρχει στη Βάση ∆εδοµένων. Τα περισσότερα συστήµατα 4.1 ∆√ ™Ã∂™π∞∫√ ª√¡∆∂§√ 101 Βάσεων ∆εδοµένων φροντίζουν να διαγράφουν αυτόµατα όλες τις εγγραφές στις σχέσεις που συµµετέχει µία εγγραφή που διαγράφεται ή παρέχουν τη δυνατότητα στο σχεδιαστή της Βάσης ∆εδοµένων να υλοποιήσει τους αντίστοιχους µηχανισµούς. ∂¡∏ª∂ƒø™∏ Η ενηµέρωση µπορεί να περιλαµβάνει αλλαγές σε κλειδί, ή όχι. Στη δεύτερη περίπτωση, το µόνο πρόβληµα µπορεί να προκύψει µόνο µε µεταβολή τιµών για κάποια στήλη του πίνακα, επειδή οι νέες τιµές δεν ανταποκρίνονται στον αντίστοιχο τύπο δεδοµένων του κατηγορήµατος για τη συγκεκριµένη στήλη. Τότε ισχύει ότι αναφέραµε για την εισαγωγή. Αντίθετα στην περίπτωση που η ενηµέρωση περιλαµβάνει αλλαγές σε κλειδί, τότε αυτό που συµβαίνει αντιστοιχεί σε α) διαγραφή της εγγραφής και β) εισαγωγή µίας νέας εγγραφής µε το νέο κλειδί. Κατά συνέπεια πρέπει να προσεχθούν οι περιορισµοί ακεραιότητας που αναφέραµε τόσο στη διαγραφή, όσο και στην εισαγωγή. ∫§∂π¢øª∞ Η Βάση ∆εδοµένων συνήθως δεν προορίζεται για χρήση από ένα χρήστη, αλλά (όπως αναφέραµε στο κεφάλαιο 1) από πολλούς χρήστες και µάλιστα ταυτόχρονα. Η ταυτόχρονη προσπέλαση των δεδοµένων όµως µπορεί να δηµιουργήσει προβλήµατα. Ας δούµε το παρακάτω παράδειγµα. Έχουµε µία Βάση ∆εδοµένων σε µία τράπεζα και ένα κοινό λογαριασµό που περιγράφεται στον παρακάτω πίνακα: Κωδικός Λογαριασµού α Ας υποθέσουµε ότι στη Βάση ∆εδοµένων έχει εισαχθεί και η παρακάτω εγγραφή που περιγράφει ότι δύο πελάτες (ο πελάτης µε κωδικό 98827654 και ο πελάτης µε κωδικό 98826531) έχουν 500.000 δραχµές σε ένα κοινό λογαριασµό: Κωδικός Λογαριασµού 1992003104 Κωδικός 1ου Πελάτη 98827654 Κωδικός 2ου Πελάτη 98826531 Ποσό 500000 Κωδικός 1ου Πελάτη Κωδικός 2ου Πελάτη Ποσό 102 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ Υποθέτουµε τώρα ότι την ίδια χρονική στιγµή και οι δύο πελάτες πηγαίνουν σε κάποιο µηχάνηµα αυτόµατων συναλλαγών και ελέγχουν τον λογαριασµό τους µε σκοπό να κάνουν ανάληψη. Ας υποθέσουµε ότι γίνονται τα παρακάτω βήµατα: Ο πελάτης 98827654 εξετάζει το ποσό στο λογαριασµό του, βλέπει ότι έχει 500.000 δραχµές υπόλοιπο και ζητάει ανάληψη 400.000 δραχµές. Ο πελάτης 98826531 εξετάζει επίσης το ποσό στον κοινό λογαριασµό πριν πραγµατοποιηθεί η εντολή ανάληψης του πελάτη 9882764 και βλέπει και αυτός ότι έχει 500.000 δραχµές υπόλοιπο και ζητάει ανάληψη 300.000 δραχµές. Τι θα συµβεί σε αυτή την περίπτωση; Εάν η Βάση ∆εδοµένων δεν έχει κάποιο µηχανισµό να σταµατάει κάθε πρόσβαση στον κοινό λογαριασµό µέχρι να ολοκληρωθεί η πρώτη συναλλαγή τότε, θεωρητικά, οι δύο πελάτες θα µπορούσαν να είχαν κάνει ανάληψη 700.000 δραχµές από ένα λογαριασµό που είχε υπόλοιπο 500.000 δραχµές. Για να µη προκύπτουν τέτοια προβλήµατα η Βάση ∆εδοµένων κλειδώνει τις εγγραφές στις οποίες πραγµατοποιούνται αλλαγές µέχρι να ολοκληρωθεί η συναλλαγή και µετά δίνει τη δυνατότητα να γίνει η επόµενη συναλλαγή. Το πρόβληµα του κλειδώµατος είναι ένα αρκετά σοβαρό πρόβληµα που απασχολεί κάθε βιβλίο που περιγράφει προχωρηµένα θέµατα Βάσεων ∆εδοµένων. ∆εν θα επεκταθούµε σε αυτό το θέµα στο βιβλίο που διαβάζετε, αλλά σας προτείνουµε να µελετήσετε κάποιο από τα προτεινόµενα βιβλία στο τέλος του κεφαλαίου. Πιστεύουµε ότι θα βρείτε πολύ ενδιαφέροντα τα θέµατα χειρισµού των συναλλαγών και αντιµετώπισης προβληµάτων που µπορεί να δηµιουργήσει ένα κακό κλείδωµα. Για παράδειγµα το αδιέξοδο (deadlock) που σηµαίνει ότι δύο συναλλαγές έχουν µείνει σε στάσιµη κατάσταση περιµένοντας η µία την άλλη και δεν µπορούν να ξεφύγουν από αυτή την κατάσταση, ή το livelock που σηµαίνει ότι µία συναλλαγή έχει µείνει στάσιµη και παρόλο που το σύστηµα λειτουργεί κανονικά, αυτή δεν µπορεί να επανέλθει σε λειτουργία. 4 . 1 ∆ √ ™ à ∂ ™ π ∞ ∫ √ ª √ ¡ ∆ ∂ § √ / 4 . 2 ™ à ∂ ™ π ∞ ∫ ∏ ∞ § ° ∂ µ ƒ∞ 103 Ακολουθούν κάποιες προτάσεις. Απαντήστε σωστό ή λάθος, ανάλογα µε το τι πιστεύετε για κάθε πρόταση, επιλέγοντας το αντίστοιχο τετραγωνάκι. Σωστό Λάθος Η ενηµέρωση δεν µπορεί να δηµιουργήσει προβλήµατα ακεραιότητας. Τα προβλήµατα δηµιουργούνται µόνο στην εισαγωγή ή στη διαγραφή. Κάθε εισαγωγή δεδοµένων παραβιάζει την ακεραιότητα της Βάσης ∆εδοµένων, όταν γίνεται εισαγωγή σε κλειδί. Η επιλογή δεν επηρεάζει την ακεραιότητα. λείδωµα δεδοµένων δεν χρειάζεται να γίνει κατά την επιλογή. Όταν δύο χρήστες κάνουν επιλογή των ίδιων δεδοµένων την ίδια χρονική στιγµή, η Βάση ∆εδοµένων κλειδώνει τα δεδοµένα και επιτρέπει µόνο σε ένα χρήστη κάθε φορά να τα διαβάζει. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.2 ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ ❏ Στους πίνακες που έχουν προκύψει ως απάντηση στη δραστηριότητα 4.1 πραγµατοποιήστε πράξεις εισαγωγής, διαγραφής και ενηµέρωσης. Υλοποιήστε τουλάχιστον 5 πράξεις για κάθε περίπτωση και ελέγξτε εάν η πράξη σας προσκρούει σε κάποιους περιορισµούς ακεραιότητας. Εντοπίστε τι αλλαγές θα έπρεπε να κάνετε στα δεδοµένα σας ώστε να µην υπάρχει πρόβληµα µε τους περιορισµούς. ¢Ú·ÛÙËÚÈfiÙËÙ· 4.2 104 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ 4.2 ™¯ÂÛȷ΋ ¿ÏÁ‚ڷ ™ÎÔfi˜ Σκοπός της ενότητας είναι να παρουσιάσει τη σχεσιακή άλγεβρα και ειδικότερα τις πράξεις της σχεσιακής άλγεβρας. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • περιγράψετε τι είναι η σχεσιακή άλγεβρα και πού χρησιµοποιείται • εξηγήσετε κάθε πράξη της σχεσιακής άλγεβρας τόσο από πλευράς συµβολισµού, όσο και από πλευράς εφαρµογής και αποτελέσµατος • εκτελέσετε πράξεις σχεσιακής άλγεβρας σε πίνακες • υλοποιήσετε ερωτήσεις µε τη βοήθεια πράξεων της σχεσιακής άλγεβρας ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή θα περιγράψουµε τις βασικές πράξεις της σχεσιακής άλγεβρας. Στην ενότητα 4.2.1 περιγράφεται η πράξη επιλογή (selection), στην ενότητα 4.2.2 περιγράφεται η πράξη προβολή (projection), στην ενότητα 4.2.3 περιγράφεται η πράξη συνόλων ένωση (union) και στην 4.2.4 η πράξη συνόλων τοµή (intersection), στην ενότητα 4.2.5 περιγράφεται η πράξη διαφορά (difference) και στην ενότητα 4.2.6 περιγράφεται η πράξη καρτεσιανό γινόµενο (cartesian join). Τέλος, στην ενότητα 4.2.7 περιγράφεται η πράξη σύνδεση (join) και στην ενότητα 4.2.8 περιγράφεται η πράξη φυσική σύνδεση (natural join) Στην ενότητα αυτή δεν περιγράφουµε µερικές εξειδικευµένες πράξεις, όπως η πράξη διαίρεση (quotient), η πράξη εξωτερικής συνένωσης (outer join), η πράξη εξωτερική ένωση (outer union) και άλλες. Όλες τις παραπάνω πράξεις µπορείτε να τις διαβάσετε στη σχετική βιβλιογραφία. Η σχεσιακή άλγεβρα (όπως και ο σχεσιακός υπολογισµός που περιγράφεται στην επόµενη ενότητα) είναι πρότυπες γλώσσες ερωτήσεων που έχουν θεωρητική αξία και όχι πρακτική εφαρµογή. Xρησιµοποιούνται για τη µοντελοποίηση ερωτήσεων, δηλαδή για να περιγράψουν σε αφηρηµένο επίπεδο τις ερωτήσεις προς τη Βάση ∆εδοµένων και δεν αντιστοιχούν στο φυσικό επίπεδο σε πραγµατική υλοποίηση. Παρέχουν ένα σύνολο δυνατοτήτων, το οποίο επεξηγεί τις δυνατότητες των γλωσσών ερω- 4 . 2 ™ à ∂ ™ π ∞ ∫ ∏ ∞ § ° ∂ µ ƒ∞ 105 τήσεων, αλλά είναι σαφέστατα υποσύνολο των δυνατοτήτων των γλωσσών που θα περιγράψουµε στα επόµενα δύο κεφάλαια. Στη διεθνή βιβλιογραφία η σχεσιακή άλγεβρα αναφέρεται σε σχέσεις (relations) και πλειάδες (tuples). Στις πράξεις που ακολουθούν θα χρησιµοποιούµε τους όρους «πίνακες» αντί για σχέσεις (αφού αναφερόµαστε σε πίνακες σχέσεων και οντοτήτων) και «εγγραφές» αντί για πλειάδες, αφού σε µία Βάση ∆εδοµένων µία πλειάδα δεδοµένων αντιστοιχεί σε µία εγγραφή, για να είµαστε συνεπείς µε την ορολογία που χρησιµοποιήσαµε στα προηγούµενα κεφάλαια. Στα παραδείγµατα της ενότητας που ακολουθούν θα χρησιµοποιήσουµε τους δύο πίνακες που δίνουµε παρακάτω στο παράδειγµα 4.1 µε τα δεδοµένα που αναγράφονται. ¶·Ú¿‰ÂÈÁÌ· 4.1 ∆ίνονται οι δύο πίνακες «Μάνατζερ» και «Κατηγορία» µε µερικά πειραµατικά δεδοµένα. ΜΑΝΑΤΖΕΡ Όνοµα Νίκος Κώστας Πέτρος Ηλίας Μιχάλης Επώνυµο Βασιλείου Χρήστου Ιωάννου Ηλίου Βασιλείου Τηλέφωνο 061-555666 061-888999 01-8889990 01-8889992 031-666777 ΠΑΙΚΤΗΣ Α. Μητρ. 23711 18902 82002 90203 88991 81209 Όνοµα Νίκος Μιχάλης Πέτρος Νίκος Νίκος Πέτρος Επώνυµο Ιωάννου Ξανθός Ηλίου Μιχαήλ Ξανθός Πέτρου Πατρ/µο Κώστας Νίκος Μιχάλης Κώστας Ηλίας Γιώργος Ύψος 1,99 2,03 2,00 1,96 1,88 2,09 18/08/80 Ηµ. Γέν. 20/11/80 17/03/78 03/04/81 11/03/82 Λάρισα Αθήνα Πόλη Πάτρα Αθήνα Πάτρα Στις ενότητες που ακολουθούν όλες οι πράξεις θα χρησιµοποιούν αυτά τα παραδείγµατα. 106 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ 4.2.1 EÈÏÔÁ‹ Η πράξη της επιλογής δίνει τη δυνατότητα επιλογής κάποιων εγγραφών από ένα πίνακα µε βάση µία συνθήκη επιλογής. ∆ίνεται από τον τύπο: σΕ (Α) (4.1) Σηµαίνει επιλογή όλων των εγγραφών από τον πίνακα Α, οι οποίες ικανοποιούν τη συνθήκη Ε. Η συνθήκη Ε µπορεί να περιέχει τους αριθµητικούς τελεστές <, >, Θ, ≥, Ι και =, καθώς και τους λογικούς τελεστές AND, OR, και NOT. Έτσι η εντολή σ Όνοµα=Νίκος (Παίκτης) στη Βάση ∆εδοµένων του παραδείγµατος 4.1 θα είχε ως αποτέλεσµα τον ακόλουθο πίνακα: Α. Μητρ. 23711 90203 88991 Όνοµα Νίκος Νίκος Νίκος Επώνυµο Ιωάννου Μιχαήλ Ξανθός Πατρ/µο Κώστας Κώστας Ηλίας Ύψος 1,99 1,96 1,88 Ηµ. Γέν. 20/11/80 11/03/82 Λάρισα Πόλη Πάτρα ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.3 Υπολογίστε τα παρακάτω στους πίνακες του παραδείγµατος 4.1: σ Όνοµα=Νίκος AND Ύψος > 1,96 (Παίκτης) σ Όνοµα=Νίκος (Μάνατζερ) 4.2.2 ¶ÚÔ‚ÔÏ‹ Η πράξη της προβολής δίνει τη δυνατότητα επιλογής κάποιων στηλών από ένα πίνακα, ή την αναδιάταξη των στηλών του πίνακα. ∆ίνεται από τον τύπο: Επώνυµο Ιωάννου Ξανθός Ηλίου Μιχαήλ Ξανθός Πέτρου Ύψος 1,99 2,03 2,00 1,96 1,88 2,09 π Σ1, Σ2, … Σn (Α) (4.2) Σηµαίνει επιλογή µόνο των στηλών Σ1, Σ2, …, Σn από τον πίνακα Α και εµφάνισή τους µε αυτή τη σειρά. Έτσι, η εντολή π Επώνυµο, Ύψος (Παίκτης) θα είχε ως αποτέλεσµα τον δίπλα πίνακα. 4 . 2 ™ à ∂ ™ π ∞ ∫ ∏ ∞ § ° ∂ µ ƒ∞ 107 Kάντε τις παρακάτω πράξεις στους πίνακες του παραδείγµατος 4.1: π Όνοµα, Επώνυµο, Πόλη (Παίκτης) π Επώνυµο (Μάνατζερ) ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.4 Υλοποιήστε την ερώτηση «Βρείτε µόνο το επώνυµο και το ύψος των παικτών που έχουν καταγωγή από την πόλη Πάτρα». ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.5 4.2.3 ŒÓˆÛË Η πράξη της ένωσης αντιστοιχεί στη γνωστή πράξη της ένωσης από τη θεωρία συνόλων και δίνεται από τον τύπο: Α»Β (4.3) Σηµαίνει επιλογή των γραµµών από τους πίνακες Α, Β που υπάρχουν είτε στον πίνακα Α, είτε στον πίνακα Β, είτε και στους δύο πίνακες. 4.2.4 TÔÌ‹ Η πράξη της τοµής αντιστοιχεί στη γνωστή πράξη της τοµής από τη θεωρία συνόλων και δίνεται από τον τύπο: Α«Β (4.4) Σηµαίνει επιλογή των γραµµών από τους πίνακες Α, Β που υπάρχουν και στον πίνακα Α και στον πίνακα Β. 4.2.5 ¢È·ÊÔÚ¿ Η πράξη της διαφοράς αντιστοιχεί στη γνωστή πράξη της διαφοράς από τη θεωρία συνόλων και δίνεται από τον τύπο: Α–Β (4.5) Σηµαίνει επιλογή των γραµµών από τους πίνακες Α, Β που υπάρχουν στον Α και δεν υπάρχουν στον Β. Ισχύει ότι Α « Β = Α – (Α – Β). Χρησιµοποιώντας προβολές από τους πίνακες του παραδείγµατος 4.1 δείξτε παραδείγµατα της παραπάνω ισότητας. ¢Ú·ÛÙËÚÈfiÙËÙ· 4.3 108 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.6 Kάντε τις παρακάτω πράξεις: π Όνοµα (Παίκτης) » π Όνοµα (Μάνατζερ) π Όνοµα (Παίκτης) « π Όνοµα (Μάνατζερ) π Όνοµα (Παίκτης) – π Όνοµα (Μάνατζερ) 4.2.6 ∫·ÚÙÂÛÈ·Ófi ÁÈÓfiÌÂÓÔ Η πράξη του καρτεσιανού γινοµένου δύο συνόλων Α και Β δίνεται από τον τύπο: Α¥Β (4.6) Σηµαίνει δηµιουργία ενός νέου πίνακα µε arity το άθροισµα των arity των πινάκων Α και Β, ο οποίος θα έχει γραµµές τους συνδυασµούς όλων των γραµµών του πίνακα Α µε όλες τις γραµµές του πίνακα Β. ¢Ú·ÛÙËÚÈfiÙËÙ· 4.4 Υπολογίστε το καρτεσιανό γινόµενο Παίκτης ¥ Μάνατζερ. 4.2.7 ™‡Ó‰ÂÛË Η πράξη της σύνδεσης δύο συνόλων Α και Β δίνεται από τον τύπο: A >< B E (4.7) Η πράξη της σύνδεσης αντιστοιχεί στην πράξη σ Ε (Α ¥ Β) και σηµαίνει την επιλογή από το καρτεσιανό γινόµενο Α ¥ Β µόνο των γραµµών που ικανοποιούν τη συνθήκη Ε. Η συνθήκη Ε µπορεί να περιέχει τους αριθµητικούς τελεστές <, >, Θ, ≥, Ι και =, καθώς και τους λογικούς τελεστές AND, OR, και NOT. 4.2.8 º˘ÛÈ΋ Û‡Ó‰ÂÛË Η πράξη της φυσικής σύνδεσης δύο συνόλων Α και Β δίνεται από τον τύπο: A >< B (4.8) Η πράξη της φυσικής σύνδεσης εφαρµόζεται σε πίνακες που έχουν 4 . 2 ™ à ∂ ™ π ∞ ∫ ∏ ∞ § ° ∂ µ ƒ∞ / 4 . 3 ™ à ∂ ™ π ∞ ∫ √ ™ À ¶ √ § √ ° π ™ ª √ ™ 109 στήλες µε κοινά κατηγορήµατα και σηµαίνει την επιλογή από το καρτεσιανό γινόµενο Α ¥ Β µόνο των γραµµών που οι στήλες µε τα κοινά κατηγορήµατα έχουν ίδιες τιµές. Η φυσική σύνδεση έχει ως αποτέλεσµα την εµφάνιση ενός νέου πίνακα, που περιέχει µόνο µία φορά τις κοινές στήλες. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.7 ∆ίνονται οι παρακάτω πίνακες Α, Β και Γ (για λόγους απλότητας έχουµε ως δεδοµένα αριθµούς). Υπολογίστε τα εξής: 1) A 2) Γ 3) A B Γ∆ ∆ Γ Πίνακας Α Πίνακας B Γ 7 6 ∆ 4 7 3 E 5 1 8 B 1 3 Πίνακας Γ Γ 7 6 ∆ 4 6 Α 3 1 Β 1 3 4.3 ™¯ÂÛÈ·Îfi˜ ˘ÔÏÔÁÈÛÌfi˜ ™ÎÔfi˜ Σκοπός της ενότητας είναι να παρουσιάσει το σχεσιακό υπολογισµό και παραδείγµατα µετατροπής από σχεσιακή άλγεβρα σε σχεσιακό υπολογισµό. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • περιγράψετε τι είναι ο σχεσιακός υπολογισµός και πού χρησιµοποιείται • υλοποιήσετε ερωτήσεις µε τη βοήθεια πράξεων του σχεσιακού υπολογισµού • µετατρέψετε ερωτήσεις και πράξεις τις σχεσιακής άλγεβρας σε ερωτήσεις και πράξεις του σχεσιακού υπολογισµού 110 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή περιγράφουµε συνοπτικά το σχεσιακό υπολογισµό. Σε περίπτωση που θέλετε να εµβαθύνετε στο σχεσιακό υπολογισµό µπορείτε να ανατρέξετε στη βιβλιογραφία προαιρετικής ανάγνωσης που βρίσκεται στο τέλος του κεφαλαίου. Ο σχεσιακός υπολογισµός χρησιµοποιεί εκφράσεις της µορφής: { x E ( x )} (4.9) Στον τύπο (4.9) το x αντιστοιχεί σε µία εγγραφή η οποία πληροί τις προδιαγραφές της σχέσης Ε. Το σύµβολο « | » έχει την έννοια «τέτοιο ώστε» ή «για την οποία ισχύει» και οι αγκύλες υποδηλώνουν το σύνολο των x. Άρα η έκφραση (4.9) σηµαίνει «οι εγγραφές x για τις οποίες ισχύει η συνθήκη E(x)». Επίσης το «x» µπορεί να είναι και τµήµα µιας εγγραφής και όχι ολόκληρη η εγγραφή. Η συνθήκη στον τύπο (4.9) µπορεί να χρησιµοποιεί µόνο τα παρακάτω σύµβολα: • Ÿ το οποίο αντιστοιχεί στο λογικό AND. Η σχέση Α Ÿ Β σηµαίνει «να είναι αληθές και το Α και το Β» • Ú το οποίο αντιστοιχεί στο λογικό OR. Η σχέση Α Ú Β σηµαίνει «να είναι αληθές είτε το Α, είτε το Β, είτε και τα δύο» • ÿ το οποίο αντιστοιχεί στο λογικό NOT. Η σχέση ÿ Α σηµαίνει «να µην είναι αληθές το Α» • " το οποίο αντιστοιχεί στην έννοια «για κάθε». Η σχέση (" x) σηµαίνει «για κάθε x» • $ το οποίο αντιστοιχεί στην έννοια «υπάρχει». Η σχέση ( $ x) σηµαίνει «υπάρχει ένα τουλάχιστον x» • αριθµητικούς τελεστές και συγκεκριµένα τους <, >, £, ≥, π και = • παρενθέσεις για την προτεραιότητα των πράξεων στις σχέσεις Χρησιµοποιώντας τα παραπάνω σύµβολα µπορούν να περιγραφούν ερωτήσεις προς τη Βάση ∆εδοµένων αντίστοιχες µε τις ερωτήσεις που περιγράψαµε για τη σχεσιακή άλγεβρα. Για να δώσουµε την arity (αριθµός στηλών) µίας εγγραφής συνήθως αναφέρουµε µία παρένθεση δίπλα στην εγγραφή, δηλαδή η έκφραση σηµαίνει «οι 4.3 ™Ã∂™π∞∫√™ À¶√§√°π™ª√™ 111 εγγραφές x µε arity y που πληρούν τη σχέση Ε». { x ( y ) E ( x )} (4.10) Επίσης για να εντοπίσουµε ένα συγκεκριµένο πεδίο της εγγραφής x χρησιµοποιούµε τις αγκύλες «[z]». Για παράδειγµα η σχέση σηµαίνει «οι εγγραφές x µε 4 πεδία, από τα οποία το πεδίο όνοµα είναι ίσο µε Νίκος». {x (4) | x[όνοµα]=Νίκος } (4.11) Ο εντοπισµός των πεδίων µπορεί να γίνει και µε τον αριθµητικό συµβολισµό του πεδίου, δηλαδή η σχέση σηµαίνει «οι εγγραφές x µε 4 πεδία από τα οποία το 2ο πεδίο είναι ίσο µε Νίκος». {x (4) | x[2]=Νίκος } (4.12) Ας δούµε άλλο ένα παράδειγµα έκφρασης σχεσιακού υπολογισµού. ∆ίνεται η ακόλουθη σχέση για ένα πίνακα Α µε δύο κατηγορήµατα: { x ( 2 ) Ey )( A( x ) Ÿ A( y ) Ÿ ( x[1] π y[1] Ú x[ 2] π y[ 2]) ( ) (4.13) Η σχέση αυτή επιστρέφει τον πίνακα Α, εάν αυτός έχει περισσότερες της µίας εγγραφής, ενώ σε αντίθετη περίπτωση δεν επιστρέφει τίποτε. Προσέξτε τη σχέση στο δεύτερο µέρος της έκφρασης (4.13). Σηµαίνει «να υπάρχει µία εγγραφή y τέτοια ώστε και το x και το y να είναι εγγραφές του Α, αλλά επίσης να είναι διαφορετικό το x από το y». Υλοποιήστε µε σχεσιακό υπολογισµό τις πράξεις τις σχεσιακής άλγεβρας που ακολουθούν: σ Ε (Α) π Σ1, Σ2 (Α) Α»Β Α–Β Α¥B ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.8 Εκφράστε µε σχεσιακό υπολογισµό όλες τις πράξεις της σχεσιακής άλγεβρας για τις οποίες µιλήσαµε στην ενότητα 4.2. ¢Ú·ÛÙËÚÈfiÙËÙ· 4.5 112 KEºA§AIO 4: ™Ã∂™π∞∫∂™ B∞™∂π™ ¢∂¢√ª∂¡ø¡ ™‡ÓÔ„Ë Στο κεφάλαιο αυτό περιγράψαµε τις σχεσιακές Βάσεις ∆εδοµένων και µιλήσαµε για τις βασικές έννοιες και πράξεις, καθώς και για τους περιορισµούς ακεραιότητας και το κλείδωµα. Περιγράψαµε εν συντοµία δύο βασικά σχεσιακά µοντέλα ερωτήσεων: τη σχεσιακή άλγεβρα και το σχεσιακό υπολογισµό. ∆εν µιλήσαµε για όλες τις πράξεις της σχεσιακής άλγεβρας, ούτε καλύψαµε αναλυτικά το σχεσιακό υπολογισµό και για αυτό το λόγο σας προτείνουµε να ανατρέξετε στη βιβλιογραφία για να µελετήσετε σε βάθος τα δύο αυτά µοντέλα ερωτήσεων. BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ÌÂϤÙË [1] Elmasri R. & Navathe S. B., Fundamentals of Database Systems, Addison–Wesley, 1994. Το βιβλίο υπάρχει και σε Ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Στο κεφάλαιο 6 του βιβλίου καλύπτονται τα θέµατα των σχεσιακών Βάσεων ∆εδοµένων. Το θέµα του κλειδώµατος περιγράφεται στο κεφάλαιο 18. [2] Ulman J. D., Principles of Database Systems, Computer Science Press, 1982. Είναι ένα από το πρώτα και βασικότερα βιβλία για Βάσεις ∆εδοµένων. Τα αντικείµενα που συζητήσαµε στο κεφάλαιο 4 του βιβλίου αυτού καλύπτονται στα κεφάλαια 5 και 7 του συγκεκριµένου βιβλίου. Στις ενότητες 5.2 και 5.3 µπορείτε να βρείτε µία πολύ αναλυτική περιγραφή των βασικών αρχών της σχεσιακής άλγεβρας και του σχεσιακού υπολογισµού αντίστοιχα. [3] Silberschatz A., Korth H., Sudarshan S, Database System Concepts, Third Edition, McGraw–Hill, 1986. Το σχεσιακό µοντέλο περιγράφεται στο κεφάλαιο 3 του βιβλίου. Το θέµα του κλειδώµατος των δεδοµένων περιγράφεται αναλυτικά στο κεφάλαιο 14. [4] C.J.Date, An Introduction to Database Systems, Volume I, Fourth Edition, Addison–Wesley, 1986. Στα κεφάλαια 4 έως και 9 περιγράφεται ένα σχεσιακό σύστηµα Βάσεων ∆εδοµένων (το DB2). Τα τµήµατα που περιγράψαµε στο παρόν βιβλίο καλύπτονται κυρίως στο κεφάλαιο 5 του προτεινόµενου βιβλίου. [5] Papazoglou M. and Valder W., Relational Database Management, Prentice Hall, 1989. Ολόκληρο το βιβλίο είναι βασισµένο στο σχεσιακό µοντέλο. Θα µπορούσατε να το διαβάσετε ως µία καλή επανάληψη στο σχεσιακό µοντέλο και µε στόχο να εµβαθύνετε τις γνώσεις σας στο µοντέλο αυτό. ∫ ∂ H °ÏÒÛÛ· EÚˆÙ‹ÛÂˆÓ SQL ™ÎÔfi˜ Σκοπός του κεφαλαίου είναι να παρουσιαστεί η γλώσσα ερωτήσεων και αλλαγών SQL και να περιγραφεί η σύνταξη ερωτήσεων σε SQL. Επίσης, σκοπός του κεφαλαίου είναι να µελετηθούν ερωτήσεις τόσο για εξαγωγή δεδοµένων από τους πίνακες µίας σχεσιακής Βάσης ∆εδοµένων, όσο και να παρουσιαστεί η χρήση εντολών SQL για τη δηµιουργία πινάκων, αλλαγή δεδοµένων στα στοιχεία ενός πίνακα και διαγραφή δεδοµένων από έναν πίνακα. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • περιγράψετε το σκοπό των γλωσσών ερωτήσεων και τη χρήση µίας γλώσσας ερωτήσεων στα πλαίσια ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων • περιγράψετε τις εντολές της γλώσσας ερωτήσεων SQL που χρησιµοποιούνται για δηµιουργία πινάκων, αλλαγή ή διαγραφή δεδοµένων από πίνακες σε µία Βάση ∆εδοµένων, καθώς και αυτές τις εντολές της γλώσσας ερωτήσεων SQL που χρησιµοποιούνται για αναζήτηση και παρουσίαση δεδοµένων που αντλούνται από µία Βάση ∆εδοµένων • χρησιµοποιήσετε εντολές της γλώσσας ερωτήσεων SQL για να αντλήσετε δεδοµένα από παραδείγµατα Βάσεων ∆εδοµένων που περιγράφηκαν στα προηγούµενα κεφάλαια • µετατρέψετε ερωτήσεις προς µία Βάση ∆εδοµένων εκφρασµένες αρχικά σε απλή (φυσική) γλώσσα στη γλώσσα ερωτήσεων SQL ŒÓÓÔȘ ÎÏÂȉȿ • Γλώσσες Ερωτήσεων (Query Languages) • Γλώσσα Ορισµού ∆εδοµένων (Data Definition Language) • Γλώσσα Χειρισµού ∆εδοµένων (Data Manipulation Language) 5 º ∞ § ∞ π √ 114 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL • Συµβολοσειρά (String) • Μετονοµασίες (Aliases) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό περιγράφουµε τη γλώσσα ερωτήσεων SQL, µία γλώσσα που κυριαρχεί στις σηµερινές σχεσιακές Βάσεις ∆εδοµένων. Στην ενότητα 5.1 γίνεται εισαγωγή στις βασικές αρχές των γλωσσών ερωτήσεων και των χρήσεων των γλωσσών ερωτήσεων από τα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων. Στην ενότητα 5.2 παρουσιάζονται οι βασικές εντολές της γλώσσας ερωτήσεων SQL που χρησιµοποιούνται για αναζήτηση δεδοµένων από µία Βάση ∆εδοµένων. ∆ίνονται παραδείγµατα εντολών σε SQL και ασκήσεις µετατροπής ερωτήσεων από φυσική γλώσσα στη γλώσσα ερωτήσεων SQL. Στην ενότητα 5.3 παρουσιάζονται οι εντολές της γλώσσας ερωτήσεων SQL που χρησιµοποιούνται για ορισµό, διαχείριση και παρουσίαση δεδοµένων, καθώς και αντίστοιχα παραδείγµατα. Τέλος, στην ενότητα 5.4 γίνεται η σύνοψη του κεφαλαίου και παρουσιάζεται η προτεινόµενη βιβλιογραφία για περαιτέρω εµβάθυνση στο αντικείµενο της γλώσσας ερωτήσεων SQL. 5.1 ∞Ú¯¤˜ ÙˆÓ ÁψÛÛÒÓ ÂÚˆÙ‹ÛÂˆÓ ™ÎÔfi˜ Σκοπός της ενότητας είναι να περιγραφούν γενικά οι αρχές των γλωσσών ερωτήσεων και η χρήση τους σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, καθώς και να γίνει αναφορά στις δύο γλώσσες ερωτήσεων που θα περιγράψουµε σε αυτό το βιβλίο, την SQL και την QBE. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε τι είναι γλώσσα ερωτήσεων • περιγράψετε τη χρήση των γλωσσών ερωτήσεων και το τι παρέχουν στο χρήστη µίας Βάσης ∆εδοµένων • αναφέρετε τουλάχιστον δύο γλώσσες υποβολής ερωτήσεων Στο προηγούµενο κεφάλαιο περιγράψαµε τη σχεσιακή άλγεβρα και το σχεσιακό λογισµό. Τόσο η σχεσιακή άλγεβρα, όσο και ο σχεσιακός λογισµός θεωρούνται από τις πρώτες θεωρητικές γλώσσες ερωτήσεων. Οι γλώσσες ερωτήσεων, όµως, πρέπει να ικανοποιούν µία πρακτική ανάγκη του χρήστη µίας Βάσης ∆εδοµένων. Πρέπει να του παρέχουν τη δυνατότητα να µπορεί να υποβάλει ερωτήσεις στη Βάση ∆εδοµένων και µε βάση αυτές τις ερωτήσεις να συλλέγει δεδοµένα από τη Βάση ∆εδοµένων που να ικανοποιούν τους περιορισµούς που έθεσε στην ερώτηση. Ένα βασικό στοιχείο που πρέπει να παρέχουν τα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων είναι µία γλώσσα ερωτήσεων. Αυτή η γλώσσα ερωτήσεων θα πρέπει να δίνει τη δυνατότητα στο χρήστη να υποβάλλει ερωτήσεις προς τη Βάση ∆εδοµένων, στις οποίες ερωτήσεις ο χρήστης να προσδιορίζει µόνο το προσδοκώµενο αποτέλεσµα (δηλαδή το σύνολο των επιζητούµενων δεδοµένων) και όχι τον τρόπο µε τον οποίο θα υλοποιηθεί η ερώτηση ή τον τρόπο µε τον οποίο θα βελτιστοποιηθεί η εκτέλεσή της. Αυτό το χαρακτηριστικό, δηλαδή η ανεξαρτησία του τελικού χρήστη από θέµατα που σχετίζονται µε το φυσικό επίπεδο ή µε την απόδοση 116 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL της εκτέλεσης της ερώτησης, είναι βασική προδιαγραφή και επίτευγµα των Συστηµάτων ∆ιαχείρισης Βάσεων ∆εδοµένων. Για αυτό το λόγο, γλώσσες όπως η σχεσιακή άλγεβρα ή ο σχεσιακός λογισµός δεν χρησιµοποιήθηκαν ως γλώσσες ερωτήσεων, παρά µόνο για τη θεωρητική µελέτη των γλωσσών αυτών. Για παράδειγµα, στη σχεσιακή άλγεβρα πρέπει ο χρήστης να ορίσει µια συγκεκριµένη ακολουθία πράξεων που όταν εκτελεστούν θα δώσουν το επιθυµητό αποτέλεσµα. Αυτό δεν συµβαίνει σε γλώσσες ερωτήσεων, όπως η SQL, που αναλύουµε σε αυτό το κεφάλαιο, ή όπως η QBE που αναλύεται στο κεφάλαιο 6. Σε αυτές τις γλώσσες ο χρήστης δηλώνει το επιθυµητό σύνολο δεδοµένων (εισάγοντας µία σειρά από περιορισµούς) και αφήνει το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων να αναλάβει την υλοποίηση και βελτιστοποίηση των κατάλληλων βηµάτων ώστε να οδηγηθεί στο επιθυµητό αποτέλεσµα. Στο κεφάλαιο αυτό θα παρουσιαστεί η γλώσσα SQL. Το ακρωνύµιο SQL προκύπτει από το Structured Query Language. Αρχικά η SQL ονοµαζόταν SEQUEL από το Structured English Query Language (στο βιβλίο του Ullman, “Principles of Database Systems”, που είναι ένα από το πρώτα και βασικότερα βιβλία για Βάσεις ∆εδοµένων, θα τη βρείτε να αναφέρετε ως SEQUEL). Αρχικά η SQL υλοποιήθηκε για το System R που ήταν ένα πειραµατικό σύστηµα της IBM, αλλά σήµερα εξελίχθηκε και τυποποιήθηκε έτσι ώστε να αποτελεί πρότυπο γλώσσας ερωτήσεων. Έχουν υπάρξει ως πρότυπα οι SQL1, SQL2 και SQL3 σε συνεργασία ANSI και ISO. Η γλώσσα ερωτήσεων SQL δίνει δυνατότητες τόσο για αναζήτηση δεδοµένων, όσο και για ορισµό δεδοµένων, ενώ είναι δυνατή και η ενσωµάτωσή της µέσα σε γλώσσες προγραµµατισµού (εµφωλιασµένη SQL). Είναι λοιπόν τόσο Γλώσσα Ορισµού ∆εδοµένων όσο και Γλώσσα Χειρισµού ∆εδοµένων. Στην ενότητα 5.2 θα δούµε τη χρήση της SQL ως γλώσσα χειρισµού δεδοµένων, ενώ στην ενότητα 5.3 ως γλώσσα ορισµού δεδοµένων. Η γλώσσα ερωτήσεων QBE που παρουσιάζεται στο κεφάλαιο 6 είναι µία γλώσσα που βρίσκεται πιο κοντά στη φιλοσοφία του σχεσιακού υπολογισµού από ότι στη φιλοσοφία της σχεσιακής άλγεβρας. Η διαφορά της µε την SQL είναι ότι ο χρήστης δεν χρειάζεται να περιγράψει µία καθορισµένη ερώτηση, αλλά συµπληρώνει πίνακες µε στοι- 5.1 ∞ƒÃ∂™ ∆ø¡ °§ø™™ø¡ ∂ƒø∆∏™∂ø¡ / 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 117 χεία, δηλαδή ένα παράδειγµα, µε βάση το οποίο επιλέγονται τα στοιχεία. QBE σηµαίνει Query by Example, ακριβώς για να εκφράσει αυτή τη σχεδίαση των ερωτήσεων µε βάση ένα παράδειγµα από έναν πίνακα. Η QBE υλοποιήθηκε από την IBM. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.1 Γράψτε τι σηµαίνουν οι παρακάτω συντοµογραφίες: 1) SQL 2) SEQUEL 3) QBE ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… Μελετήστε την προτεινόµενη βιβλιογραφία, καθώς και όποια άλλη βιβλιογραφία έχετε στη διάθεσή σας είτε από την προσωπική σας βιβλιοθήκη, είτε από τη βιβλιοθήκη του Ελληνικού Ανοικτού Πανεπιστηµίου. Επίσης, µελετήστε τα εγχειρίδια των Συστηµάτων ∆ιαχείρισης Βάσεων ∆εδοµένων που υπάρχουν στα εργαστήρια του Ελληνικού Ανοικτού Πανεπιστηµίου ή όπου άλλου έχετε πρόσβαση. Μετά από τη µελέτη σας δώστε ένα κατάλογο µε τα Συστήµατα που βρήκατε και ποια από αυτά υποστηρίζουν τη γλώσσα ερωτήσεων SQL και ποια τη γλώσσα QBE. Ποια συστήµατα υποστηρίζουν και τις δύο γλώσσες; (Αναφέρατε και ποια είναι η κύρια γλώσσα ερωτήσεων στην περίπτωση που υποστηρίζουν και τις δύο.) ¢Ú·ÛÙËÚÈfiÙËÙ· 5.1 5.2 ∞Ó·˙‹ÙËÛË ‰Â‰ÔÌ¤ÓˆÓ ÛÙËÓ SQL ™ÎÔfi˜ Σκοπός της ενότητας είναι να παρουσιαστεί η SQL ως γλώσσα χειρισµού δεδοµένων. Θα δείξουµε τη χρήση της SQL καθαρά για αναζήτηση δεδοµένων, δηλαδή θα δείξουµε πώς ερωτήσεις που θέλαµε να µπορούµε να υποβάλλουµε στη Βάση ∆εδοµένων µπορούν να δοθούν σε SQL. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: 118 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL • χρησιµοποιήσετε τις εντολές τις SQL για να σχηµατίσετε ερωτήσεις και να γνωρίζετε τόσο τη χρήση κάθε εντολής, όσο και την ακριβή της σύνταξη • µετατρέψετε ερωτήσεις προς µια Βάση ∆εδοµένων από φυσική γλώσσα στη γλώσσα ερωτήσεων SQL • προβλέψετε τις απαντήσεις σε κάποια ερώτηση SQL προς µία γνωστή Βάση ∆εδοµένων, ώστε να είστε σε θέση να ελέγχετε την ορθότητα των απαντήσεων ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή παρουσιάζονται οι βασικές εντολές της γλώσσας ερωτήσεων SQL οι οποίες χρησιµοποιούνται για αναζήτηση δεδοµένων από µία Βάση ∆εδοµένων. Στην ενότητα 5.2.1 παρουσιάζεται η βασική δόµηση κάθε εντολής αναζήτησης σε SQL, καθώς και δύο παραδείγµατα που θα χρησιµοποιηθούν στις ασκήσεις ολόκληρου του κεφαλαίου. Στην ενότητα 5.2.2 παρουσιάζεται η µέθοδος που προσφέρει η SQL για διάταξη των αποτελεσµάτων, ενώ στην ενότητα 5.2.3 συζητούνται οι τελεστές που χρησιµοποιούνται σε µία συνθήκη. Στην ενότητα 5.2.4 παρουσιάζονται οι τρόποι µετονοµασίας των πινάκων για πολύπλοκες εντολές, ενώ στην ενότητα 5.2.5 παρουσιάζονται οι εντολές συνόλων που υποστηρίζει η SQL. Στην ενότητα 5.2.6 συητείται η σύνδεση πινάκων σε SQL και στην ενότητα 5.2.7 παρουσιάζουµε τρόπους αρίθµησης, υπολογισµού µεγίστων και ελαχίστων και οµαδοποίησης των αποτελεσµάτων µίας ερώτησης. Τέλος, στην ενότητα 5.2.8 συνοψίζουµε τις εντολές αναζήτησης σε γλώσσα ερωτήσεων SQL και δίνουµε ένα παράδειγµα πλήρους εντολής σε SQL. 5.2.1 Select… From… Where… Στην ενότητα αυτή θα περιγράψουµε τις βασικές εντολές αναζήτησης στη γλώσσα ερωτήσεων SQL. Για να µπορέσουµε να γίνουµε πιο κατανοητοί θα χρησιµοποιήσουµε ένα απλό παράδειγµα και µερικά χαρακτηριστικά δεδοµένα, ώστε να µπορούµε να έχουµε ένα κοινό πεδίο αναφοράς για την παρουσίαση των εντολών και για τις ασκήσεις. Στο παράδειγµα 5.1, περιγράφονται οι πίνακες µίας απλής σχεσιακής Βάσης ∆εδοµένων, που θα τους χρησιµοποιήσουµε για τις ερωτήσεις 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 119 σε όλο το κεφάλαιο 5, αλλά και στο κεφάλαιο 6, όταν θα παρουσιάσουµε τη γλώσσα ερωτήσεων QBE. Επίσης, στο παράδειγµα 5.2 δίνουµε µερικά χαρακτηριστικά δεδοµένα τα οποία θα χρησιµοποιηθούν στις ασκήσεις και παραδείγµατα τόσο του κεφαλαίου 5 όσο και του επόµενου κεφαλαίου 6 στην QBE. ¶·Ú¿‰ÂÈÁÌ· 5.1 Ας δούµε µία αρκετά απλή Βάση ∆εδοµένων: Έστω ότι οργανώνουµε σε Βάση ∆εδοµένων τα στοιχεία ενός Πανεπιστηµίου. Βέβαια για λόγους απλότητας θα θεωρήσουµε ότι στη συγκεκριµένη Βάση ∆εδοµένων έχουµε το ελάχιστο δυνατό σύνολο πληροφορίας. Έτσι, έχουµε τους παρακάτω πίνακες (µε έντονα γράµµατα είναι τα πεδία που αποτελούν το κλειδί για κάθε πίνακα): ∆ª∏ª∞ (ΟΝΟΜΑ, ΕΤΟΣ_Ι∆ΡΥΣΗΣ) ∫∞£∏°∏∆∏™ (ΟΝΟΜΑ, ΕΠΩΝΥΜΟ, ΠΑΤΡΩΝΥΜΟ, ΒΑΘΜΙ∆Α, ΗΜ_ΓΕΝ) º√π∆∏∆∏™ (ΟΝΟΜΑ, ΕΠΩΝΥΜΟ, ΠΑΤΡΩΝΥΜΟ, ΑΜ, ΗΜ_ΓΕΝ) ª∞£∏ª∞ (ΚΩ∆ΙΚΟΣ, ΟΝΟΜΑ, ΕΤΟΣ_∆Ι∆ΑΣΚ) Στους παραπάνω πίνακες θεωρήσαµε, για λόγους απλότητας ότι το όνοµα κάθε τµήµατος είναι µοναδικό, ότι κάθε µάθηµα έχει ένα κωδικό που το χαρακτηρίζει µε µοναδικό τρόπο, ότι κάθε φοιτητής έχει µοναδικό Αριθµό Μητρώου και ότι ο Καθηγητής µπορεί να έχει ως κλειδί το ονοµατεπώνυµο. Ορίζουµε επίσης µερικές σχέσεις: ∫∞£_∆ª∏ª∞ (ΟΝΟΜΑ_Κ, ΕΠΩΝΥΜΟ_Κ, ΟΝΟΜΑ_Τ) º√π∆_∆ª∏ª∞ (ΑΜ, ΟΝΟΜΑ) º√π∆_ª∞£ (ΑΜ, ΚΩ∆ΙΚΟΣ) ∫∞£_ª∞£ (ΟΝΟΜΑ, ΕΠΩΝΥΜΟ, ΚΩ∆ΙΚΟΣ) Από τις παραπάνω σχέσεις η ΚΑΘ_ΤΜΗΜΑ είναι σχέση Ν προς Μ, η ΦΟΙΤ_ΤΜΗΜΑ σχέση Ν προς 1, η ΦΟΙΤ_ΜΑΘ σχέση Ν προς Μ και η ΚΑΘ_ΜΑΘ σχέση 1 προς Ν. (Κάνουµε την παραδοχή ότι κάθε µάθηµα δδάσκεται µόνο από έναν Καθηγητή). Για να µπορέσουµε να µιλήσουµε πιο συγκεκριµένα στα παραδείγµατα και στις ασκήσεις, θεωρούµε ότι έχουν εισαχθεί σε µία Βάση ∆εδοµένων τα παρακάτω δεδοµένα που περιγράφονται στο παράδειγµα 5.2. 120 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL ¶·Ú¿‰ÂÈÁÌ· 5.2 Τα δεδοµένα που εισάγουµε (θεωρητικά) σε µία Βάση ∆εδοµένων είναι πολύ λίγα για να απαιτούν πραγµατικά τη χρήση Βάσης ∆εδοµένων, αλλά είναι χαρακτηριστικά και θα µας εξυπηρετήσουν για τα παραδείγµατα και τις ασκήσεις. Ακολουθούν οι πίνακες (µε έντονα γράµµατα είναι τα πεδία που αποτελούν το κλειδί για κάθε πίνακα): ΤΜΗΜΑ ΟΝΟΜΑ Μαθηµατικό Φυσικό Πληροφορικής KAΘHΓHTHΣ ΟΝΟΜΑ Ειρήνη Κωνσταντίνος Μιχαήλ Μιχάλης Χρήστος EΠΩNYMO Νικολαΐδη Μακρής Βαρδής Ξανθός Χρήστου ΠΑΤΡΩΝΥΜΟ Μιχαήλ Νικόλαος Νικόλαος Νικόλαος Βασίλειος ΒΑΘΜΙ∆Α Καθηγητής Επίκουρος Λέκτορας Λέκτορας Λέκτορας ΗΜ_ΓΕΝ 19-03-1956 18-07-1960 03-01-1947 20-08-1968 19-07-1966 ΕΤΟΣ_Ι∆ΡΥΣΗΣ 1961 1968 1994 ΦOITHTHΣ ΟΝΟΜΑ Νικόλαος Ελένη Νικόλαος Χρήστος Χρήστος Μαρίνα EΠΩNYMO Βασιλείου Βασιλείου Βαρδής Χρήστου Χρήστου Χατζή ΠΑΤΡΩΝΥΜΟ Σωτήριος Σωτήριος Μιχαήλ Νικόλαος Βασίλειος Αθανάσιος ΑM 19072 19071 19109 19345 19344 19409 ΗΜ_ΓΕΝ 20-08-1978 22-03-1980 03-01-1977 20-08-1978 19-07-1976 10-10-1977 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 121 MAΘHMA KΩ∆IKOΣ 1045 1089 1134 1239 1667 1891 1892 1992 1998 ΟΝΟΜΑ Φυσική Μαθηµατικά Λογικός Σχεδιασµός Γραµµική Άλγεβρα Βάσεις ∆εδοµένων ∆οµές ∆εδοµένων Ι ∆οµές ∆εδοµένων ΙΙ Ποιότητα Λογισµικού Marketing ETOΣ ∆I∆AΣK Α Α Β Β Γ Γ ∆ Ε E Τέλος, ας δώσουµε και τα δεδοµένα των σχέσεων που περιγράψαµε. ΚΑΘ_ΤΜΗΜΑ ΟΝΟΜΑ_Κ Μιχαήλ Μιχαήλ Ειρήνη Κωνσταντίνος Μιχαήλ Μιχαήλ Χρήστος ΕΠΩΝΥΜΟ_Κ Βαρδής Βαρδής Νικολαΐδη Μακρής Ξανθός Ξανθός Χρήστου ΟΝΟΜΑ_Τ Μαθηµατικό Φυσικό Μαθηµατικό Πληροφορικής Μαθηµατικό Φυσικό Πληροφορικής ΦΟΙΤ_ΤΜΗΜΑ AM 19071 19072 19109 19344 19345 19409 ΟΝΟΜΑ Μαθηµατικό Μαθηµατικό Φυσικό Πληροφορικής Πληροφορικής Φυσικό 122 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL ΦΟΙΤ_ΜΑΘ AM 19071 19071 19072 19109 19409 19409 19345 19345 19345 19344 19344 19334 19334 KΩ∆IKOΣ 1089 1239 1089 1045 1045 1667 1134 1891 1992 1134 1998 1892 1992 KAΘ_ΜΑΘ ONOMA Μιχαήλ Ειρήνη Χρήστος Ειρήνη Μιχαήλ Κωνσταντίνος Κωνσταντίνος Χρήστος Κωνσταντίνος EΠΩNYMO Βαρδής Νικολαΐδη Χρήστου Νικολαΐδη Ξανθός Μακρής Μακρής Χρήστου Μακρής KΩ∆IKOΣ 1045 1089 1134 1239 1667 1891 1892 1992 1998 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 123 Χρησιµοποιώντας ένα σύστηµα που έχετε στο σπίτι σας, εάν φυσικά έχετε, (για παράδειγµα, τη Microsoft Access) δηµιουργήστε µία Βάση ∆εδοµένων µε τους πίνακες του παραδείγµατος 5.1 και εισάγετε τα πειραµατικά δεδοµένα του παραδείγµατος 5.2. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.2 ∂¡∆√§∂™ ∆∏™ SQL Τώρα που έχουµε στη διάθεσή µας την περιγραφή των πινάκων µίας Βάσης ∆εδοµένων και µερικά χαρακτηριστικά δεδοµένα, ας περάσουµε στην παρουσίαση των εντολών της SQL. Η πιο βασική εντολή της SQL είναι η εντολή αναζήτησης δεδοµένων της µορφής SELECT FROM WHERE [‰›·] [›Ó·Î˜] [Û˘Óı‹ÎË] To WHERE µπορεί και να παραλείπεται, ενώ η λίστα µε τα κατηγορήµατα µπορεί να αντικαθίσταται µε αστερίσκο (*) που σηµαίνει (όλα τα πεδία). Η συνθήκη µπορεί να χρησιµοποιεί τους µαθηµατικούς τελεστές «>», «<», «<>», «>=», «<=» και «=», καθώς και τους λογικούς τελεστές «AND», «OR» και «NOT». Υπάρχουν και άλλοι τελεστές της SQL που µπορούν να εµφανίζονται στη συνθήκη, τους οποίους όµως θα παρουσιάσουµε αργότερα. Ας δούµε µερικά παραδείγµατα εντολών σε SQL, βασισµένα στη Βάση ∆εδοµένων και τα δεδοµένα των παραδειγµάτων 5.1 και 5.2. Έστω ότι θέλουµε να βρούµε όλα τα στοιχεία όλων των φοιτητών. Η εντολή θα είναι SELECT FROM * º√π∆∏∆∏™ Το αποτέλεσµα της εκτέλεσης αυτής της εντολής θα είναι να δοθεί ως απάντηση ο πλήρης πίνακας µε όλα τα στοιχεία όλων των φοιτητών που περιέχονται στη Βάση ∆εδοµένων. Έστω τώρα ότι θέλουµε να δούµε µόνο το ονοµατεπώνυµο των φοιτητών που έχουν γεννηθεί στις 20 Αυγούστου 1978. Η εντολή τότε θα είναι SELECT FROM √¡√ª∞, ∂¶ø¡Àª√ º√π∆∏∆∏™ 124 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL WHERE ∏ª_°∂¡= ‘20–08–1978’ Το αποτέλεσµα της εκτέλεσης αυτής της εντολής είναι ο πίνακας ONOMA Νικόλαος Χρήστος EΠΩNYMO Βασιλείου Χρήστου Παρατηρήστε ότι παρόλο που ζητήσαµε τους φοιτητές που έχουν γεννηθεί στις 20–08–1978, η ηµεροµηνία γέννησης δεν εµφανίστηκε γιατί στο SELECT ζητήσαµε µόνο το όνοµα και το επώνυµο. Εάν θέλουµε µπορούµε να έχουµε περισσότερους από έναν πίνακες στο FROM. Έτσι, αν θέλουµε το καρτεσιανό γινόµενο των πινάκων ΤΜΗΜΑ και ΜΑΘΗΜΑ, τότε αυτό δίνεται από την ερώτηση σε SQL SELECT FROM * ∆ª∏ª∞, ª∞£∏ª∞ Ας δούµε άλλο ένα παράδειγµα µε δύο πίνακες. Προσέξτε ότι στο παράδειγµα που ακολουθεί χρησιµοποιούµε το όνοµα του πίνακα και το όνοµα του πεδίου χωρισµένα µε τελεία για να ξεχωρίσουµε για πιο πεδίο µιλάµε. Έστω ότι θέλουµε το καρτεσιανό γινόµενο των πινάκων ΦΟΙΤΗΤΗΣ και ΚΑΘΗΓΗΤΗΣ, αλλά να δούµε µόνο τα πεδία ΟΝΟΜΑ και ΕΠΩΝΥΜΟ τόσο για τους φοιτητές όσο και για τους καθηγητές. Επίσης, βάζουµε ως περιορισµό οι καθηγητές να είναι στη βαθµίδα «Καθηγητής» και οι φοιτητές να έχουν αριθµό µητρώου µικρότερο του 19.100. Η ερώτηση σε SQL είναι: SELECT FROM WHERE º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√, ∫∞£∏°∏∆∏™.√¡√ª∞, ∫∞£∏°∏∆∏™.∂¶ø¡Àª√ º√π∆∏∆∏™, ∫∞£∏°∏∆∏™ (∫∞£∏°∏∆∏™.µ∞£ªπ¢∞ ="∫·ıËÁËÙ‹˜") AND (º√π∆∏∆∏™.∞ª<19100); Το αποτέλεσµα της εκτέλεσης της παραπάνω εντολής είναι ο πίνακας ONOMA Νικόλαος Ελένη EΠΩNYMO Βασιλείου Βασιλείου ONOMA Ειρήνη Ειρήνη EΠΩNYMO Νικολαΐδη Νικολαΐδη 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 125 Έστω ότι θέλουµε να βρούµε τα ονόµατα των µαθηµάτων που έχουν κωδικό µικρότερο από 1100, στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε την ερώτηση σε SQL και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.2 Έστω ότι θέλουµε να βρούµε τα ονόµατα και τα επώνυµα των καθηγητών που έχουν γεννηθεί µετά την 1η Ιανουαρίου 1960, στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε την ερώτηση σε SQL και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.3 Έστω ότι θέλουµε να βρούµε το καρτεσιανό γινόµενο του πίνακα µε τα ονόµατα των µαθηµάτων που διδάσκονται στο 1ο έτος και των τµηµάτων που έχουν ιδρυθεί πριν το 1980, στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε την ερώτηση σε SQL και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.4 Πειραµατιστείτε σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων υλοποιώντας τις παραπάνω εντολές σε SQL και ελέγχοντας την ορθότητα των αποτελεσµάτων σας. Επίσης, πειραµατιστείτε µε παρόµοιες εντολές και βεβαιωθείτε ότι γνωρίζετε αρκετά καλά το αντικείµενο αυτής της ενότητας, πριν προχωρήσετε στην επόµενη. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.3 5.2.2 ¢È¿Ù·ÍË ÙˆÓ ·ÔÙÂÏÂÛÌ¿ÙˆÓ Στην προηγούµενη ενότητα παρουσιάσαµε τη βασική εντολή SELECT…FROM…WHERE… των ερωτήσεων σε SQL. ∆εν µιλήσαµε όµως καθόλου για διάταξη των αποτελεσµάτων της ερώτησης. Αυτή η διάταξη επιτυγχάνεται µε την εντολή ORDER BY την οποία θα παρουσιάσουµε σε αυτή την ενότητα. Η εντολή ORDER BY ακολουθεί το WHERE και προσδιορίζει τα πεδία µε βάση τα οποία θα γίνει η διάταξη των γραµµών των πινάκων. Ας δούµε ένα παράδειγµα. Στην προηγούµενη ενότητα δώσαµε σε SQLτην εντολή: 126 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL SELECT FROM WHERE º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√, ∫∞£∏°∏∆∏™.√¡√ª∞, ∫∞£∏°∏∆∏™.∂¶ø¡Àª√ º√π∆∏∆∏™, ∫∞£∏°∏∆∏™ (∫∞£∏°∏∆∏™.µ∞£ªπ¢∞ ="∫·ıËÁËÙ‹˜") AND (º√π∆∏∆∏™.∞ª<19100); Εάν θέλαµε τα αποτελέσµατα της παραπάνω εντολής να είναι διαταγµένα κατά αύξουσα σειρά σε σχέση µε τα επώνυµα και τα ονόµατα των φοιτητών τότε η εντολή θα έπρεπε να γραφεί: SELECT º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√, ∫∞£∏°∏∆∏™.√¡√ª∞, ∫∞£∏°∏∆∏™.∂¶ø¡Àª√ FROM º√π∆∏∆∏™, ∫∞£∏°∏∆∏™ WHERE (∫∞£∏°∏∆∏™.µ∞£ªπ¢∞ ="∫·ıËÁËÙ‹˜") AND (º√π∆∏∆∏™.∞ª<19100) ORDER BY º√π∆∏∆∏™.∂¶ø¡Àª√, º√π∆∏∆∏™.√¡√ª∞; Το αποτέλεσµα της εκτέλεσης της παραπάνω εντολής είναι ο παρακάτω πίνακας ONOMA Eλένη Νικόλαος EΠΩNYMO Βασιλείου Βασιλείου ONOMA Ειρήνη Ειρήνη EΠΩNYMO Νικολαΐδη Νικολαΐδη Προσέξτε, ότι σε αντίθεση µε το παράδειγµα της προηγούµενης ενότητας, η σειρά των γραµµών του πίνακα άλλαξε. Αυτό οφείλεται στο ότι ζητήσαµε να υπάρχει διάταξη πρώτα στο επώνυµο του φοιτητή και µετά στο όνοµα. Επειδή και τα δύο επώνυµα ήταν ίδια τότε έγινε διάταξη στα ονόµατα και φυσικά το «Ελένη» προηγήθηκε του «Νικόλαος». Η διάταξη µπορεί να είναι είτε αύξουσα είτε φθίνουσα. Για αύξουσα διάταξη βάζουµε µετά από το όνοµα του πεδίου το «ASC», ενώ για φθίνουσα το «DESC». Όταν δεν τοποθετείται κάτι από τα δύο, τότε εννοείται ότι η διάταξη πρέπει να είναι αύξουσα. Έτσι, αν στην παραπάνω εντολή θέλαµε να παρουσιάσουµε τα αποτελέσµατα κατά φθίνουσα διάταξη των επωνύµων των φοιτητών και κατά αύξουσα διάταξη των ονοµάτων των φοιτητών, τότε η αντίστοιχη εντολή σε SQL θα ήταν: 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 127 SELECT º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√, ∫∞£∏°∏∆∏™.√¡√ª∞, ∫∞£∏°∏∆∏™.∂¶ø¡Àª√ FROM º√π∆∏∆∏™, ∫∞£∏°∏∆∏™ WHERE (∫∞£∏°∏∆∏™.µ∞£ªπ¢∞ ="∫·ıËÁËÙ‹˜") AND (º√π∆∏∆∏™.∞ª<19100) ORDER BY º√π∆∏∆∏™.∂¶ø¡Àª√ DESC, º√π∆∏∆∏™.√¡√ª∞; ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.5 Ξαναγράψτε τις ερωτήσεις SQL των ασκήσεων αυτοαξιολόγησης 2, 3 και 4 του κεφαλαίου 5. Τώρα όµως διατάξτε (1) τα ονόµατα των µαθηµάτων της άσκησης 2 κατά αύξουσα σειρά, (2) τους καθηγητές της άσκησης 3 κατά φθίνουσα σειρά των επωνύµων και των µικρών ονοµάτων και (3) τα ονόµατα των µαθηµάτων της άσκησης 4 κατά φθίνουσα σειρά και τα ονόµατα των τµηµάτων κατά αύξουσα σειρά. ∆ώστε τις ερωτήσεις σε SQL και τους πίνακες µε τα αναµενόµενα αποτελέσµατα για κάθε περίπτωση. Πειραµατιστείτε σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων υλοποιώντας τις παραπάνω εντολές σε SQL και ελέγχοντας την ορθότητα των αποτελεσµάτων σας. Επίσης πειραµατιστείτε µε παρόµοιες εντολές και βεβαιωθείτε ότι γνωρίζετε αρκετά καλά το αντικείµενο αυτής της ενότητας, πριν προχωρήσετε στην επόµενη. 5.2.3 §ÔȤ˜ ÂÓÙÔϤ˜ ÛÙË Û˘Óı‹ÎË ¢Ú·ÛÙËÚÈfiÙËÙ· 5.4 Στην ενότητα 5.2.1 µιλήσαµε για τη συνθήκη που ακολουθεί το WHERE και είπαµε για τους τελεστές που χρησιµοποιεί. Σε αυτή την ενότητα θα µιλήσουµε για τους τελεστές «LIKE» και «NULL», που η SQL επιτρέπει να χρησιµοποιούνται στη συνθήκη. Ο τελεστής «LIKE» επιτρέπει τη σύγκριση strings (συµβολοσειρών). Χρησιµοποιεί το «%» που σηµαίνει «οποιαδήποτε σειρά χαρακτήρων» και το «–» που σηµαίνει «ένας οποιοσδήποτε χαρακτήρας». Έτσι, η εντολή LIKE ‘%˘%’ σηµαίνει οποιοδήποτε κείµενο που έχει µέσα του τους χαρακτήρες (substring) «ης». Ενώ η εντολή 128 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL LIKE ‘ª–ÓÔ˜’ σηµαίνει όλες τις λέξεις που έχουν «Μ» ως πρώτο γράµµα, οποιοδήποτε χαρακτήρα για δεύτερο γράµµα και µετά το επίθεµα «νος». Άρα, θα µπορούσαν να γίνουν δεκτές οι λέξεις «Μάνος», «Μίνος», «Μόνος», κτλ. Ας δούµε τώρα πώς θα µπορούσαµε να βρούµε µε τη χρήση του LIKE τα ονόµατα και τα επώνυµα των φοιτητών που το επώνυµό τους αρχίζει από το γράµµα «Β». Η ερώτηση σε SQL και ο αντίστοιχος πίνακας ακολουθούν: SELECT FROM WHERE √¡√ª∞, ∂¶ø¡Àª√, º√π∆∏∆∏™ ∂¶ø¡Àª√ LIKE ‘µ%’; ONOMA Νικόλαος Eλένη Nικόλαος EΠΩNYMO Βασιλείου Χρήστου Bαρδής Ένας άλλος χρήσιµος τελεστής που χρησιµοποιείται στη συνθήκη είναι ο τελεστής «NULL» που χρησιµοποιείται για να ελέγξουµε εάν ένα πεδίο είναι κενό ή όχι. Ο τελεστής αυτός συνήθως συντάσσεται µε «IS NULL» που σηµαίνει «είναι κενό», ή µε «IS NOT NULL» που σηµαίνει «δεν είναι κενό». Έτσι, η παρακάτω ερώτηση σε SQL σηµαίνει «βρες τα ονόµατα και τα επώνυµα των φοιτητών που το πατρώνυµό τους έχει κάποια τιµή (δηλαδή δεν είναι κενό)»: SELECT FROM WHERE √¡√ª∞, ∂¶ø¡Àª√, º√π∆∏∆∏™ ¶∞∆ƒø¡Àª√ IS NOT NULL; Προσοχή, ένα πολύ συχνό µπέρδεµα που γίνεται είναι να συγχέουµε την κενή τιµή µε την τιµή 0 ή µε τον χαρακτήρα «κενό». Η τιµή 0 είναι µία τιµή, όπως τιµή είναι και ο χαρακτήρας «κενό». Αντίθετα κενό «NULL» σηµαίνει έλλειψη τιµής, δηλαδή καθόλου τιµή σε αυτό το πεδίο. Η παραπάνω εντολή σε SQL θα είχε αποτέλεσµα την εκτύπωση των ονοµατεπωνύµων όλων των φοιτητών, αφού δεν έχουµε εισάγει κάποιον µε κενό πατρώνυµο. 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 129 Έστω ότι θέλουµε να βρούµε το όνοµα και το επώνυµο των καθηγητών που το µικρό τους όνοµα αρχίζει από ‘Μιχ’ στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε την ερώτηση σε SQL και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.6 Έστω ότι θέλουµε να βρούµε τα ονόµατα των τµηµάτων που έχουν κενό έτος ίδρυσης στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε την ερώτηση σε SQL και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.7 5.2.4 ªÂÙÔÓÔÌ·Û›· ÈÓ¿ÎˆÓ Μέχρι τώρα µιλήσαµε για απλές εντολές σε SQL, χωρίς να συζητήσουµε για µετονοµασία πινάκων. Σε αυτή την ενότητα θα µιλήσουµε για πιο πολύπλοκες ερωτήσεις σε SQL. Αρκετές φορές σε µερικές ερωτήσεις έχουµε πολλούς πίνακες και τότε είναι πρακτικό να µετονοµάζουµε κάποιους πίνακες για µεγαλύτερη ευκολία στη συγγραφή των ερωτήσεων σε SQL. Ας δούµε ξανά το παράδειγµα της ενότητας 5.2.2 έχοντας µετονοµάσει τους πίνακες: SELECT FROM WHERE ORDER BY º.√¡√ª∞, º.∂¶ø¡Àª√, ∫.√¡√ª∞, ∫.∂¶ø¡Àª√ º√π∆∏∆∏™ º.∫∞£∏°∏∆∏™ ∫ (∫.µ∞£ªπ¢∞ ="∫·ıËÁËÙ‹˜") AND (º.∞ª<19100) º.∂¶ø¡Àª√, º.√¡√ª∞; Παρατηρήστε ότι µετονοµάσαµε τον πίνακα ΦΟΙΤΗΤΗΣ σε Φ και τον πίνακα ΚΑΘΗΓΗΤΗΣ σε Κ και χρησιµοποιήσαµε τα σύντοµα ονόµατα για µεγαλύτερη ευκολία στη συγγραφή της ερώτησης. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.5 Επαναλάβατε όλες τις ερωτήσεις που έχετε γράψει σε SQL, οι οποίες έχουν περισσότερους από ένα πίνακα, µετονοµάζοντας τους πίνακες. 130 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL 5.2.5 ∂ÓÙÔϤ˜ Û˘ÓfiÏˆÓ ONOMA Βασίλειος Μιχαήλ Νικόλαος Νικόλαος Νικόλαος Σε αυτή την ενότητα θα µιλήσουµε για ερωτήσεις SQL που είναι σε πολλά επίπεδα και γενικά για το πώς εντολές από τη θεωρία συνόλων µπορούν να χρησιµοποιηθούν στις ερωτήσεις SQL. Ας αρχίσουµε όµως µε τον τελεστή «DISTINCT», ο οποίος θα µας φανεί χρήσιµος στη συνέχεια. Ας δούµε την παρακάτω ερώτηση σε SQL: SELECT FROM ORDER BY ¶∞∆ƒø¡Àª√ ∫∞£∏°∏∆∏™ ¶∞∆ƒø¡Àª√; Αυτή η εντολή θα µας δώσει έναν πίνακα µε όλα τ πατρώνυµα των καθηγητών που υπάρχουν στη Βάση δεδοµένων, όπως φαίνεται δίπλα. Αν όµως για εµάς δεν έχει αξία να εµφανιστεί το ίδιο πατρώνυµο περισσότερες από µία φορές, τότε η εντολή θα µπορούσε να γίνει ONOMA Βασίλειος Μιχαήλ Νικόλαος SELECT FROM ORDER BY DISTINCT ¶∞∆ƒø¡Àª√ ∫∞£∏°∏∆∏™ ¶∞∆ƒø¡Àª√; Με αυτόν το τρόπο εξασφαλίζουµε ότι κάθε πατρώνυµο θα εµφανιστεί µόνο µία φορά και τα αποτελέσµατα δίνονται στον πίνακα δίπλα. Ο τελεστής «DISTINCT» είναι πολύ χρήσιµος στις εντολές συνόλων που θα αναλύσουµε ακολούθως. Θα µιλήσουµε για τη χρήση των «IN», «ALL», «ANY», «EXISTS», «NOT EXISTS» και «UNIQUE» στις ερωτήσεις µε SQL. Επίσης, θα παρουσιάσουµε εν συντοµία τις πράξεις συνόλων «UNION», «INTERESECT», «CONTAINS» και «EXCEPT». Ας αρχίσουµε µε ένα παράδειγµα: SELECT FROM WHERE DISTINCT ONOMA º√π∆∏∆∏™ ONOMA IN (SELECT FROM OR √¡√ª∞ IN (SELECT FROM DISTINCT ONOMA ∫∞£∏°∏∆∏™) DISTINCT ¶∞∆ƒø¡Àª√ ∫∞£∏°∏∆∏™); Στο παράδειγµα αυτό ζητάµε τα ονόµατα των φοιτητών που έχουν όνοµα τέτοιο που να το έχει και ένας τουλάχιστο καθηγητής ή ο πατέρας του. Αυτή η ερώτηση είναι δοµηµένη σε δύο επίπεδα: ένα εξωτε- 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 131 ρικό επίπεδο (το SELECT DISTINCT ΟΝΟΜΑ FROM ΦΟΙΤΗΤΗΣ) και ένα εσωτερικό µε τα άλλα δύο SELECT από τον πίνακα ΚΑΘΗΓΗΤΗΣ. Θεωρήστε ότι η απάντηση στην ερώτηση αρχίζει από τα εσωτερικά επίπεδα προς τα εξωτερικά. Έτσι, αρχικά θεωρούµε ότι θα απαντηθεί η ερώτηση «SELECT DISTINCT ΟΝΟΜΑ FROM ΚΑΘΗΓΗΤΗΣ». Αυτή η ερώτηση θα δώσει ένα σύνολο απαντήσεων και ειδικότερα τα (Ειρήνη, Κωνσταντίνος, Μιχαήλ, Μιχάλης, Χρήστος). Επίσης, η ερώτηση «SELECT DISTINCT ΠΑΤΡΩΝΥΜΟ FROM ΚΑΘΗΓΗΤΗΣ» θα δώσει ένα σύνολο απαντήσεων και ειδικότερα τα (Μιχαήλ, Νικόλαος, Βασίλειος). Ο τελεστής «ΙΝ» ελέγχει, εάν κάποιο στοιχείο που είναι αποτέλεσµα της ερώτησης του πρώτου επιπέδου «SELECT DISTINCT ONOMA FROM FOITHTHS» ανήκει σε ένα από τα δύο σύνολα (σε ένα από τα δύο λόγω του τελεστή «OR»). Έτσι, οι τιµές που προκύπτουν από την ερώτηση του εξωτερικού επιπέδου (Νικόλαος, Ελένη, Χρήστος, Μαρίνα) θα ελεχθούν εάν ανήκουν στα σύνολα απαντήσεων των ερωτήσεων των εσωτερικών επιπέδων. Η απάντηση στη συγκεκριµένη ερώτηση θα είναι φυσικά ο δίπλα πίνακας. Με παρόµοιο τρόπο συντάσσεται και η «ANY» που πρέπει να ακολουθεί κάποιον από τους τελεστές «=», «<», «>», «<=», «>=» και «<>». Έτσι, η εντολή που ακολουθεί σηµαίνει «βρες το ονοµατεπώνυµο ενός φοιτητή που η ηµεροηνία γέννησής του να είναι ίδια µε µία τουλάχιστον ηµεροµηνία γέννησης ενός καθηγητή»: SELECT FROM WHERE ONOMA, ∂¶ø¡Àª√ º√π∆∏∆∏™ ∏ª_°∂¡ = ANY (SELECT FROM ONOMA Νικόλαος Xρήστος HM_°∂ª ∫∞£∏°∏∆∏™); Όπως συντάσσεται η «ΑΝΥ» συντάσσεται και η «ALL» που σηµαίνει «µε όλα». Έτσι, η παρακάτω ερώτηση σηµαίνει «βρες το ονοµατεπώνυµο ενός φοιτητή που να είναι µεγαλύτερος σε ηλικία από όλους τους καθηγητές». SELECT FROM WHERE ONOMA, ∂¶ø¡Àª√ º√π∆∏∆∏™ ∏ª_°∂¡ < ALL (SELECT FROM HM_°∂ª ∫∞£∏°∏∆∏™); Ας προχωρήσουµε τώρα µε την εντολή «EXISTS (Ε)». Η εντολή αυτή 132 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL ελέγχει αν υπάρχει έστω και µία απάντηση στην ερώτηση «Ε». Εάν υπάρχει, τότε επιστρέφει «αληθές» στη συνθήκη. Αντίθετα η εντολή «NOT EXISTS (E)» επιστρέφει «αληθές» στη συνθήκη µόνο εάν δεν υπάρχει καµία απάντηση στην ερώτηση «Ε». Η εντολή «UNIQUE (E)» εξετάζει την ερώτηση «Ε» και επιστρέφει «αληθές» στη συνάρτηση µόνο εάν δεν υπάρχουν διπλές εγγραφές στο αποτέλεσµα της ερώτησης «Ε». Η SQL υποστηρίζει και τις εντολές συνόλων «UNION», «INTERESECT», «CONTAINS» και «EXCEPT». Η εντολή «UNION» περιγράφει την ένωση δύο συνόλων. Ας δούµε ένα παράδειγµα: (SELECT (FROM (WHERE UNION (SELECT (FROM (WHERE ONOMA, ∂¶ø¡Àª√ º√π∆∏∆∏™ ∏ª_°∂¡ LIKE ‘– – – 07– – – – – ’) ONOMA, ∂¶ø¡Àª√ ∫∞£∏°∏∆∏™ ∏ª_°∂¡ LIKE ‘– – – 07– – – – – ’); Η προηγούµενη ερώτηση σε SQL δίνει σαν απάντηση τα ονοµατεπώνυµα των φοιτητών και των καθηγητών που έχουν γεννηθεί τον 7ο µήνα. Προσέξτε ότι έχουµε ως απάντηση τα δύο σύνολα των ονοµατεπωνύµων και χρησιµοποιούµε την εντολή «UNION» για να κάνουµε την ένωση των συνόλων. Αντίστοιχη χρήση έχει και η εντολή «INTERSECT» που δίνει την τοµή δύο συνόλων και η εντολή «EXEPT» που δίνει τη διαφορά δύο συνόλων. Τέλος, η εντολή «CONTAINS» συγκρίνει δύο σύνολα και επιστρέφει «αληθές» στη συνθήκη, εάν το πρώτο είναι υποσύνολο του δευτέρου. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.8 ∆ώστε την ερώτηση σε SQL που να βρίσκει τα διαφορετικά επώνυµα των φοιτητών της Βάσης ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε τον πίνακα µε το αναµενόµενο αποτέλεσµα, µε την απάντηση διαταγµένη κατά φθίνουσα σειρά. 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 133 ∆ώστε την ερώτηση σε SQL που να βρίσκει τα ονοµατεπώνυµα των φοιτητών της Βάσης ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2, οι οποίοι έχουν ηµεροµηνία γέννησης ίδια µε την ηµεροµηνία γέννησης ενός τουλάχιστον καθηγητή. ∆ώστε την ερώτηση σε SQL µε δύο τρόπους (1) χρησιµοποιώντας την «IN» και (2) χρησιµοποιώντας την «ΑΝΥ». Tέλος, δώστε τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.9 ∆ώστε την ερώτηση σε SQL που να βρίσκει το ονοµατεπώνυµο του φοιτητή µε τη µεγαλύτερη ηλικία από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. Eπίσης δώστε τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.10 Στην ενότητα αυτή δεν δώσαµε πολλά παραδείγµατα για τις εντολές που παρουσιάσαµε, για να µπορέσουµε να καλύψουµε όλες τις εντολές. Πειραµατιστείτε µε τις εντολές συνόλων και ειδικότερα αυτές που δεν καλύψαµε µε τις ασκήσεις αυτοαξιολόγησης. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.6 5.2.6 ™‡Ó‰ÂÛË ÈÓ¿ÎˆÓ Σε αυτή την ενότητα θα µιλήσουµε για τη σύνδεση πινάκων, που είναι µία βασική λειτουργία, όταν θέλουµε να δώσουµε πολύπλοκες ερωτήσεις. Η SQL υποστηρίζει τις συνδέσεις «INNER JOIN», «LEFT OUTER JOIN», «RIGHT OUTER JOIN» και «FULL OUTER JOIN». Το «INNER» και το «OUTER» κατά κανόνα παραλείπονται. Έτσι, όταν γράφουµε σε µία ερώτηση «JOIN», τότε εννοούµε «INNER JOIN». Ας δούµε ένα παράδειγµα µιας πολύπλοκης ερώτησης. Έστω ότι θέλουµε να δούµε τα ονοµατεπώνυµα των φοιτητών και το όνοµα και το έτος ίδρυσης του τµήµατος στο οποίο ανήκουν. Αυτή είναι πολύ απλή ερώτηση για κάποιο χρήστη της Βάσης ∆εδοµένων, αλλά στην πραγµατικότητα απαιτεί την άντληση δεδοµένων από τρεις διαφορετικούς πίνακες: Θα χρειαστεί να πάρουµε τα ονοµατεπώνυµα των φοιτητών από τον πίνακα ΦΟΙΤΗΤΕΣ, τα έτη ίδρυσης των τµηµάτων από τον πίνακα ΤΜΗΜΑ, ενώ θα χρειαστούµε και τον πίνακα 134 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL ΦΟΙΤ_ΤΜΗΜΑ για να βρούµε τη σχέση των φοιτητών µε κάθε τµήµα. Η ερώτηση σε SQL είναι η εξής: SELECT FROM º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√, ∆ª∏ª∞.√¡√ª∞, ∆ª∏ª∞.∂∆√™_π¢ƒÀ™∏™ (º√π∆∏∆∏™ INNER JOIN º√π∆_∆ª∏ª∞ ON º√π∆∏∆∏™.∞ª=º√π∆_∆ª∏ª∞.∞ª) INNER JOIN ∆ª∏ª∞ √¡ º√π∆_∆ª∏ª∞.√¡√ª∞=∆ª∏ª∞.√¡√ª∞); Παρατηρήστε ότι έχουµε δύο συνδέσεις (joins) ανάµεσα σε πίνακες για να πετύχουµε το επιδιωκόµενο αποτέλεσµα. Το αποτέλεσµα αυτής της εντολής είναι ένας πίνακας µε τα παρακάτω αποτελέσµατα: ΟΝΟΜΑ ΦΟΙΤHTH ΕΠΩΝΥΜΟ Νικόλαος Ελένη Νικόλαος Χρήστος Χρήστος Μαρίνα Βασιλείου Βασιλείου Βαρδής Χρήστου Χρήστου Χατζή ΟΝΟΜΑ ΤΜΗMATOΣ Μαθηµατικό Μαθηµατικό Φυσικό Πληροφορικής Πληροφορικής Φυσικό ΕΤΟΣ_Ι∆ΡΥΣΗΣ 1961 1961 1968 1994 1994 1968 Προσέξτε ότι στον παραπάνω πίνακα δεν έχει γίνει λάθος µε την διπλή εµφάνιση του «Χρήστος Χρήστου», απλά υπήρχαν δύο φοιτητές µε ίδιο ονοµατεπώνυµο, αλλά διαφορετικό πατρώνυµο στη Βάση ∆εδοµένων του παραδείγµατος. Ας δούµε άλλο ένα παράδειγµα µε σύνδεση. Έστω ότι θέλουµε να απαντήσουµε στην απόλυτα λογική ερώτηση «βρείτε τον κατάλογο των µαθηµάτων και ποιος καθηγητής διδάσκει κάθε µάθηµα». Αυτό απαιτεί τη σύνδεση µόνο δύο πινάκων: Του πίνακα ΜΑΘΗΜΑ µε τον πίνακα ΚΑΘ_ΜΑΘ. Παρατηρήστε ότι δεν απαιτείται η χρήση και του πίνακα ΚΑΘΗΓΗΤΗΣ, αφού η πληροφορία που χρειαζόµαστε (όνοµα και επώνυµο καθηγητή) είναι επίσης αποθηκευµένη στον πίνακα ΚΑΘ_ΜΑΘ. Η ερώτηση λοιπόν σε SQL θα είναι 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 135 SELECT FROM ª∞£∏ª∞.√¡√ª∞, ∫∞£_ª∞£.√¡√ª∞, ∫∞£_ª∞£.∂¶ø¡Àª√ ∫∞£_ª∞£ INNER JOIN ª∞£∏ª∞ ON ∫∞£_ª∞£.∫ø¢π∫√™=ª∞£∏ª∞.∫ø¢π∫√™; Η απάντηση σε αυτή την ερώτηση θα είναι ο επόµενος πίνακας. Παρατηρήστε ότι ζητήσαµε να εµφανίζονται πρώτα τα µαθήµατα: ΟΝΟΜΑ ΜΑΘ Φυσική Μαθηµατικά Λογικός Σχεδιασµός Γραµµική Άλγεβρα Βάσεις ∆εδοµένων ∆οµές ∆εδοµένων Ι ∆οµές ∆εδοµένων ΙΙ Ποιότητα Λογισµικού Marketing ΟΝΟΜΑ ΚΑΘ Μιχαήλ Ειρήνη Χρήστος Ειρήνη Μιχαήλ Κωνσταντίνος Κωνσταντίνος Χρήστος Κωνσταντίνος ΕΠΩΝΥΜΟ ΚΑΘ Βαρδής Νικολαΐδη Χρήστου Νικολαΐδη Ξανθός Μακρύς Μακρύς Χρήστου Μακρύς ∆ώστε την ερώτηση σε SQL που να βρίσκει το επώνυµο, όνοµα και πατρώνυµο κάθε φοιτητή που έχει πάρει µαθήµατα και τα µαθήµατα που έχει πάρει από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε επίσης τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.11 ∆ώστε την ερώτηση σε SQL που να βρίσκει το επώνυµο και τον αριθµό µητρώου κάθε φοιτητή που έχει πάρει µαθήµατα, τον κωδικό κάθε µαθήµατος που έχει πάρει και το ονοµατεπώνυµο κάθε καθηγητή που διδάσκει το συγκεκριµένο µάθηµα από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε επίσης τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.11 Πειραµατιστείτε µε τις εντολές σύνδεσης και ειδικότερα µε τις εντολές εξωτερικής σύνδεσης, που δεν καλύψαµε σε αυτή την ενότητα. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.7 136 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL 5.2.7 ∞Ú›ıÌËÛË, ̤ÁÈÛÙ· – ÂÏ¿¯ÈÛÙ· Î·È ÔÌ·‰ÔÔ›ËÛË Στην ενότητα αυτή θα µιλήσουµε για τις εντολές της SQL «SUM», «MIN», «MAX», «AVG», «COUNT», «GROUP BY» και «HAVING». ∆εν θα επεκταθούµε πολύ σε αυτές τις εντολές για να µη µεγαλώσει πολύ το κεφάλαιο. Έχοντας πια αποκτήσει εµπειρία στη χρήση της SQL, σας καλούµε να πειραµατιστείτε µόνοι σας για την καλύτερη εκµάθησή τους. Ας δούµε ένα παράδειγµα για τη χρήση της εντολής «MIN»: SELECT MIN (HM_°∂¡) FROM º√π∆∏∆∏™; ΗΜ_ΓΕΝ 19-07-1978 Το αποτέλεσµα της εκτέλεσης αυτής της εντολής θα είναι ο δίπλα πίνακας. Βλέπουµε πως πήραµε ως απάντηση τη µικρότερη ηµεροµηνία γέννησης που έχει γεννηθεί κάποιος φοιτητής. Αντίστοιχα συντάσσεται και η εντολή «ΜΑΧ» που δίνει το µέγιστο, καθώς και η εντολή «SUM» που δίνει το άθροισµα των τιµών µιας στήλης και που έχει νόηµα κυρίως σε στήλες που µετρούν ποσά. Η εντολή «AVG» υπολογίζει τον µέσο όρο µίας τιµής µίας στήλης. Η εντολή «COUNT» χρησιµοποιείται για να µετρήσει το πλήθος των στοιχείων ενός πίνακα, ή µίας στήλης ενός πίνακα. Για παράδειγµα, εάν θέλαµε να δούµε για πόσους καθηγητές έχει εισαχθεί η ηµεροµηνία γέννησης θα δίναµε την εντολή SELECT COUNT (∏ª_°∂¡) FROM ∫∞£∏°∏∆∏™; Η εντολή «COUNT (*)» σηµαίνει «µέτρησε όλες τις γραµµές του πίνακα», σε αντίθεση µε την προηγούµενη περίπτωση στην οποία µετρούµε µόνο τα πεδία µία στήλης για τα οποία έχουµε δώσει κάποια τιµή. Η εντολή «GROUP BY» χρησιµοποιείται για να οµαδοποιήσει τα αποτελέσµατα, ενώ ή εντολή «HAVING» ακολουθεί προαιρετικά την «GROUP BY» δίνοντας ένα προσδιορισµό στην οµαδοποίηση. Ας δούµε ένα παράδειγµα: SELECT ∞ª, COUNT (*) FROM º√π∆_ª∞£ GROUP BY ∞ª HAVING COUNT (*) > 2; 5.2 ∞¡∞∑∏∆∏™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 137 Η εντολή αυτή σηµαίνει «βρες τους κωδικούς των φοιτητών που έχουν πάρει περισσότερα από δύο µαθήµατα και εµφάνισε τον κωδικό τους και το πλήθος των µαθηµάτων που έχουν πάρει». Το αποτέλεσµα της ερώτησης φαίνεται στο δίπλα πίνακα. Βλέπουµε ότι οι φοιτητές µε κωδικό «19344» και «19345» έχουν πάρει και οι δύο από 3 µαθήµατα. ΑΜ 19344 19345 COUNT 3 3 ∆ώστε την ερώτηση σε SQL που να βρίσκει τα τµήµατα στα οποία φοιτούν ένας ή κανένας φοιτητής καθώς και πόσοι φοιτητές φοιτούν εκεί από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε επίσης τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.13 ∆ώστε την ερώτηση σε SQL που να βρίσκει τους καθηγητές που διδάσκουν περισσότερα από δύο µαθήµατα καθώς και πόσα διδάσκουν από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε επίσης τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.14 Πειραµατιστείτε µε τις εντολές που περιγράψαµε σε αυτή την ενότητα ώστε να αποκτήσετε εξοικείωση. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.8 5.2.8 °ÂÓÈ΋ ÌÔÚÊ‹ ÂÓÙÔÏ‹˜ ·Ó·˙‹ÙËÛ˘ Μέχρι τώρα είδαµε τις διάφορες εντολές που απαρτίζουν µία ερώτηση σε γλώσσα SQL. Να συνοψίσουµε, αναφέροντας ότι µία εντολή αναζήτησης σε SQL µπορεί να είναι της µορφής SELECT FROM WHERE GROUP BY HAVING ORDER BY ‰›· ›Ó·Î˜ Û˘Óı‹ÎË Â‰›· Û˘Óı‹ÎË Û ۯ¤ÛË Ì ÙÔ GROUP BY ‰›· 138 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL Από τις προηγούµενες εντολές οι τέσσερις τελευταίες γραµµές είναι προαιρετικές. Υποχρεωτικά πρέπει να υπάρχουν µόνο το «SELECT» και το «FROM». 5.3 OÚÈÛÌfi˜, ‰È·¯Â›ÚÈÛË Î·È ·ÚÔ˘Û›·ÛË ‰Â‰ÔÌ¤ÓˆÓ ÛÙËÓ SQL ™ÎÔfi˜ Σκοπός της ενότητας είναι να παρουσιαστεί η SQL ως γλώσσα ορισµού δεδοµένων. Θα δείξουµε πολύ σύντοµα τη χρήση της SQL καθαρά για δηµιουργία πινάκων, εισαγωγή και διαγραφή δεδοµένων και δηµιουργία όψεων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • χρησιµοποιήσετε τις εντολές τις SQL για να δηµιουργήσετε πίνακες • χρησιµοποιήσετε τις εντολές τις SQL για να εισάγετε δεδοµένα σε πίνακες, να µεταβάλλετε τις τιµές κάποιων δεδοµένων, ή για να διαγράψετε κάποια δεδοµένα • χρησιµοποιήσετε τις εντολές τις SQL για να δηµιουργήσετε όψεις σε πίνακες ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στην ενότητα αυτή παρουσιάζονται οι βασικές εντολές της γλώσσας ερωτήσεων SQL, οι οποίες χρησιµοποιούνται για διαχείριση δεδοµένων σε µία Βάση ∆εδοµένων. Στην ενότητα 5.3.1 παρουσιάζεται η δηµιουργία πινάκων σε SQL και η αλλαγή της µορφής πινάκων. Στην ενότητα 5.3.2 παρουσιάζεται η εισαγωγή, διαγραφή και αλλαγή δεδοµένων σε πίνακες µε τη χρήση της SQL. Τέλος, στην ενότητα 5.3.3 παρουσιάζονται οι όψεις σε SQL. 5.3.1 Create table Î·È alter table Στην ενότητα αυτή θα µιλήσουµε για τη δηµιουργία και αλλαγή πινάκων µε τη χρήση της SQL. H SQL παρέχει δυνατότητα δηµιουργίας ενός πίνακα µε τη χρήση της εντολής «CREATE TABLE». Η εντολή 5.3 Oƒπ™ª√™, ¢π∞Ã∂πƒπ™∏ ∫∞π ¶∞ƒ√À™π∞™∏ ¢∂¢√ª∂¡ø¡ ™∏¡ SQL 139 αυτή δίνει τη δυνατότητα να περιγραφούν οι τύποι δεδοµένων και οι περιορισµοί για κάθε πεδίο του πίνακα, καθώς και να ορισθούν τα κλειδιά και το αν θα επιτρέπονται κενές τιµές για κάποιο πεδίο. Σήµερα τα περισσότερα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων δίνουν πιο εύκολους τρόπους για τη δηµιουργία πινάκων από τη χρήση εντολών σε SQL. Παρόλα αυτά οι εντολές SQL µπορούν να χρησιµοποιηθούν και µέσα σε κώδικα για τη δηµιουργία προσωρινών πινάκων. Ας δούµε ένα παράδειγµα χρήσης της εντολής «CREATE TABLE» για τη δηµιουργία του πρώτου πίνακα του παραδείγµατος 5.1 του κεφαλαίου 5. CREATE TABLE (√¡√ª∞ ∂∆√™_π¢ƒÀ™∏™ PRIMARY KEY ∆ª∏ª∞ VARCHAR(30) NOT NULL, π¡∆, (ONOMA)); Με την εντολή αυτή ορίσαµε τον πίνακα «ΤΜΗΜΑ» µε δύο στήλες. Η πρώτη στήλη, που είναι και το βασικό κλειδί, είναι η «ΟΝΟΜΑ» και αποτελείται από συµβολοσειρές µεταβλητού µήκους που δεν µπορούν να ξεπερνούν τους 30 χαρακτήρες. Η δεύτερη στήλη είναι η «ΕΤΟΣ_Ι∆ΡΥΣΗΣ» και έχει τιµές ακέραιους. Επίσης, ορίσαµε ότι η πρώτη στήλη δεν µπορεί να έχει κενές γραµµές, ενώ η δεύτερη µπορεί να έχει και κενές γραµµές. Ας δούµε τώρα και την εντολή «ALTER TABLE» που χρησιµοποιείται για τη µεταβολή στοιχείων ενός πίνακα. Για παράδειγµα, εάν θέλαµε να προσθέσουµε και άλλη µία στήλη στον πίνακα «ΤΜΗΜΑ» που θα ονοµαζόταν «ΠΡΟΕ∆ΡΟΣ» θα δίναµε την παρακάτω εντολή της SQL: ALTER TABLE ADD ∆ª∏ª∞ ¶ƒ√∂¢ƒ√™ VARCHAR(30); Με την προηγούµενη εντολή προσθέσαµε µία ακόµα στήλη συµβολοσειρά µε µέγιστο µήκος 30 χαρακτήρες, που την ονοµάσαµε «ΠΡΟΕ∆ΡΟΣ». ¢Ú·ÛÙËÚÈfiÙËÙ· 5.9 Στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων που χρησιµοποιείτε, υλοποιήστε όλους τους πίνακες του παραδείγµατος 5.1 µε τη χρήση εντολών SQL. 140 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL 5.3.2 Insert, delete, update Η εντολή της SQL «INSERT» χρησιµοποιείται για την εισαγωγή τιµών σε ένα πίνακα. Η σύνταξή της είναι όπως στο παράδειγµα που ακολουθεί INSERT INTO VALUES ∆ª∏ª∞ (‘æ˘¯ÔÏÔÁ›·˜’, 1988); Η εντολή αυτή εισάγει ένα νέο τµήµα. Η εντολή INSERT θα µπορούσε να συνδυαστεί µε µία εντολή αναζήτησης και να εισάγει δεδοµένα σε έναν πίνακα, τα οποία θα αντλήσει από κάποιον άλλο πίνακα. ∆είτε το παράδειγµα που ακολουθεί INSERT INTO VALUES ∆ª∏ª∞ SELECT FROM WHERE ONOMA, ET√™_π¢ƒÀ™∏™ ¶∞§∞π∞_∆ª∏ª∞∆∞ ∂∆√™_π¢ƒÀ™∏™ > 1990; Η εντολή αυτή εισάγει δεδοµένα τα οποία αντλεί από έναν πίνακα «ΠΑΛΑΙΑ_ΤΜΗΜΑΤΑ». Ας δούµε τώρα την αλλαγή δεδοµένων σε κάποιο πίνακα. ∆είτε το παράδειγµα που ακολουθεί DELETE FROM WHERE ∆ª∏ª∞ ∂∆√™_π¢ƒÀ™∏™ > 2000; Με την εντολή αυτή σβήνουµε από τη Βάση ∆εδοµένων όσα τµήµατα έχουν εισαχθεί µε έτος ίδρυσης µεγαλύτερο του 2000. Η εντολή DELETE µπορεί να συνδέεται και αυτή µε κάποια εντολή αναζήτησης της SQL, όπως παρουσιάζει το επόµενο παράδειγµα DELETE FROM WHERE ∆ª∏ª∞ ∂∆√™_π¢ƒÀ™∏™ > ALL (SELECT ∂∆√™_π¢ƒÀ™∏™ FROM ¶∞§∞π√_∆ª∏ª∞); Τέλος, ας δούµε και ένα παράδειγµα αλλαγών σε δεδοµένα. ∆είτε το παράδειγµα που ακολουθεί UPDATE SET WHERE TMHMA ∂∆√™_π¢ƒÀ™∏™=1963 ONOMA= ‘º˘ÛÈÎfi’; 5.3 Oƒπ™ª√™, ¢π∞Ã∂πƒπ™∏ ∫∞π ¶∞ƒ√À™π∞™∏ ¢∂¢√ª∂¡ø¡ ™∆∏¡ SQL 141 Η εντολή αυτή αλλάζει το έτος ίδρυσης στο Φυσικό Τµήµα. Η εντολή «UPDATE» µπορεί και αυτή να συντάσσεται µε κάποια εντολή αναζήτησης της SQL. ∆ιαγράψτε από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2 όλους του φοιτητές που έχουν γεννηθεί στις 20 Αυγούστου 1978. ∆ώστε την αντίστοιχη εντολή σε SQL και τον νέο πίνακα δεδοµένων που θα προκύψει µετά την εκτέλεση της εντολής. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 5.15 Στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων που χρησιµοποιείτε, εισάγετε όλα τα δεδοµένα του παραδείγµατος 5.2 µε τη χρήση εντολών SQL. ¢Ú·ÛÙËÚÈfiÙËÙ· 5.10 5.3.3 Ÿ„ÂȘ Οι όψεις στην SQL είναι πίνακες που δηµιουργούνται από άλλους πίνακες µε σκοπό να δώσουν διαφορετικές απεικονίσεις (συνήθως σε διαφορετικές οµάδες χρηστών). Στο παράδειγµα που ακολουθεί φαίνεται µία όψη του πίνακα ΦΟΙΤΗΤΗΣ CREATE VIEW AS √æ∏_1 SELECT FROM WHERE ONOMA, ∂¶ø¡Àª√, ¶∞∆ƒø¡Àª√ º√π∆∏∆∏™ AM > 19000; Οι όψεις µπορούν να σβήνονται ή να ενηµερώνονται µε τον ίδιο τρόπο που χειρίζονται και οι πίνακες (µε τις εντολές DROP VIEW και UPDATE). ™‡ÓÔ„Ë Στο κεφάλαιο αυτό περιγράψαµε τη γλώσσα ερωτήσεων SQL. Εν συντοµία στην ενότητα 5.1 παρουσιάστηκαν οι βασικές αρχές των γλωσσών ερωτήσεων και ο σκοπός που εξυπηρετούν οι γλώσσες ερωτήσεων. Στις ενότητες 5.2 και 5.3 παρουσιάστηκαν οι εντολές της γλώσσας ερωτήσεων SQL και δόθηκαν παραδείγµατα για το πώς µπορούν να υλοποιηθούν ερωτήσεις που αντλούν δεδοµένα από µία Βάση 142 KEºA§AIO 5: H °§ø™™∞ Eƒø∆∏™∂ø¡ SQL ∆εδοµένων ή που χειρίζονται πίνακες και δεδοµένα σε πίνακες. Σας προτείνουµε να ανατρέξετε στη βιβλιογραφία για να βρείτε περισσότερα παραδείγµατα από εντολές σε SQL και κυρίως να πειραµατιστείε µε εντολές SQL σε κάποιο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων (βλ. εργασίες της Θεµατικής Ενότητας 9.2). BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ·Ó¿ÁÓˆÛË Εγχειρίδια Συστήµατος. Η καλύτερη βιβλιογραφία που µπορούµε να σας προτείνουµε για να µάθετε SQL είναι τα εγχειρίδια του συστήµατος που χρησιµοποιείτε. Κατά κανόνα, είναι πλήρη και, το κυριότερο, αναφέρονται ακριβώς στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων µε το οποίο εργάζεστε. Παρόλα αυτά, ακριβώς γιατί η SQL είναι πρότυπη γλώσσα, µπορείτε να βρείτε και να διαβάσετε για SQL σχεδόν σε κάθε βιβλίο που πραγµατεύεται το θέµα των Βάσεων ∆εδοµένων. [1] Ullman J. D., Principles of Database Systems, Computer Science Press, 1982. Είναι ένα από το πρώτα και βασικότερα βιβλία για Βάσεις ∆εδοµένων. Η γλώσσα ερωτήσεων SQL περιγράφεται στο κεφάλαιο 6. [2] Silberschatz A., Korth H., Sudarshan S, Database System Concepts Third Edition, McGraw–Hill, 1986. Η γλώσσα ερωτήσεων SQL περιγράφεται αναλυτικά στο κεφάλαιο 4 του βιβλίου. [3] Elmasri R. & Navathe S. B., Fundamentals of Database Systems, Addison–Wesley, 1994. Το βιβλίο υπάρχει και σε ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Πιστεύουµε πως είναι ένα καλό βιβλίο για να βασίσετε τη µελέτη σας σε περίπτωση που θέλετε να εµβαθύνετε στις γλώσσες ερωτήσεων. [4] C.J.Date, An Introduction to Database Systems, Volume I, Fourth Edition, Addison–Wesley, 1986. Στο κεφάλαιο 4 και ειδικότερα στην ενότητα 4.3 γίνεται µία συνοπτική παρουσίαση της SQL. Επίσης, στο κεφάλαιο 9 παρουσιάζεται η embedded SQL και η χρήση της γλώσσας ερωτήσεων SQL µέσα από µία host language που καλεί ερωτήσεις σε SQL. ∫ ∂ ∏ °ÏÒÛÛ· EÚˆÙ‹ÛÂˆÓ QBE ™ÎÔfi˜ Σκοπός του κεφαλαίου είναι να παρουσιαστεί συνοπτικά η γλώσσα ερωτήσεων QBE και να περιγραφεί η σύνταξη των ερωτήσεων σε αυτή τη γλώσσα ερωτήσεων. Επίσης, σκοπός του κεφαλαίου είναι να µελετηθούν ερωτήσεις για εξαγωγή δεδοµένων από τους πίνακες µίας σχεσιακής Βάσης ∆εδοµένων, χρησιµοποιώντας QBE. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • περιγράψετε τις εντολές της γλώσσας ερωτήσεων QBE που χρησιµοποιούνται για αναζήτηση και παρουσίαση δεδοµένων που αντλούνται από µία Βάση ∆εδοµένων • χρησιµοποιήσετε εντολές της γλώσσας ερωτήσεων QBE για να αντλήσετε δεδοµένα από παραδείγµατα Βάσεων ∆εδοµένων που περιγράφηκαν στα προηγούµενα κεφάλαια • µετατρέψετε ερωτήσεις προς µία Βάση ∆εδοµένων από απλή (φυσική) γλώσσα στη γλώσσα ερωτήσεων QBE • µετατρέψετε ερωτήσεις προς µία Βάση ∆εδοµένων που είχαν αρχικά δοθεί σε SQL σε QBE. ŒÓÓÔȘ ÎÏÂȉȿ • Γλώσσες Ερωτήσεων (Query Languages) • Παράδειγµα (Example) • Πίνακας Ερώτησης (Query Table) • Πίνακας Αποτελέσµατος (Result Table) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό περιγράφουµε τη γλώσσα ερωτήσεων QBE. Στην ενότητα 6.1 γίνεται εισαγωγή στις βασικές αρχές της γλώσσας ερωτήσεων QBE και γενικά στη φιλοσοφία των ερωτήσεων µε βάση το 6 º ∞ § ∞ π √ 144 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE παράδειγµα. Στην ενότητα 6.2 παρουσιάζονται εντολές σε QBE µε χρήση συνθηκών που περιορίζουν τα αποτελέσµατα και στην ενότητα 6.3 παρουσιάζεται η QBE ενταγµένη σε ένα γραφικό περιβάλλον για πιο εύκολη υλοποίηση εντολών. Τέλος, στην ενότητα 6.4 γίνεται η σύνοψη του κεφαλαίου και παρουσιάζεται η προτεινόµενη βιβλιογραφία για περαιτέρω εµβάθυνση στο αντικείµενο της γλώσσας ερωτήσεων QBE. 6.1 ∏ ÊÈÏÔÛÔÊ›· Ù˘ QBE ™ÎÔfi˜ Σκοπός της ενότητας είναι να περιγραφεί γενικά η φιλοσοφία της γλώσσας ερωτήσεων QBE, που είναι αρκετά διαφορετική από αυτή της SQL. Επίσης, θα δώσουµε αρκετά παραδείγµατα απλών ερωτήσεων σε QBE. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε πώς λειτουργεί η γλώσσα ερωτήσεων QBE και τη φιλοσοφία στην οποία βασίζεται • υποβάλετε ερωτήσεις σε µία Βάση ∆εδοµένων, µετατρέποντας ερωτήσεις από φυσική γλώσσα σε QBE • εντοπίζετε τα αναµενόµενα αποτελέσµατα από µία ερώτηση σε QBE, ώστε να µπορείτε να ελέγχετε την ορθότητα των απαντήσεών σας. Στο προηγούµενο κεφάλαιο περιγράψαµε τη γλώσσα ερωτήσεων SQL. Σε αντίθεση µε την SQL, που στη σύνταξή της θυµίζει περισσότερο γλώσσες προγραµµατισµού, η QBE είναι βασισµένη σε µία εντελώς διαφορετική φιλοσοφία. Η φιλοσοφία της QBE είναι να είναι απλή και φιλική προς τους χρήστες και να δίνει τη δυνατότητα στους χρήστες να υποβάλλουν τα ερωτήµατά τους µε τρόπο που προσεγγίζει τους πίνακες αποτελεσµάτων που γνωρίζουν. Το όνοµα QBE σηµαίνει Query By Example και προσδιορίζει τη φιλοσοφία της γλώσσας που είναι να δίνονται οι ερωτήσεις υπό µορφή παραδειγµάτων. Η QBE αναπτύχθηκε από την IBM ως εναλλακτικός τρόπος υποβολής ερωτήσεων στο σύστηµα DB2. Υπάρχουν αρκετές διαφορές στον τρόπο µε τον οποίο χρησιµοποιείται η QBE από σύστηµα σε σύστηµα κα για αυτό εµείς θα δώσουµε σε αυτή την ενότητα τις βασικές αρχές της, όπως αρχικά προσδιορίστηκαν στην πρώτη έκδοση της γλώσσας. Στην QBE χρησιµοποιούµε πίνακες ερωτήσεων για να υποβάλλουµε την ερώτηση δίνοντας ένα παράδειγµα για το πώς θέλουµε να είναι η απάντηση. Η απάντηση δίνεται σε πίνακες απάντησης που είναι ίδιοι 146 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE µε τους πίνακες ερωτήσεων. Ανατρέξτε στο παράδειγµα 5.1 και στο 5.2 του κεφαλαίου 5, που θα το χρησιµοποιήσουµε και σε αυτό το κεφάλαιο. Ας δούµε ένα παράδειγµα ερώτησης σε QBE. Έστω ότι ο χρήστης θέλει να υποβάλει µία ερώτηση στον πίνακα ΦΟΙΤΗΤΗΣ. Τότε, το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων του εµφανίζει έναν πίνακα ερώτησης της µορφής ΦOITHTHΣ ΟΝΟΜΑ ΕΠΩΝΥΜΟ ΠΑΤΡΩΝΥΜΟ ΑΜ ΗΜ_ΓΕΝ Το σύστηµα, λοιπόν, φροντίζει να δώσει στο χρήστη πληροφορία όπως τα ονόµατα κάθε στήλης και έτσι ο χρήστης δεν χρειάζεται να τα θυµάται όπως στην SQL. Έστω λοιπόν ότι θέλουµε να δούµε τα ονοµατεπώνυµα και τα πατρώνυµα όλων των φοιτητών. Η εντολή σε QBE είναι ο πίνακας ερώτησης που ακολουθεί ΦOITHTHΣ ΟΝΟΜΑ Νίκος ΕΠΩΝΥΜΟ _Νίκου ΠΑΤΡΩΝΥΜΟ _Νικόλαος ΑΜ ΗΜ_ΓΕΝ Σε αυτόν τον πίνακα χρήστης έχει δώσει ένα παράδειγµα µιας απάντησης στη µορφή που θέλει. Για να το κάνει αυτό χρησιµοποίησε ένα παράδειγµα ονόµατος για κάθε περίπτωση. Τα παραδείγµατα για να µη συγχέονται µε τις συνθήκες έπρεπε να έχουν µπροστά το χαρακτήρα «_». Η εκτέλεση της παραπάνω ερώτησης θα είχε ως αποτέλεσµα την εµφάνιση του πίνακα: ΦOITHTHΣ ΟΝΟΜΑ Νικόλαος Ελένη Νικόλαος Χρήστος Χρήστος Μαρίνα ΕΠΩΝΥΜΟ Βασιλείου Βασιλείου Βαρδής Χρήστου Χρήστου Χατζή ΠΑΤΡΩΝΥΜΟ Σωτήριος Σωτήριος Μιχαήλ Νικόλαος Βασίλειος Αθανάσιος 6.1 ∏ ºπ§√™√ºπ∞ ∆∏™ QBE 147 Σε κάποιες εκδόσεις της QBE, για να εκτυπωθεί µία στήλη χρειάζεται το πρόθεµα «P.» πριν από το παράδειγµα. Έτσι η εντολή είναι η εξής: ΦOITHTHΣ ΟΝΟΜΑ Ρ._Νίκος ΕΠΩΝΥΜΟ Ρ._Νίκου ΠΑΤΡΩΝΥΜΟ Ρ._Νικόλαος ΑΜ ΗΜ_ΓΕΝ Επίσης, το παράδειγµα µπορεί να παραλείπεται και να υπάρχει µόνο το «Ρ.» που σηµαίνει «εµφάνισε το συγκεκριµένο πεδίο». Τα σύγχρονα συστήµατα που χρησιµοποιούν QBE παρέχουν ένα γραφικό περιβάλλον µε το οποίο ο χρήστης µπορεί εύκολα να κινείται στους πίνακες ερωτήσεων και να προσδιορίζει ποιες στήλες θα εµφανιστούν και ποιες όχι. Συνήθως, αυτό γίνεται µε επιλογή κάποιου πεδίου που καθορίζει τη απεικόνιση ή όχι µε τη χρήση κάποιου check box. ∆ώστε τον πίνακα ερώτησης σε QBE που να ζητά τα ονοµατεπώνυµα των καθηγητών από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. Eπίσης δώστε τον πίνακα αποτελέσµατος. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.1 Πειραµατιστείτε σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων υλοποιώντας αρκετές εντολές σε QBE και ελέγχοντας την ορθότητα των αποτελεσµάτων σας. Βεβαιωθείτε ότι γνωρίζετε αρκετά καλά το αντικείµενο αυτής της ενότητας, πριν προχωρήσετε στην επόµενη. ¢Ú·ÛÙËÚÈfiÙËÙ· 6.1 148 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE 6.2 ™˘Óı‹Î˜ Στην προηγούµενη ενότητα δώσαµε τις βασικές αρχές των ερωτήσεων σε QBE. Σε αυτή την ενότητα θα δούµε πώς µπορούµε να δώσουµε κάποιους περιορισµούς στην εκτύπωση των αποτελεσµάτων, πώς δηλαδή να ορίσουµε συνθήκες στη γλώσσα ερωτήσεων QBE. Θυµηθείτε το τµήµα «WHERE» στην SQL. Εκεί δίναµε µία συνθήκη που ακολουθούσε το «WHERE» και προσδιόριζε ποιες εγγραφές θέλουµε να εµφανισθούν. Στην QBE οι συνθήκες ορίζονται µε παρόµοιο τρόπο, µόνο που όλα γίνονται µε παράδειγµα στον πίνακα ερώτησης. Θυµηθείτε την πρώτη ερώτηση που παρουσιάσαµε στη γλώσσα ερωτήσεων SQL, δηλαδή να βρούµε τα ονοµατεπώνυµα των φοιτητών που γεννήθηκαν στις 20 Αυγούστου 1976. Ο πίνακας ερώτησης στην QBE είναι ο εξής: ΦOITHTHΣ ΟΝΟΜΑ P. ΕΠΩΝΥΜΟ P. ΠΑΤΡΩΝΥΜΟ ΑΜ ΗΜ_ΓΕΝ 20-08-1978 Προσέξτε ότι δώσαµε την ηµεροµηνία χωρίς να προηγείται πριν από αυτή ο χαρακτήρας «_», οπότε το σύστηµα δεν το εξέλαβε ως παράδειγµα, αλλά ως συνθήκη και έτσι έψαξε να βρει τους φοιτητές που έχουν γεννηθεί τη συγκεκριµένη ηµεροµηνία. Επίσης, προσέξτε ότι δεν βάλαµε «Ρ.» πριν από την ηµεροµηνία, αφού το ζητούµενο ήταν να έχουµε µόνο το ονοµατεπώνυµο. Ο πίνακας αποτελέσµατος για το παραπάνω παράδειγµα είναι φυσικά ο επόµενος: ΦOITHTHΣ ONOMA Νικόλαος Χρήστος EΠΩNYMO Βασιλείου Χρήστου Με την ίδια λογική µπορούµε να έχουµε πολλές συνθήκες στην ίδια γραµµή. Οι συνθήκες που βρίσκονται στην ίδια γραµµή υπολογίζονται από το σύστηµα σαν µία µεγάλη συνθήκη που έχει «AND» ανάµεσα σε κάθε επιµέρους συνθήκη. Αντίθετα, εάν θέλουµε να έχουµε συνθήκες χωρισµένες µεταξύ τους µε «OR», τότε αυτές πρέπει να τοποθετηθούν σε διαφορετικές γραµµές. 6.2 ™À¡£∏∫∂™ 149 Ας δούµε δύο παραδείγµατα. Στην επόµενη ερώτηση ζητάµε τα ονοµατεπώνυµα των φοιτητών που έχουν γεννηθεί µετά την 1η Ιανουαρίου 1978 και έχουν επώνυµο που αρχίζει από το γράµµα «Β». ΦOITHTHΣ ΟΝΟΜΑ P. ΕΠΩΝΥΜΟ Ρ. LIKE ‘B%’ ΠΑΤΡΩΝΥΜΟ ΑΜ ΗΜ_ΓΕΝ >1-1-1978 Στις συνθήκες της γλώσσας ερωτήσεων QBE µπορούµε να χρησιµοποιήσουµε όλους τους τελεστές που χρησιµοποιούσαµε και στην SQL, δηλαδή τους αριθµητικούς τελεστές «>», «<», «=», «>=», «<=» και «<>», καθώς και τους τελεστές «LIKE», «IS NULL» και «IS NOT NULL». Ο πίνακας απάντησης της προηγούµενης ερώτησης είναι ο εξής: ΦOITHTHΣ ONOMA Νικόλαος Eλένη EΠΩNYMO Βασιλείου Bασιλείου Στο επόµενο παράδειγµα ζητάµε να βρούµε τα ονοµατεπώνυµα των φοιτητών που έχουν γεννηθεί µετά την 1η Ιανουαρίου 1978 ή που έχουν επώνυµο που αρχίζει από το γράµµα «Β». Προσέξτε τώρα τον πίνακα ερώτησης: ΦOITHTHΣ ΟΝΟΜΑ P. ΕΠΩΝΥΜΟ P. Ρ. LIKE ‘B%’ Βλέπετε πώς έχουµε τοποθετήσει τις δύο συνθήκες τη µία µετά την άλλη ώστε να ισχύει το «OR». Ο πίνακας απάντησης τώρα θα είναι ο εξής: ΦOITHTHΣ ONOMA Νικόλαος Ελένη Νικόλαος Χρήστος EΠΩNYMO Βασιλείου Βασιλείου Βαρδής Χρήστου ΠΑΤΡΩΝΥΜΟ ΑΜ ΗΜ_ΓΕΝ >1-1-1978 150 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE Παρατηρούµε ότι για απλές ερωτήσεις η QBE είναι αρκετά απλή. Θα δούµε τώρα τι γίνεται µε την περίπτωση της σύνδεσης. Η φιλοσοφία παραµένει η ίδια. Χρησιµοποιούµε ένα παράδειγµα για να προετοιµάσουµε την απάντηση και έναν πίνακα απάντησης, στον οποίο σχεδιάζουµε τη ζητούµενη λύση. Θυµηθείτε το παράδειγµα µε τη σύνδεση που συζητήσαµε στην ενότητα 5.2.6. Εκεί ζητήσαµε να δούµε τα ονοµατεπώνυµα των φοιτητών και το όνοµα και το έτος ίδρυσης του τµήµατος στο οποίο ανήκουν. Αυτή η ερώτηση απαιτεί την άντληση δεδοµένων από τρεις διαφορετικούς πίνακες: Θα χρειαστεί να πάρουµε τα ονοµατεπώνυµα των φοιτητών από τον πίνακα ΦΟΙΤΗΤΕΣ, τα έτη ίδρυσης των τµηµάτων από τον πίνακα ΤΜΗΜΑ, ενώ θα χρειαστούµε και τον πίνακα ΦΟΙΤ_ΤΜΗΜΑ για να βρούµε τη σχέση των φοιτητών µε κάθε τµήµα. Οι πίνακες ερώτησης σε QBE είναι οι εξής: ΦOITHTHΣ ΟΝΟΜΑ _ΟΝΦ ΕΠΩΝΥΜΟ _ΕΠΦ TMHMA ONOMA _ΟΝΤ ΦOIT_TMHMA AM _AM AΠANTHΣH ΟΝΟΜΑ ΦΟΙΤ Ρ._ΟΝΦ ΕΠΩΝΥΜΟ Ρ._ΕΠΦ ΟΝΟΜΑ ΤΜΗ Ρ._ΟΝΤ ΕΤΟΣ_Ι∆ΡΥΣΗΣ Ρ._ΕΤ ONOMA _ΟΝΤ ΕΤΟΣ_Ι∆ΡΥΣΗΣ _ΕΤ ΠΑΤΡΩΝΥΜΟ ΑΜ _ΑΜ ΗΜ_ΓΕΝ Παρατηρήστε ότι έχουµε δύο συνδέσεις ανάµεσα σε πίνακες για να πετύχουµε το επιδιωκόµενο αποτέλεσµα. Οι συνδέσεις αυτές γίνονται µε τη χρήση κοινών παραδειγµάτων µε µεταβλητές. Έτσι, η σύνδεση του πίνακα ΦΟΙΤΗΤΗΣ µε τον πίνακα ΦΟΙΤ_ΤΜΗΜΑ γίνεται µε την 6.2 ™À¡£∏∫∂™ 151 κοινή µεταβλητή «_ΑΜ» που συνδέει τους δύο πίνακες µε τον αριθµό µητρώου. Η σύνδεση του πίνακα ΤΜΗΜΑ µε τον πίνακα ΦΟΙΤ_ΤΜΗΜΑ γίνεται µε την κοινή µεταβλητή «_ΟΝΤ» που συνδέει τους δύο πίνακες µε το όνοµα. Παρατηρήστε επίσης ότι χρησιµοποιούµε έναν προκαθορισµένο πίνακα του συστήµατος που ονοµάζεται απάντηση. Αυτός ο πίνακας είναι χρήσιµος για τη διάρθρωση των αποτελεσµάτων ειδικά σε περιπτώσεις όπου τα αποτελέσµατα έχουν στοιχεία από περισσότερους από έναν πίνακες. Το αποτέλεσµα αυτής της εντολής είναι ένας πίνακας µε τα παρακάτω αποτελέσµατα: ΟΝΟΜΑ ΦOIT Νικόλαος Ελένη Νικόλαος Χρήστος Χρήστος Μαρίνα ΕΠΩΝΥΜΟ Βασιλείου Βασιλείου Βαρδής Χρήστου Χρήστου Χατζή ONOMA TMH Μαθηµατικό Μαθηµατικό Φυσικό Πληροφορικής Πληροφορικής Φυσικό ETOΣ_I∆PYΣHΣ 1961 1961 1968 1994 1994 1968 Προσέξτε ότι στον παραπάνω πίνακα δεν έχει γίνει λάθος µε τη διπλή εµφάνιση του «Χρήστος Χρήστου», απλά υπήρχαν δύο φοιτητές µε ίδιο ονοµατεπώνυµο, αλλά διαφορετικό πατρώνυµο στη Βάση ∆εδοµένων του παραδείγµατος. Έστω ότι θέλουµε να βρούµε τα ονόµατα και τα επώνυµα των καθηγητών που έχουν γεννηθεί µετά την 1η Ιανουαρίου 1960, στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε σε QBE τόσο τον πίνακα ερώτησης όσο και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.2 Έστω ότι θέλουµε να βρούµε το όνοµα και το επώνυµο των καθηγητών που το µικρό τους όνοµα αρχίζει από ‘Μιχ’ στη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. ∆ώστε σε QBE τόσο τον πίνακα ερώτησης όσο και τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.3 152 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.4 ∆ώστε σε QBE τον πίνακα ερώτησης που να ζητά το επώνυµο, όνοµα και πατρώνυµο κάθε φοιτητή που έχει επιλέξει µαθήµατα και τα µαθήµατα που έχει πάρει από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. Eπίσης δώστε τον πίνακα µε το αναµενόµενο αποτέλεσµα. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.5 ∆ώστε σε QBE τον πίνακα ερώτησης που να ζητά το επώνυµο και τον αριθµό µητρώου κάθε φοιτητή που έχει επιλέξει µαθήµατα, τον κωδικό κάθε µαθήµατος που έχει πάρει και το ονοµατεπώνυµο κάθε καθηγητή που διδάσκει το συγκεκριµένο µάθηµα από τη Βάση ∆εδοµένων του παραδείγµατος 5.1 µε τα δεδοµένα του παραδείγµατος 5.2. Eπίσης δώστε τον πίνακα µε το αναµενόµενο αποτέλεσµα. ¢Ú·ÛÙËÚÈfiÙËÙ· 6.2 Πειραµατιστείτε σε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων υλοποιώντας τις εντολές σε QBE που δώσαµε στις παραπάνω ασκήσεις και ελέγχοντας την ορθότητα των αποτελεσµάτων σας. Βεβαιωθείτε ότι γνωρίζετε αρκετά καλά το αντικείµενο αυτής της ενότητας, πριν προχωρήσετε στην επόµενη. 6.3 ∏ QBE ÛÂ Û˘Ó‰˘·ÛÌfi Ì ÁÚ·ÊÈÎfi ÂÚÈ‚¿ÏÏÔÓ Στα περισσότερα Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων που χρησιµοποιούν σήµερα QBE υπάρχει κάποιο γραφικό περιβάλλον για τη διευκόλυνση των χρηστών. Με τη χρήση κάποιου τέτοιου περιβάλλοντος ο χρήστης µπορεί πολύ εύκολα να υλοποιήσει εντολές σε QBE. Σε αυτή την ενότητα θα παρουσιάσουµε σύντοµα πώς υλοποιούνται ερωτήσεις στη γλώσσα QBE στο σύστηµα Microsoft Access. Σε αυτό το σύστηµα, ο χρήστης κατά τη σχεδίαση µίας ερώτησης, έχει στη διάθεσή του τους πίνακες που αποτελούν τη Βάση ∆εδοµένων σε γραφική µορφή, όπως περίπου φαίνεται παρακάτω: 6 . 3 ∏ Q B E ™ ∂ ™ À ¡ ¢ À∞ ™ ª √ ª ∂ ° ƒ ∞ º π ∫ √ ¶ ∂ ƒ π µ ∞ § § √ ¡ 153 ΦOITHTHΣ ONOMA EΠΩNYMO ΠATPΩNYMO AM HM_ΓEN Έτσι, ο χρήστης µπορεί να δει το όνοµα του κάθε πίνακα και όλα τα πεδία που τον απαρτίζουν. Επίσης, βλέπει το κλειδί κάθε πίνακα µε πιο έντονα γράµµατα από τα άλλα πεδία. Σε περίπτωση που ο χρήστης θέλει να κάνει µία σύνδεση, τότε απλά το µόνο που έχει να κάνει είναι να σύρει και να αφήσει το ένα από τα δύο κλειδιά που θέλει να συνδέσει µε κάποιο άλλο πάνω σε αυτό που θέλει να συνδέσει. Αυτόµατα το σύστηµα του δείχνει ότι η σύνδεση έγινε µε µία γραµµή που συνδέει τα δύο πεδία που συνδέθηκαν. Έτσι, είναι ορατή η σύνδεση χωρίς να χρειάζεται να γραφεί ούτε µία γραµµή από ερώτηση. Στους πίνακες που παρουσιάστηκαν παραπάνω ο χρήστης έχει συνδέσει τον πίνακα «ΦΟΙΤΗΤΗΣ» µε τον πίνακα «ΦΟΙΤ_ΜΑΘ» µε το πεδίο «ΑΜ». Επίσης, έχει συνδεθεί ο πίνακας «ΦΟΙΤ_ΜΑΘ» µε τον πίνακα «ΜΑΘΗΜΑ» στο πεδίο «ΟΝΟΜΑ». Υλοποιώντας αυτή τη σύνδεση ουσιαστικά έχει απαντηθεί η ερώτηση «ποιοι µαθητές έχουν πάρει ποιο µάθηµα;». Τώρα, το µόνο που αποµένει είναι να βρεθεί και ο τρόπος παρουσίασης των αποτελεσµάτων αυτής της ερώτησης. Η QBE αυτού του συστήµατος δίνει µόνο τον πίνακα της απάντησης στην κλασική µορφή της QBE. Φυσιολογικό, αφού έχει δώσει τρόπο για να υλοποιηθούν οι συνδέσεις. Η απντηση σχηµατίζεται µε τον ίδιο τρόπο που γίνεται η σύνδεση. ∆ηλαδή ο χρήστης σύρει και αφήνει τα πεδία που θέλει να εµφανιστούν στην απάντηση από τους παραπάνω πίνακες στον πίνακα της απάντησης και αυτά (τα πεδία) εµφανίζονται µε το όνοµά τους και το όνοµα του πίνακα στον οποίο ανήκουν. Ακολούθως, ο χρήστης µπορεί να ορίσει κριτήρια ή να καθορίσει ποια πεδία θέλει να φαίνονται και ποια όχι. Ο πίνακας αποτελέσµατος είναι της µορφής που φαίνεται στο παρακάτω παράδειγµα ΦOIT_TMHMA AM ONOMA TMHMA ONOMA ETOΣ_I∆PYΣHΣ 154 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE Field: Table: Sort: Show: Criteria: Or: ΟΝΟΜΑ ΦΟΙΤΗΤΗΣ ✔ ΕΠΩΝΥΜΟ ΦΟΙΤΗΤΗΣ Ascending ✔ ΟΝΟΜΑ ΤΜΗΜΑ ✔ ΕΤΟΣ_Ι∆Ρ ΤΜΗΜΑ ✔ Σε αυτόν τον πίνακα ο χρήστης έχει σύρει τα πεδία «ΟΝΟΜΑ» και «ΕΠΩΝΥΜΟ» από τον πίνακα «ΦΟΙΤΗΤΗΣ» και τα πεδία «ΟΝΟΜΑ» και «ΕΤΟΣ_Ι∆ΡΥΣΗΣ» από τον πίνακα «ΤΜΗΜΑ». Επίσης, έχει επιλέξει τα αποτελέσµατα να είναι διαταγµένα µε βάση το πεδίο «ΕΠΩΝΥΜΟ» κατά αύξουσα σειρά και έχει επιλέξει να εµφανιστούν όλα. Θα µπορούσε να έχει βάλει και µία σειρά από κριτήρια τα οποία να είναι είτε συνδεδεµένα µε «AND» µεταξύ τους (δηλαδή να βρίσκονται στην ίδια γραµµή) ή να είναι συνδεδεµένα µε «OR» µεταξύ τους (δηλαδή να βρίσκονται σε διαδοχικές γραµµές). Έτσι, ο χρήστης µπορεί να δώσει πολύ εύκολα την εντολή σε QBE, χωρίς να χρειάζεται να θυµάται ονόµατα και κωδικούς ή να γράψει µεταβλητές. Τα ονόµατα που υπάρχουν δίπλα από κάθε γραµµή του πίνακα καθορίζουν τι σηµαίνει κάθε γραµµή και βοηθούν το χρήστη ώστε να σύρει τα σωστά πεδία ή να επιλέξει τις κατάλληλες επιλογές. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.6 ∆ώστε σε QBE στη µορφή που παρουσιάσαµε παραπάνω την ερώτηση της άσκησης 6.4. Μη δώσετε τον πίνακα αποτελεσµάτων, αφού αυτός είναι ήδη διαθέσιµος από την άσκηση 6.4. ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.7 ∆ώστε σε QBE στη µορφή που παρουσιάσαµε παραπάνω την ερώτηση της άσκησης 6.5 προσθέτοντας τον περιορισµό ότι θέλουµε να δούµε µόνο τους φοιτητές µε αριθµό µητρώου µικρότερο του 19400. Επίσης, δώστε και τον πίνακα αποτελεσµάτων που παρουσιάζει τα αποτελέσµατα µε την παρακάτω σειρά (επώνυµο φοιτητή, αριθµός µητρώου φοιτητή, κωδικός µαθήµατος, όνοµα µαθήµατος, όνοµα καθηγητή που το διδάσκει, επώνυµο καθηγητή που το διδάσκει). 6 . 3 ∏ Q B E ™ ∂ ™ À ¡ ¢ À∞ ™ ª √ ª ∂ ° ƒ ∞ º π ∫ √ ¶ ∂ ƒ π µ ∞ § § √ ¡ 155 Πειραµατιστείτε στη Microsoft Access, εάν έχετε τη δυνατότητα, δίνοντας όσο περισσότερες ερωτήσεις σε QBE µπορείτε. Φροντίστε να υλοποιήσετε τις ίδιες ερωτήσεις που δώσατε στη γλώσσα SQL, καθώς και να εκφράσετε ερωτήσεις σε φυσική γλώσσα και µετά να τις µετατρέψετε σε QBE και να τις υποβάλετε. Γενικά, µη διστάζετε να πειραµατίζεστε µε ερωτήσεις σε QBE, γιατί αυτός είναι ο καλύτερος τρόπος για να µάθετε τη χρήση µίας γλώσσας (όπως είναι η QBE) στις Βάσεις ∆εδοµένων. ¢Ú·ÛÙËÚÈfiÙËÙ· 6.3 ™‡ÓÔ„Ë Στο κεφάλαιο αυτό περιγράψαµε τη γλώσσα ερωτήσεων QBE. Στην ενότητα 6.1 παρουσιάστηκε η φιλοσοφία της QBE και µερικά παραδείγµατα ερωτήσεων, στην ενότητα 6.2 µιλήσαµε για τις συνθήκες σε QBE και, τέλος, στην ενότητα 6.3 δείξαµε πως η QBE µπορεί να χρησιµοποιηθεί σε συνεργασία µε ένα γραφικό περιβάλλον υποβολής ερωτήσεων. Σας προτείνουµε να ανατρέξετε στη βιβλιογραφία για να βρείτε περισσότερα παραδείγµατα από εντολές σε QBE και κυρίως να πειραµατιστείτε µε εντολές QBE σε κάποιο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων (βλ. εργασίες της Θεµατικής Ενότητας 9.2). 156 KEºA§AIO 6: ∏ °§ø™™∞ Eƒø∆∏™∂ø¡ QBE BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ·Ó¿ÁÓˆÛË Εγχειρίδια Συστήµατος. Η καλύτερη βιβλιογραφία που µπορούµε να σας προτείνουµε για να µάθετε QBE είναι τα εγχειρίδια του συστήµατος που χρησιµοποιείτε. Κατά κανόνα είναι πλήρη και, το κυριότερο, αναφέρονται ακριβώς στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων µε το οποίο εργάζεστε. Παρόλα αυτά, ακριβώς γιατί η QBE είναι πρότυπη γλώσσα, µπορείτε να βρείτε και να διαβάσετε για QBE σχεδόν σε κάθε βιβλίο που πραγµατεύεται το θέµα των Βάσεων ∆εδοµένων. [1] Ullman J. D., Principles of Database Systems, Computer Science Press, 1982. Είναι ένα από το πρώτα και βασικότερα βιβλία για Βάσεις ∆εδοµένων. Η γλώσσα ερωτήσεων QBE περιγράφεται στο κεφάλαιο 6 και ειδικότερα στο τµήµα 6.5, όπου παρουσιάζεται ως µία «domain calculus language». [2] Silberschatz A., Korth H., Sudarshan S, Database System Concepts, Third Edition, McGraw–Hill, 1986. Η γλώσσα ερωτήσεων QBE περιγράφεται αναλυτικά στο κεφάλαιο 5 του βιβλίου, όπου γίνεται ένα αφιέρωµα στις υπόλοιπες γλώσσες ερωτήσεων, πέρα από την SQL που είχε παρουσιαστεί στο προηγούµενο κεφάλαιο. [3] C.J.Date, An Introduction to Database Systems, Volume I, Fourth Edition, Addison–Wesley, 1986. Στο κεφάλαιο 14 και ειδικότερα στην ενότητα 14.6 γίνεται µία συνοπτική παρουσίαση της γλώσσας ερωτήσεων QBE. [4] Elmasri R. & Navathe S. B., Fundamentals of Database Systems, Addison–Wesley, 1994. Το βιβλίο υπάρχει και σε ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Θα βρείτε µία σύντοµη αναφορά στη QBE, αλλά αρκετά καλή για να αρχίσετε τη µελέτη της QBE. Σας προτείνουµε καλύτερα να αρχίσετε να µελετάτε από αυτό το βιβλίο. ∫ ∂ ∞ÓÙÈÎÂÈÌÂÓÔÛÙÚ·Ê›˜ B¿ÛÂȘ ¢Â‰ÔÌ¤ÓˆÓ ™ÎÔfi˜ Σκοπός του κεφαλαίου είναι να σας δώσει µία πολύ σύντοµη περιγραφή των αντικειµενοστραφών Βάσεων ∆εδοµένων. Θα περιγράψουµε τη φιλοσοφία των αντικειµενοστραφών Βάσεων ∆εδοµένων και τις ανάγκες που ήρθαν να καλύψουν. Τέλος, θα παρουσιάσουµε, εν συντοµία, µία γλώσσα ερωτήσεων προσανατολισµένη στα αντικείµενα. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • περιγράψετε συνοπτικά τη φιλοσοφία των αντικειµενοστραφών Βάσεων ∆εδοµένων • περιγράψετε τις βασικές διαφορές ανάµεσα στις Βάσεις ∆εδοµένων που περιγράψαµε µέχρι τώρα και στις αντικειµενοστραφείς Βάσεις ∆εδοµένων • αναφέρετε µία γλώσσα ερωτήσεων που να βασίζεται στα αντικείµενα και τη χρήση της σε µία αντικειµενοστραφή Βάση ∆εδοµένων ŒÓÓÔȘ ÎÏÂȉȿ • ∆οµηµένος Προγραµµατισµός (Structured Programming) • Αντικείµενο (Object) • Αντικειµενοστραφής (Object Oriented) • Κλάση (Class) • Μέθοδος (Method) • Γλώσσα Οικοδεσπότης (Host Language) • Γλώσσα Ορισµού ∆εδοµένων (Data Definition Language) • Κληρονοµικότητα (Inheritance) ∂ÈÛ·ÁˆÁÈΤ˜ ¶·Ú·ÙËÚ‹ÛÂȘ Στο κεφάλαιο αυτό µιλάµε πολύ συνοπτικά για τις αντικειµενοστραφείς Βάσεις ∆εδοµένων. Οι Βάσεις αυτές αναµένεται να αποτελούν την 7 º ∞ § ∞ π √ 158 K E º A § A I O 7 : ∞ ¡ ∆ π ∫ ∂ π ª ∂ ¡ √ ™ ∆ ƒ∞ º ∂ π ™ B ∞ ™ ∂ π ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡ πλειοψηφία των Βάσεων ∆εδοµένων που θα χρησιµοποιούνται στο εγγύς µέλλον, αν και σήµερα κυριαρχούν οι σχεσιακές Βάσεις ∆εδοµένων για τις οποίες µιλήσαµε στα προηγούµενα κεφάλαια. Στην ενότητα 7.1 θα µιλήσουµε για τη γενική φιλοσοφία των αντικειµενοστραφών Βάσεων ∆εδοµένων, ενώ στην ενότητα 7.2 θα δώσουµε µερικά στοιχεία για τη γλώσσα ερωτήσεων OQL, που είναι µία γλώσσα ερωτήσεων προσανατολισµένη στα αντικείµενα, και θα µιλήσουµε για την πρότυπη γλώσσα ερωτήσεων SQL3, η οποία αποτελεί εξέλιξη της γνωστής σας SQL µε µία σειρά αντικειµενοστραφών λειτουργιών. Τέλος, στην ενότητα 7.3 γίνεται µία σύνοψη του κεφαλαίου 7. Σε περίπτωση που δεν είστε εξοικειωµένοι µε τις αρχές του αντικειµενοστραφούς προγραµµτισµού, τότε καλύτερα να µην προσπαθήσετε να εµβαθύνετε σε αυτό το κεφάλαιο. Καλύτερα να µελετήσετε αυτό το κεφάλαιο, µετά από τη µελέτη των αντίστοιχων θεµατικών ενοτήτων (που µιλούν για αντικειµενοστραφή προγραµµατισµό), ώστε να γνωρίζετε τις βασικές έννοιες του αντικειµενοστραφούς προγραµµατισµού. Πάντως, σε αυτό το κεφάλαιο προσπαθήσαµε να δώσουµε τις βασικές αρχές των αντικειµενοστραφών Bάσεων ∆εδοµένων χωρίς να προϋποθέτουµε γνώσεις αντικειµενοστραφούς προγραµµατισµού. 7.1 ∏ ÊÈÏÔÛÔÊ›· ÙˆÓ ·ÓÙÈÎÂÈÌÂÓÔÛÙÚ·ÊÒÓ ‚¿ÛÂˆÓ ‰Â‰ÔÌ¤ÓˆÓ ™ÎÔfi˜ Σκοπός της ενότητας είναι να περιγραφεί γενικά η φιλοσοφία των αντικειµενοστραφών Βάσεων ∆εδοµένων σε αντίθεση µε τις σχεσιακές Βάσεις ∆εδοµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε σε πολύ αδρές γραµµές τη γενική φιλοσοφία των αντικειµενοστραφών Βάσεων ∆εδοµένων • περιγράψετε εν συντοµία τις διαφορές των σχεσιακών µε τις αντικειµενοστραφείς Βάσεις ∆εδοµένων Σε αντίθεση µε τις προηγούµενες δεκαετίες που ο προγραµµατισµός βασιζόταν στη δοµή, σε αυτή τη δεκαετία είχαµε µία βασική µεταστροφή από το λεγόµενο δοµηµένο προγραµµατισµό (structured programming) στον προγραµµατισµό προσανατολισµένο στα αντικείµενα ή αντικειµενοστραφή προγραµµατισµό (object–oriented programming). Γλώσσες προγραµµατισµού, όπως η C++, η Object PASCAL και πιο πρόσφατα η Java (γλώσσα που κυριαρχεί στην ανάπτυξη εφαρµογών για τον παγκόσµιο ιστό), είναι αντικειµενοστραφείς γλώσσες προγραµµατισµού που κυριαρχούν σταδιακά στην ανάπτυξη εφαρµογών. Η εκτεταµένη χρήση αντικειµενοστραφών γλωσσών προγραµµατισµού και η αλλαγή φιλοσοφίας που ο αντικειµενοστραφής προγραµµατισµός έχει επιφέρει ανάγκασε και τις Βάσεις ∆εδοµένων να ακολουθήσουν. Να µην ξεχνάτε πως γύρω από τις Βάσεις ∆εδοµένων χτίζονται εφαρµογές που χειρίζονται ή παρουσιάζουν τα αποθηκευµένα δεδοµένα ή ότι οι Βάσεις ∆εδοµένων είναι ένα τµήµα ενός µεγαλύτερου συστήµατος που αποτελείται από πολλές εφαρµογές λογισµικού. Για την αντικειµενοστραφή φιλοσοφία δεν θα µιλήσουµε σε αυτό το βιβλίο, αφού θεωρούµε ότι είναι είτε ήδη γνωστή, είτε ότι θα έχετε την ευκαιρία να τη διδαχθείτε εκτενώς σε σχετικές µε το αντικείµενο θεµα- 160 K E º A § A I O 7 : ∞ ¡ ∆ π ∫ ∂ π ª ∂ ¡ √ ™ ∆ ƒ∞ º ∂ π B ∞ ™ ∂ π ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡ τικές ενότητες. Θα πούµε απλά ότι η αντικειµενοστραφής φιλοσοφία χρησιµοποιεί κλάσεις αντικειµένων. Μία κλάση (class) έχει έναν τύπο και µία σειρά από µεθόδους (methods), που είναι λειτουργίες που σχετίζονται µε αυτή την κλάση. Τα αντικείµενα µιας κλάσης είναι είτε τιµές του τύπου της κλάσης, είτε έχουν τιµές του ίδιου τύπου. Οι κλάσεις είναι οργανωµένες ιεραρχικά και υπάρχει κληρονοµικότητα των ιδιοτήτων από τις ιεραρχικά ανώτερες κλάσεις προς τις ιεραρχικά κατώτερες. Στο σχεδιασµό µίας Βάσης ∆εδοµένων που βασίζεται στην αντικειµενοστραφή φιλοσοφία, όλος ο κόσµος θεωρείται ότι αποτελείται από αντικείµενα που έχουν κάποια υπόσταση. Έτσι, για παράδειγµα, αντικείµενο είναι οι φοιτητές (που συζητήσαµε στο προηγούµενο παράδειγµα), αλλά επίσης αντικείµενα είναι τα µαθήµατα και οι καρτέλες των φοιτητών. Τα αντικείµενα οργανώνονται σε οµοειδείς κλάσεις. Έτσι, για παράδειγµα, έχει νόηµα να οµαδοποιήσουµε όλους τους φοιτητές σε µία κλάση «ΦΟΙΤΗΤΗΣ» και όλα τα µαθήµατα σε µία κλάση «ΜΑΘΗΜΑ», αλλά δεν θα είχε νόηµα να οµαδοποιήσουµε τους φοιτητές και τα µαθήµατα µαζί στην ίδια κλάση, αφού δεν έχουν κάτι κοινό και έχουν διαφορετική συµµετοχή στην οργάνωση του πανεπιστηµίου. Επίσης, οι ιδιότητες και οι µέθοδοι µίας κλάσης πρέπει να είναι κοινές για όλα τα αντικείµενα αυτής της κλάσης. Για να ορισθούν αντικείµενα και να οργανωθούν σε κλάσεις σε µία αντικειµενοστραφή Βάση ∆εδοµένων, πρέπει να χρησιµοποιηθεί µία γλώσσα ορισµού δεδοµένων. Μία τέτοια γλώσσα θα πρέπει να δίνει τη δυνατότητα να χτιστούν τα αντικείµενα (χρησιµοποιώντας τους βασικούς τύπους που προσφέρει κάθε σύστηµα, όπως είναι οι «integer», «char» κτλ), να ορισθούν οι σχέσεις ανάµεσα σε κλάσεις και αντικείµενα και να περιγραφούν οι µέθοδοι που χρησιµοποιούνται σε κάθε κλάση. Μία τέτοια γλώσσα ορισµού δεδοµένων για αντικειµενοστραφείς Βάσεις ∆εδοµένων που τείνει να καθιερωθεί είναι η ODL (τα αρχικά σηµαίνουν Object Definition Language, δηλαδή Γλώσσα Καθορισµού Αντικειµένων). H ODL είναι µία προσθήκη (επέκταση) της IDL (τα αρχικά σηµαίνουν Interface Description Language, δηλαδή Γλώσσα Περιγραφής του Περιβάλλοντος Επικοινωνίας µε τον Χρήστη). Η IDL είναι τµήµα του γνωστού CORBA (Common Object Request Broker Architecture), που έχει καθιερωθεί στην υλοποίηση αντικειµενοστραφών εφαρµογών. 7 . 1 ∏ º π § √ ™ √ º π ∞ ∆ ø ¡ ∞ ¡ ∆ π ∫ ∂ π ª ∂ ¡ √ ™ ∆ ƒ∞ º ø ¡ µ ∞ ™ ∂ ø ¡ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡ 161 Αναζητήστε στη βιβλιογραφία και αναφέρατε (απλώς αναφέρατε) όσες περισσότερες αντικειµενοστραφείς Βάσεις ∆εδοµένων µπορείτε να βρείτε. ¢Ú·ÛÙËÚÈfiÙËÙ· 7.1 Μελετήστε (κατά προτίµηση από την προτεινόµενη βιβλιογραφία) τη γλώσσα ορισµού αντικειµένων ODL και περιγράψτε τη χρήση της στο σχεδιασµό αντικειµενοστραφών Βάσεων ∆εδοµένων. ¢Ú·ÛÙËÚÈfiÙËÙ· 7.2 7.2 ∏ ·ÓÙÈÎÂÈÌÂÓÔÛÙÚ·Ê‹˜ ÁÏÒÛÛ· ÂÚˆÙ‹ÛÂˆÓ OQL Î·È Ë ÚfiÙ˘Ë ÁÏÒÛÛ· ÂÚˆÙ‹ÛÂˆÓ SQL3 ™ÎÔfi˜ Σκοπός της ενότητας είναι να περιγραφεί γενικά η γλώσσα ερωτήσεων OQL, που είναι µία γλώσσα ερωτήσεων βασισµένη στα αντικείµενα, και µία σύντοµη παρουσίαση της πρότυπης γλώσσας ερωτήσεων SQL3, που είναι εξέλιξη της SQL που παρέχει δυνατότητες χειρισµού αντικειµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτής της ενότητας θα µπορείτε να: • εξηγήσετε σε πολύ αδρές γραµµές τη γενική φιλοσοφία της αντικειµενοστραφούς γλώσσας ερωτήσεων OQL • περιγράψετε εν συντοµία τη χρήση της OQL • περιγράψετε εν συντοµία κάποιες δυνατότητες χειρισµού αντικειµένων της γλώσσας ερωτήσεων SQL3 Σήµερα οι αντικειµενοστραφείς Βάσεις ∆εδοµένων δεν έχουν ακόµα γνωρίσει την ευρεία αποδοχή και χρήση που έχουν γνωρίσει οι σχεσιακές Βάσεις ∆εδοµένων. Για αυτό το λόγο και δεν υπάρχουν σε µεγάλη χρήση αντικειµενοστραφείς γλώσσες ερωτήσεων, σε αντίθεση µε την SQL και την QBE που χρησιµοποιούνται πολύ και υπάρχουν στα περισσότερα σχεσιακά Συστήµατα ∆ιαχείρισης Βάσεων ∆εδοµένων. Η νέα πρότυπη έκδοση της SQL, η SQL3, παρέχει ήδη 162 K E º A § A I O 7 : ∞ ¡ ∆ π ∫ ∂ π ª ∂ ¡ √ ™ ∆ ƒ∞ º ∂ π ™ B ∞ ™ ∂ π ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡ κάποιες αντικειµενοστραφείς λειτουργίες και µπορεί να θεωρηθεί σαν µία γλώσσα ερωτήσεων που είναι ανάµεσα στο σχεσιακό µοντέλο και στο αντικειµενοστραφές. Σε αντίθεση µε την SQL3, η OQL είναι µία καθαρά αντικειµενοστραφής γλώσσα ερωτήσεων. Τα αρχικά OQL σηµαίνουν Object Query Language, δηλαδή αντικειµενοστραφής γλώσσα ερωτήσεων. Η OQL έχει σχεδιαστεί για να είναι ενσωµατωµένη σε µία γλώσσα – οικοδεσπότη (host language) και να παρέχει ένα καλύτερο τρόπο υποβολής ερωτήσεων. Η βασική µορφή της OQL, µοιάζει µε την SQL όσον αφορά τη σύνταξη των εντολών. Η διαφορά είναι ότι στις εντολές της OQL χειριζόµαστε αντικείµενα. Μάλιστα, σε αντίθεση µε την SQL3, όπου δεν µπορεί να γίνεται χειρισµός αντικειµένων από τη γλώσσα – οικοδεσπότη, αλλά µόνο αντικείµενα από τη Βάση ∆εδοµένων και να γίνεται µεταφορά δεδοµένων, η OQL δίνει δυνατότητα χειρισµού αντικειµένων και από τη Βάση ∆εδοµένων και αντικείµενα της γλώσσας – οικοδεσπότη, παρέχοντας έτσι ένα µεγάλο πλεονέκτηµα στην υλοποίηση ερωτήσεων. Ένα παράδειγµα ερώτησης σε OQL είναι η εντολή που ακολουθεί SELECT FROM WHERE º.∂¶ø¡Àª√ º√π∆∏∆∏™ AS º º.√¡√ª∞ = ‘ªÈ¯¿Ï˘’ Παρατηρήστε τις οµοιότητες αυτής της εντολής µε τις εντολές της γλώσσας ερωτήσεων SQL, για την οποία µιλήσαµε στο κεφάλαιο 5. Η γλώσσα ερωτήσεων SQL3 έχει ενισχυθεί µε τους λεγόµενους Abstract Data Types (αφηρηµένους τύπους δεδοµένων), µε τους οποίους µπορούν να οριστούν κατά κάποιο τρόπο κλάσεις. Η εντολή αυτή είναι η εξής: CREATE TYPE [ŸÓÔÌ· ∆‡Ô˘] ( [∫·Ù¿ÏÔÁÔ˜ ηÙËÁÔÚËÌ¿ÙˆÓ Î·È ÔÈ Ù‡ÔÈ Î·ıÂÓfi˜] [√ÚÈÛÌfi˜ ÙˆÓ ÏÂÈÙÔ˘ÚÁÈÒÓ EQUALS Î·È LESS THAN] [√ÚÈÛÌfi˜ ªÂıfi‰ˆÓ] ); Ο ορισµός των EQUALS και LESS THAN είναι προαιρετικός, ενώ οι µέθοδοι µπορούν να ποικίλουν σε αριθµό ανάλογα µε την κάθε κλάση. Ακολουθεί ο ορισµός της κλάσης «ΦΟΙΤΗΤΗΣ»: 7 . 2 ∏ ∞ ¡ ∆ π ∫ ∂ π ª ∂ ¡ √ ™ ∆ ƒ∞ º ∏ ™ ° § ø ™ ™ ∞ ∂ ƒ ø ∆ ∏ ™ ∂ ø ¡ O Q L ∫ ∞ π ∏ ¶ ƒ √ ∆ À ¶ ∏ ° § ø ™ ™ ∞ ∂ ƒ ø ∆ ∏ ™ ∂ ø ¡ S Q L 3 163 CREATE TYPE º√π∆∏∆∏™ ( √¡√ª∞ VARCHAR (30), ∂¶ø¡Àª√ VARCHAR (30), ¶∞∆ƒø¡Àª√ VARCHAR (30), AM INTEGER, HM_°∂¡ DATE, EQUALS DEFAULT, LESS THAN NONE, FUNCTION ¶§∏ƒ∂™_√¡√ª∞ (:º1 º√π∆∏∆∏™) RETURNS CHAR(90); BEGIN RETURN (:º1.√¡√ª∞ AND ‘ ’ AND :º1.∂¶ø¡Àª√ AND ‘ ÙÔ˘ ’ AND :º1.¶∞∆ƒø¡Àª√); END; ); Στο προηγούµενο παράδειγµα ορίζουµε µία κλάση φοιτητής στην οποία έχουµε περιγράψει τα κατηγορήµατα τα οποία απαρτίζουν κάθε αντικείµενο. Επίσης, έχουµε ορίσει ότι δεν έχει νόηµα η σύγκριση ανάµεσα σε φοιτητές, δηλαδή εάν ένα αντικείµενο Α είναι φοιτητής και ένα αντικείµενο Β είναι φοιτητής δεν έχει νόηµα η σχέση «µικρότερο από», δηλαδή Α < Β. Τέλος, ορίσαµε και µία µέθοδο που ισχύει για κάθε αντικείµενο φοιτητής και που επιστρέφει το πλήρες όνοµα κάθε αντικειµένου. ¢Ú·ÛÙËÚÈfiÙËÙ· 7.3 Μελετήστε (κατά προτίµηση από την προτεινόµενη βιβλιογραφία) τη γλώσσα ερωτήσεων OQL και περιγράψτε τη χρήση της στην υποβολή ερωτήσεων σε αντικειµενοστραφείς Βάσεις ∆εδοµένων. Μελετήστε (κατά προτίµηση από την προτεινόµενη βιβλιογραφία) τη γλώσσα ερωτήσεων SQL3 και περιγράψτε τη χρήση της στο χεδιασµό αντικειµενοστραφών Βάσεων ∆εδοµένων. Επίσης, ορίστε τις πιθανές κλάσεις του παραδείγµατος 5.1 του κεφαλαίου 5 και προδιαγράψτε µία τουλάχιστον µέθοδο για κάθε κλάση που έχετε ορίσει στην SQL3. ¢Ú·ÛÙËÚÈfiÙËÙ· 7.4 164 K E º A § A I O 7 : ∞ ¡ ∆ π ∫ ∂ π ª ∂ ¡ √ ™ ∆ ƒ∞ º ∂ π ™ B ∞ ™ ∂ π ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡ ™‡ÓÔ„Ë Στο κεφάλαιο αυτό περιγράψαµε πολύ συνοπτικά τις βασικές αρχές των αντικειµενοστραφών Βάσεων ∆εδοµένων και µιλήσαµε λίγο για τη αντικειµενοστραφή γλώσσα ερωτήσεων OQL. Ειδικότερα, στην ενότητα 7.1 µιλήσαµε γενικά για αντικείµενα, κλάσεις και µεθόδους και τη χρήση τους στις Βάσεις ∆εδοµένων και στην ενότητα 7.2 µιλήσαµε για τη χρήση της OQL και της SQL3. Η παρουσίαση των αντικειµενοστραφών Βάσεων ∆εδοµένων και ακόµα περισσότερο της OQL και της SQL3 έγινε πολύ συνοπτικά. Ο καλύτερος τρόπος για να µάθετε περισσότερα για τις αντικειµενοστραφείς Βάσεις ∆εδοµένων είναι να µελετήσετε περισσότερα από την προτεινόµενη βιβλιογραφία που ακολουθεί. BÈ‚ÏÈÔÁÚ·Ê›· ÁÈ· ÂÚ·ÈÙ¤Úˆ ·Ó¿ÁÓˆÛË [1] Ullman J. D., Widom J., A First Course in Database Systems, Prentice Hall, 1997. Είναι ένα εισαγωγικό βιβλίο για Βάσεις ∆εδοµένων, το οποίο αναφέρει αρκετά για αντικειµενοστραφείς Βάσεις ∆εδοµένων. Στο κεφάλαιο 1 και ειδικότερα στο 1.3 (το µέλλον των Βάσεων ∆εδοµένων) παρουσιάζει τις βασικές αρχές της αντικειµενοστραφούς φιλοσοφίας, ενώ στο κεφάλαιο 8 µπορείτε να διαβάσετε για αντικειµενοστραφείς γλώσσες ερωτήσεων και να βρείτε µια εκτενή παρουσίαση της γλώσσας ODL. Επίσης, στο κεφάλαιο 2 παρουσιάζονται θέµατα σχεδίασης προσανατολισµένα στα αντικείµενα και γενικότερα στη φιλοσοφία των αντικειµενοστραφών Βάσεων ∆εδοµένων. Είναι ένα αρκετά καλό βιβλίο για να αρχίσετε να µελετάτε το θέµα των αντικειµενοστραφών Βάσεων ∆εδοµένων. [2] Silberschatz A., Korth H., Sudarshan S, Database System Concepts, Third Edition, McGraw–Hill, 1986. Το βιβλίο αυτό αφιερώνει δύο κεφάλαια στις αντικειµενοστραφείς Βάσεις ∆εδοµένων. Ειδικότερα στο κεφάλαιο 8 µε τίτλο «Object – Oriented Databases» παρουσιάζονται οι αντικειµενοστραφείς Βάσεις ∆εδοµένων και τα persistent Ctt συστήµατα. Στο κεφάλαιο 9 παρουσιάζονται οι λεγόµενες Object – Relational Databases. Κατά την άποψή µας είναι ένα από τα πολύ καλά αναγνώσµατα για το θέµα των αντικειµενοστραφών Βάσεων ∆εδοµένων και, σε περίπτωση που θέλετε να εµβαθύνετε στο αντικείµενο, σίγουρα θα έπρεπε να το συµπεριλάβετε στη µελέτη σας. [3] Elmasri R. & Navathe S. B., Fundamentals of Database Systems, Addison–Wesley, 1994. Το βιβλίο υπάρχει και σε ελληνική µετάφραση από τις εκδόσεις ∆ίαυλος σε µετάφραση Μ. Χατζόπουλου, 1996. Θέµατα αντικειµενοστραφών Βάσεων ∆εδοµένων συζητούνται στο κεφάλαιο 22 (2ος τόµος για την ελληνική έκδοση). Σε αυτό το κεφάλαιο θα βρείτε και µία πολύ καλή σύνοψη της θεωρίας της αντικειµενοστραφoύς σχεδίασης. Στο συγκεκριµένο βιβλίο καλό είναι να διαβάσετε και το κεφάλαιο 25, που µιλάει για αναδυόµενες τεχνολογίες και εφαρµογές και γενικά που συζητά το µέλλον των Βάσεων ∆εδοµένων. ∫ ∂ AÓ·ÎÂÊ·Ï·›ˆÛË ™ÎÔfi˜ Σκοπός του κεφαλαίου είναι να γίνει σύνοψη της ύλης που καλύψαµε και να δοθούν οδηγίες για το πώς να οργανώσετε τα επόµενα στάδια της µελέτη σας στις Βάσεις ∆εδοµένων. ¶ÚÔÛ‰ÔÎÒÌÂÓ· ∞ÔÙÂϤÛÌ·Ù· Όταν θα έχετε ολοκληρώσει τη µελέτη αυτού του κεφαλαίου θα µπορείτε να: • ανακεφαλαιώσετε την ύλη που διδαχθήκατε • οργανώσετε µία καλή επανάληψη σε όσα διδαχθήκατε • σχεδιάσετε τα επόµενα στάδια της µελέτης των Βάσεων ∆εδοµένων ώστε να αποκτήσετε επιπλέον γνώσεις για αυτά που συζητήσαµε σε αυτό το βιβλίο Στο βιβλίο αυτό έγινε µία εισαγωγή στα θέµατα των Βάσεων ∆εδοµένων. Ειδικότερα, µιλήσαµε για τις βασικές έννοιες που σχετίζονται µε τις Βάσεις ∆εδοµένων, ορίσαµε τι σηµαίνει Βάση ∆εδοµένων, πού πρέπει και πού δεν πρέπει να χρησιµοποιείται µία Βάση ∆εδοµένων. Επίσης, µιλήσαµε για τα πλεονεκτήµατα της οργάνωσης των δεδοµένων µας µε τη βοήθεια µίας Βάσης ∆εδοµένων έναντι της παραδοσιακής οργάνωσης των δεδοµένων µε σύστηµα αρχείων. Συζητήσαµε το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων και βοηθήσαµε να µη συγχέετε τη Βάση ∆εδοµένων µε το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Ακόµα, σας παρουσιάσαµε τους διάφορους χρήστες ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων και τον ρόλο του καθενός. Στη συνέχεια του βιβλίου µιλήσαµε για τα τρία επίπεδα της αρχιτεκτονικής ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων και δώσαµε µεγάλη έµφαση στο φυσικό επίπεδο. Μιλήσαµε για δείκτες, καταλόγους, ευρετήρια, τεχνικές κατακερµατισµού και για τα δέντρα τύπου Β. Ακολούθως, περάσαµε στα µοντέλα δεδοµένων και περιγράψαµε εν συντοµία δύο ιστορικά µοντέλα (δικτυακό και ιεραρχικό) και δώσαµε έµφαση στο σχεσιακό µοντέλο, επεξηγώντας τους πίνακες και τις σχέ- 8 º ∞ § ∞ π √ 166 KEºA§AIO 1: EI™A°ø°H σεις ανάµεσα σε πίνακες σε αυτό το µοντέλο. Μιλήσαµε για αρχές σχεδίασης Βάσεων ∆εδοµένων και αναλύσαµε τα ∆ιαγράµµατα Σχέσεων–Οντοτήτων και την αξία που έχει η εφαρµογή τους στην ανάλυση ενός προβλήµατος και τη σχεδίαση µίας Βάσης ∆εδοµένων. Στα πλαίσια αυτού του βιβλίου µιλήσαµε για κάποια γενικά θέµατα που αφορούν τις Βάσεις ∆εδοµένων, όπως είναι η ταυτόχρονη προσπέλαση στα δεδοµένα, ο έλεγχος της ακεραιότητας των δεδοµένων και το κλείδωµα των δεδοµένων και αναφέραµε τα προβλήµατα του deadlock και του livelock. Στα πλαίσια της ευρύτερης παρουσίασης των Σχεσιακών Βάσεων ∆εδοµένων έγινε µία παρουσίαση της Σχεσιακής Άλγεβρας και του Σχεσιακού Λογισµού. Μεγάλη έµφαση δώσαµε στη γλώσσα ερωτήσεων SQL. Για την καλύτερη εκµάθηση αυτής της γλώσσας δώσαµε αρκετά παραδείγµατα και ασκήσεις που σίγουρα εκτελέσατε και αποκτήσατε εµπειρία στην SQL. Ακολούθως, και µε δεδοµένη την εµπειρία σας στη γλώσσα ερωτήσεων SQL, έγινε παρουσίαση της γλώσσας ερωτήσεων QBE. Συζητήθηκε η διαφορετική φιλοσοφία της QBE και η φιλικότητά της προς το χρήστη, καθώς και οι πίνακες ερωτήσεων και απαντήσεων. ∆ώσαµε και για τη γλώσσα ερωτήσεων QBE αρκετά παραδείγµατα και ασκήσεις, όπως και ένα παράδειγµα από ένα σύστηµα που χρησιµοποιεί QBE ως βασική γλώσσα ερωτήσεων. Τέλος, έγινε µία πολύ σύντοµη αναφορά (καθαρά για ενηµέρωσή σας) στις αντικειµενοστραφείς Βάσεις ∆εδοµένων και στην εξέλιξη που επιφέρουν στη γενικότερη φιλοσοφία των Βάσεων ∆εδοµένων. Μιλήσαµε για την αντικειµενοστραφή γλώσσα ορισµού δεδοµένων ODL, την πρότυπη γλώσσα ερωτήσεων SQL3 και τις δυνατότητες που παρέχει για ορισµό αφηρηµένων τύπων δεδοµένων και περιγράψαµε την αντικειµενοστραφή γλώσσα ερωτήσεων OQL. ™˘Ó¤¯ÂÈ· ÌÂϤÙ˘ Όπως θα διαπιστώσατε ήδη, αυτό το βιβλίο είναι πολύ συνοπτικό. Εάν το συγκρίνετε µε τα βιβλία Βάσεων ∆εδοµένων που είναι γραµµένα στα αγγλικά και που τα αναφέρουµε ως βιβλιογραφία προαιρετικής ανάγνωσης, θα δείτε ότι είναι ένα κλάσµα του όγκου αυτών των βιβλίων. Αυτό σηµαίνει ότι είναι συνοπτικό και ότι σας παρέχει τις BA™EI™ ¢E¢OMENøN 167 βασικές έννοιες που πρέπει να γνωρίζετε, χωρίς όµως να εµβαθύνει σε κάποιο από τα θέµατα που συζητήσαµε. Σε περίπτωση που θέλετε να εµβαθύνετε σε κάποιο θέµα τότε ο µόνος τρόπος είναι να µελετήσετε τη βιβλιογραφία για αυτό το θέµα. Μάλιστα σας συµβουλεύουµε να µην περιοριστείτε σε ένα µόνο βιβλίο, αλλά να σχεδιάσετε τη µελέτη σας διαβάζοντας από περισσότερα του ενός βιβλία. Σε τελική ανάλυση, αυτή είναι και η φιλοσοφία της εκπαίδευσης από απόσταση. Το βασικό εγχειρίδιο να σας παρέχει κατευθυντήριες γραµµές και εσείς να µπορείτε να αντλείτε επιπλέον γνώση (αν το επιθυµείτε) από πολλαπλές πηγές. Τέλος, όσο αφορά τις γλώσσες ερωτήσεων (SQL και QBE) που παρουσιάσαµε, ο καλύτερος τρόπος για να τις µάθετε είναι η εξάσκηση. Αρκετές ασκήσεις υπάρχουν και στο εργαστηριακό µάθηµα «Βάσεις ∆εδοµένων» της Θεµατικής Ενότητας 9.2, που θα έχετε τη δυνατότητα να παρακολουθήσετε στο µέλλον. Οι ασκήσεις που δίνονται σε αυτό το βιβλίο είναι καλό, αφού γίνουν πρώτα σε χαρτί, µετά να εκτελεστούν και σε κάποιο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, από όσους από εσάς έχετε τη δυνατότητα. Ολοκληρώνοντας, τώρα είναι ένα καλό χρονικά σηµείο για να κάνετε µία καλή επανάληψη σε όσα διαβάσατε. Χρησιµοποιήστε αυτό το κεφάλαιο ως υπόδειγµα για να αρχίσετε να ξαναδιαβάσετε όσα συζητήσαµε. E›ÏÔÁÔ˜ Φτάσατε στη µελέτη του τρίτου τόµου της Θεµατικής Ενότητας «Αρχές Τεχνολογίας Λογισµικού». Ελπίζουµε ότι η µελέτη του σας βοήθησε να κατανοήσετε τις βασικές αρχές των Βάσεων ∆εδοµένων. Τώρα είστε σε θέση να προχωρήσετε περισσότερο σε µελέτη εξειδικευµένων θεµάτων και εµβάθυνση στα θέµατα που συζητήσαµε από τη βιβλιογραφία που σας παρέχουµε. Σας ευχόµαστε καλή συνέχεια µε τις σπουδές σας. Mιχάλης Ξένος – ∆ηµήτρης Xριστοδουλάκης A·ÓÙ‹ÛÂȘ ·Û΋ÛÂˆÓ ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.1 Τα {1, 2, 4, 5, 7, 9} είναι δεδοµένα. (ΣΩΣΤΟ) Όπως ακριβώς αναφέρεται και στο παράδειγµα 1.1 του βιβλίου είναι µια συλλογή από αριθµούς. Εάν σας µπέρδεψε το γεγονός ότι δεν έχουν λογική σειρά, προσέξτε: Το αν έχουν λογική σειρά ή όχι δεν έχει σηµασία για το αν είναι δεδοµένα ή όχι, αλλά για την πληροφορία που θα µπορέσουµε να εξάγουµε από αυτά. Τα {1, “Νίκος”, 4, 5, “Ποδήλατο”} είναι δεδοµένα. (ΣΩΣΤΟ) Είναι µια συλλογή από αριθµούς και συµβολοσειρές. Εάν σας µπέρδεψε το γεγονός ότι αναµειγνύονται αριθµοί και συµβολοσειρές, θυµηθείτε ότι όπως και στην προηγούµενη πρόταση δεν προσπαθούµε να ερµηνεύουµε τα δεδοµένα. Τα {“Αθήνα”, 34, “Παρίσι”, 28, “Μόσχα”, 11, “Μαδρίτη”, 37, “Ρώµη”, 33} είναι πληροφορία. (ΛΑΘΟΣ) Θα µπορούσαν να γίνουν πληροφορία εάν µας έλεγαν ότι αντιπροσωπεύουν πόλεις τις Ευρώπης και τις θερµοκρασίες τους σε °C. Προσοχή, εάν απαντήσατε ότι είναι πληροφορία αυτό έγινε γιατί είσαστε αρκετά έξυπνος/η, ώστε να καταλάβετε το πλαίσιο αναφοράς, όµως µην ξεχνάτε ότι η πρόταση δεν είναι πληροφορία, στην πληροφορία καταλήξατε εσείς! Τα {“Αθήνα”, 34, “Παρίσι”, 28, “Μόσχα”, 11, “Μαδρίτη”, 37, “Ρώµη”, 33} είναι δεδοµένα. (ΣΩΣTO) Είναι δεδοµένα. Βλ. την απάντηση στην 2η πρόταση. Τα δεδοµένα γίνονται πληροφορία µόλις αποθηκευτούν στον ηλεκτρονικό υπολογιστή. (ΛΑΘΟΣ) Τα δεδοµένα παραµένουν δεδοµένα, όταν αποθηκεύονται στον ηλεκτρονικό υπολογιστή. Εάν επιλέξατε σωστό µην απογοητεύεστε, απλά ξαναδιαβάστε την ενότητα 1.1.1 και προσπαθήστε να δηµιουργήσετε µερικά δικά σας παραδείγµατα δεδοµένων ώστε να κατανοήσετε καλύτερα τι είναι δεδοµένα και τι πληροφορία. 1.2 ∆εδοµένα για την υγρασία των πόλεων. Π.χ. υγρασία 87%. (ΣΩΣΤΟ) Είναι µετεωρολογικά δεδοµένα και βέβαια θα µπορούσαν να χρησιµοποιηθούν στη Βάση ∆εδοµένων. 172 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 1 ∆εδοµένα και για άλλες ώρες τις ηµέρας, όπως η θερµοκρασία των πόλεων ανά ώρα. (ΣΩΣΤΟ) Πάλι η Βάση ∆εδοµένων θα παραµείνει µία Μετεωρολογική Βάση ∆εδοµένων. Βέβαια θα απαιτείται µεγαλύτερη προσπάθεια για τη εισαγωγή των δεδοµένων, αφού θα έχουµε δεδοµένα ανά ώρα, αλλά δεν παύει να είναι σωστό. ∆εδοµένα για τον αέρα και την έντασή του σε κάθε πόλη κάθε µεσηµέρι. (ΣΩΣΤΟ) Είναι µετεωρολογικά δεδοµένα και βέβαια θα µπορούσαν να χρησιµοποιηθούν στη Βάση ∆εδοµένων. 1.3 α) Ναι, µια Βάση ∆εδοµένων πρέπει να αποτελείται από δεδοµένα σχετικά µεταξύ τους, όµως δεν είναι µόνο αυτό που την ορίζει ως Βάση ∆εδοµένων. Μάλλον παρασυρθήκατε και επιλέξατε την πρώτη σωστή απάντηση χωρίς να διαβάσετε όλες τις απαντήσεις. β) Ναι, µια Βάση ∆εδοµένων πρέπει να παρέχει ένα τρόπο χειρισµού των δεδοµένων έτσι ώστε να µπορούν να εξαχθούν πληροφορίες από αυτά, όµως δεν είναι µόνο αυτό που την ορίζει ως Βάση ∆εδοµένων. Εάν λείπουν τα α) και γ) τότε δεν είναι Βάση ∆εδοµένων. ∆εν πειράζει που δεν απαντήσατε σωστά, αλλά ξαναδιαβάστε τον ορισµό της Βάση ∆εδοµένων στην ενότητα 1.1.2. γ) Ναι, µια Βάση ∆εδοµένων πρέπει να σχετίζεται µε κάποιο υπαρκτό πρβληµα το οποίο να αναπαριστά µε δεδοµένα για κάποιο συγκεκριµένο σκοπό. Όµως δεν είναι µόνο αυτό που την ορίζει ως Βάση ∆εδοµένων. Εάν λείπουν τα α) και β), τότε δεν είναι Βάση ∆εδοµένων. ∆εν πειράζει που δεν απαντήσατε σωστά, αλλά ξαναδιαβάστε τον ορισµό της Βάση ∆εδοµένων στην ενότητα 1.1.2. δ) Σωστά. Βάση ∆εδοµένων είναι αυτή που συγκεντρώνει όλα τα παραπάνω. Μπράβο ήταν άσκηση που εύκολα µπορούσατε να παρασυρθείτε και να κάνετε λάθος. Είσαστε πολύ προσεκτικός/ή. 1.4 Για κάθε Βάση ∆εδοµένων χρειαζόµαστε διαφορετικό Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. (ΛΑΘΟΣ) Είπαµε πως µε ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων µπορούµε να υλοποιήσουµε και να χειριζόµαστε πολλές Βάσεις ∆εδοµένων. Εάν απαντήσατε «Σωστό» µην απογοητεύεστε. Μιλήσαµε για πολλές έννοιες και µάλλον έχετε µπερδευτεί λίγο. Κάντε µία επανάληψη στις ενότητες 1.1 και 1.2 και όλα θα αρχίσουν να ξεκαθαρίζουν A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 1 173 Τη µεταφορά των δεδοµένων από και προς το υλικό αποθήκευσης την αναλαµβάνει το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. (ΣΩΣΤΟ) Σωστά! Ειδικότερα την µεταφορά δεδοµένων την αναλαµβάνει το τµήµα του Συστήµατος που ονοµάζεται «Λογισµικό Αποθήκευσης και Ανάκλησης ∆εδοµένων» όπως φαίνεται στο σχήµα της ενότητας 1.2.2. Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων είναι πολλές Βάσεις ∆εδοµένων µαζί. (ΛΑΘΟΣ) Με ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων µπορούν να υλοποιηθούν και να χειρίζονται πολλές Βάσεις ∆εδοµένων, αλλά αυτό δεν σηµαίνει πως πολλές Βάσεις ∆εδοµένων είναι ένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων. Εάν απαντήσατε «Σωστό» καλύτερα να ξαναµελετήσετε τις ενότητες 1.2, 1.2.1 και 1.2.2. Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων αποτελείται από το Λογισµικό Χειρισµού Ερωτήσεων, το Λογισµικό Αποθήκευσης και Ανάκλησης ∆εδοµένων και το Υλικό Αποθήκευσης των ∆εδοµένων. (ΛΑΘΟΣ) Αυτή ήταν µια δύσκολη ερώτηση. Εάν επιλέξατε «Λάθος» τότε µπράβο σας. Το λάθος είναι ότι το Υλικό Αποθήκευσης των ∆εδοµένων δεν αποτελεί τµήµα του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων. Εάν απαντήσατε «Σωστό» δεν πειράζει. Θυµηθείτε τον ορισµό του Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων. Είπαµε ότι είναι «…το λογισµικό…» και όχι το υλικό. 1.5 Η χρήση της βάσης ∆εδοµένων µας εξασφαλίζει ότι δύο χρήστες δεν θ µπορέσουν να διαβάσουν ταυτόχρονα τα ίδια δεδοµένα. (ΛΑΘΟΣ) Tο Σύστηµα ∆ιαχείρισης προστατεύει τα δεδοµένα από ταυτόχρονες αλλαγές από δύο ή περισσότερους χρήστες. Όµως η ανάγνωση των δεδοµένων από περισσότερους από ένα χρήστη τη φορά είναι πλεονέκτηµα της χρήσης της Βάσης ∆εδοµένων. Εάν απαντήσατε «Λάθος» µπράβο σας, ήταν µια ερώτηση που µπορούσε να σας µπερδέψει. Εάν απαντήσατε «Σωστό» δεν πειράζει, απλά ξαναδιαβάστε την ενότητα 1.3.1. Η Βάση ∆εδοµένων παρέχει ένα µηχανισµό που παρέχει ταχύτατα απαντήσεις σε ερωτήσεις του χρήστη. (ΣΩΣΤΟ) Όντως η Βάση ∆εδοµένων παρέχει αυτή τη δυνατότητα. Εάν απαντήσατε λάθος µην απογοητεύεστε, αλλά καλύτερα να κάνετε µία επανάληψη στις ενότητες 1.2 και µετά να ξαναδιαβάσετε την ενότητα 1.3.2. 174 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 1 Η Βάση ∆εδοµένων δεν επιτρέπει αλλαγές στη µορφή των δεδοµένων. (ΛΑΘΟΣ) Όπως διαβάσατε στην ενότητα 1.3.3 η Βάση ∆εδοµένων παρέχει ευελιξία σε τέτοιου είδους αλλαγές. Εάν απαντήσατε «Σωστά» µάλλον µπερδευτήκατε. Μην απογοητεύεστε. Η ποιότητα των δεδοµένων είναι καλύτερη εάν χρησιµοποιήσουµε αρχεία αντί για Βάση ∆εδοµένων. (ΛΑΘΟΣ) Όπως διαβάσατε στην ενότητα 1.3.4 η ποιότητα των δεδοµένων είναι καλύτερη µε τη χρήση Βάσης ∆εδοµένων λόγω των µηχανισµών προστασίας που παρέχει αυτή. Εάν απαντήσατε «Σωστά» µάλλον µπερδευτήκατε. Μην απογοητεύεστε. Καλύτερα να κάνετε µια επανάληψη σε ότι έχετε µελετήσει σε αυτή την ενότητα. 1.6 Πληροφορία είναι δεδοµένα που δεν έχουν αποθηκευτεί σε ηλεκτρονικό υπολογιστή. (ΛΑΘΟΣ) Θυµηθείτε τους ορισµούς που µελετήσατε στην ενότητα 1.1.1. Η πληροφορία εξάγεται από τα δεδοµένα, ανεξαρτήτως από που βρίσκονται αυτά αποθηκευµένα. Εάν απαντήσατε «Σωστό» µάλλον δεν δώσατε πολύ βάρος στην επανάληψη που σας προτείναµε. Στη Βάση ∆εδοµένων αποθηκεύονται δεδοµένα, από τα οποία εξάγονται πληροφορίες. (ΣΩΣΤΟ) Είναι σωστό. Εξάλλου αυτός είναι ακριβώς και ο σκοπός µιας Βάσης ∆εδοµένων. Εάν απαντήσατε «Λάθος» µάλλον µπερδευτήκατε µε τον ορισµό της Βάσης ∆εδοµένων. ∆εν πειράζει, αλλά καλύτερα επαναλάβετε την επανάληψη του κεφαλαίου 1. Κάθε συλλογή δεδοµένων αποτελεί µία Βάση ∆εδοµένων. (ΛΑΘΟΣ) Είπαµε πως Βάση ∆εδοµένων δεν είναι απλά µία συλλογή δεδοµένων, αλλά ένα µοντέλο του πραγµατικού κόσµου µαζί µε τον τρόπ χειρισµού των δεδοµένων. Εάν απαντήσατε «Σωστό» ξαναµελετήστε τον ορισµό της ενότητας 1.1.2. Βάση ∆εδοµένων δεν µπορεί να υπάρξει χωρίς ηλεκτρονικό υπολογιστή. (ΛΑΘΟΣ) Υπάρχει και το παράδειγµα 1.2 που δεν χρησιµοποιεί ηλεκτρονικό υπολογιστή. Εάν απαντήσατε «Σωστό» ίσως σας µπέρδεψε το γεγονός ότι είπαµε ότι αυτή η Βάση ∆εδοµένων δεν είναι καθόλου ρεαλιστική λύση. Όµως δεν παύει να είναι µία Βάση ∆εδοµένων. Το Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων διευκολύνει τη δηµιουργία και συντήρηση A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 1 175 Βάσεων ∆εδοµένων. (ΣΩΣΤΟ) Ακριβώς αυτός είναι ο ρόλος του. Εάν απαντήσατε «Λάθος» µάλλον µπερδευτήκατε µε τον ορισµό της ενότητας 1.2. ∆εν πειράζει, αλλά καλύτερα επαναλάβετε την επανάληψη του κεφαλαίου 1. Ο ∆ιαχειριστής ενός Συστήµατος ∆ιαχείρισης Βάσεων ∆εδοµένων µπορεί να δηµιουργήσει Βάσεις ∆εδοµένων και να ορίσει Ιδιοκτήτες για κάθε Βάση ∆εδοµένων. (ΣΩΣΤΟ) Ο ορισµός Βάσεων ∆εδοµένων και αρµοδιοτήτων χρηστών είναι βασική εργασία του ∆ιαχειριστή Συστήµατος. Εάν απαντήσατε «Λάθος», καλύτερα να δώσετε έµφαση στην επανάληψη της ενότητας 1.4. Οι Ιδιοκτήτες µίας Βάσης ∆εδοµένων µπορούν να διαγράψουν ή να ορίσουν χρήστες σε αυτή τη Βάση ∆εδοµένων. (ΣΩΣΤΟ) Ο ρόλος του ιδιοκτήτη είναι και ο ορισµός χρηστών, καθώς και των αρµοδιοτήτων κάθε χρήστη (δηλαδή σε ποιο επίπεδο θα ανήκει). Εάν απαντήσατε «Λάθος», µάλλον µπερδέψατε τις αρµοδιότητες του ∆ιαχειριστή Συστήµατος µε αυτές του Ιδιοκτήτη της Βάσης ∆εδοµένων. Οι Ιδιοκτήτες µίας Βάσης ∆εδοµένων µπορούν να διαγράψουν ή να ορίσουν µόνο τους Χρήστες Κατώτερης ∆ιαβάθµισης σε αυτή τη Βάση ∆εδοµένων. (ΛAΘOΣ) Μπορούν να διαγράψουν, ή να ορίσουν χρήστες κάθε επιπέδου. Βλέπε την απάντηση στην προηγούµενη ερώτηση. Tο λάθος είναι στο «µόνο». Προσοχή: Εάν στις ερωτήσεις αυτές έχετε δώσει περισσότερες από µία λαθεµένες απαντήσεις τότε προτείνουµε να µην προχωρήσετε µε τη µελέτη της εποµένης ενότητας, αλλά να επαναλάβετε την επανάληψη του κεφαλαίου. Πάντως µην απογοητεύεστε. Μελετήσατε αρκετές έννοιες που αντιµετωπίσατε για πρώτη φορά και είναι λογικό να έχετε µπερδευτεί λίγο. 176 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 2 2.1 Ακολουθούν οι σωστές απαντήσεις. Μπράβο σας, εάν απαντήσατε σωστά. Σε αντίθετη περίτωση αφιερώστε χρόνο για να κάνετε µία επανάληψη στην ενότητα 2.1, δίνοντας ιδιαίτερη έµφαση στους ορισµούς. Μην απογοητεύεστε εάν δεν απαντήσατε σωστά, αλλά µην παραλείψετε την επανάληψη. α) Ως διαφάνεια ορίζεται το γεγονός ότι ο χρήστης δε γνωρίζει που βρίσκονται τα δεδοµένα και απλά βλέπει το αποτέλεσµα των εντολών που εκτελεί στο εξωτερικό επίπεδο. β) Ως φυσικό επίπεδο της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα δεδοµένα αποθηκεύονται και οργανώνονται πραγµατικά στη Βάση ∆εδοµένων. γ) Ως εξωτερικό επίπεδο της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα δεδοµένα της Βάσης ∆εδοµένων παρουσιάζονται στο χρήστη. 2.2 Ο χρήστης πρέπει να περιγράφει κάθε εντολή που δίνει στο εξωτερικό επίπεδο µε την αντίστοιχη εντολή στο φυσικό επίπεδο. (ΛΑΘΟΣ) Στην ενότητα 2.1.2 είπαµε ότι ο χρήστης βλέπει µόνο τις εντολές στο εξωτερικό επίπεδο. ∆είτε επίσης και τον ορισµό της διαφάνειας στην ενότητα 2.1.3. Σύµφωνα µε αυτόν τον ορισµό ο χρήστης δεν πρέπει να ασχολείται µε το φυσικό επίπεδο. Άρα η σωστή απάντηση είναι (ΛΑΘΟΣ). Το επίπεδο αντίληψης συνδέει το φυσικό επίπεδο µε το εξωτερικό επίπεδο. (ΣΩΣΤΟ) Είναι σωστό σύµφωνα µε όσα περιγράφονται στην ενότητα 2.1.4. Εάν απαντήσατε λάθος, διαβάστε ξανά τους ορισµούς σε αυτή την ενότητα. Ο χρήστης βλέπει τα δεδοµένα στο εξωτερικό επίπεδο. (ΣΩΣΤΟ) Είναι σωστό σύµφωνα µε τον ορισµό της ενότητας 2.1.2. ∆ιαφάνεια σηµαίνει ότι ο χρήστης βλέπει τη µορφή των δεδοµένων για κάθε επίπεδο. (ΛΑΘΟΣ) Μπράβο σας, εάν επιλέξατε (ΛΑΘΟΣ) γιατί είναι πραγµατικά δύσκολη έννοια, αφού µπορείτε να µπερδευτείτε µε τον ετυµολογικό ορισµό της λέξης «διαφάνεια». ∆ιαβάστε ξανά τον ορισµό της ενότητας 2.1.3, εάν απαντήσατε (ΣΩΣΤΟ). Στο επίπεδο αντίληψης δεν επιτελούνται στην πραγµατικότητα λειτουργίες, απλά είναι ένα επίπεδο για να συνδέει το φυσικό µε το εξωτερικό επίπεδο. (ΛΑΘΟΣ) A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 2 177 Βέβαια είναι λάθος. ∆ιαβάστε την ενότητα 2.1.4 και µελετήστε ξανά τα σχήµατα 2.2 και 2.3 ειδικά στο σχήµα 2.3 παρουσιάζονται µία σειρά από λειτουργίες που επιτελούνται στο επίπεδο αντίληψης. 2.3 «102», «17/12/1998», «23» (ΣΩΣΤΟ) Είναι ένα κλασικό παράδειγµα εγγραφής, όπως την ορίσαµε στην εκφώνηση της άσκησης. Μπράβο σας εάν απαντήσατε (ΣΩΣΤΟ). «132», «∆εν έγινε µέτρηση», «0» (ΣΩΣΤΟ) Μπράβο σας εάν απαντήσατε (ΣΩΣΤΟ), γιατί ήταν εύκολο να κάνετε λάθος. Θυµηθείτε ότι ως ηµεροµηνία ορίσαµε «Κείµενο (20)», άρα η τιµή «∆εν έγινε µέτρηση» είναι αποδεκτή τιµή. «8786117», «6201345α», «123» (ΣΩΣΤΟ) Μπράβο σας εάν απαντήσατε (ΣΩΣΤΟ), γιατί και εδώ ήταν πολύ εύκολο να κάνετε λάθος. Ο κωδικός δεν πρέπει να έχει µήκος 4 χαρακτήρες, αλλά να είναι 4 Bytes. Αυτό σηµαίνει ότι αριθµοί µέχρι και τον 4.294.967.296 είναι δεκτοί, άρα και ο 8.786.117 είναι αποδεκτός. Μην απογοητεύεστε, εάν απαντήσατε λάθος. «12», «17/11/1998», «555» (ΛΑΘΟΣ) Η σωστή απάντηση είναι (ΛΑΘΟΣ), όχι γιατί η θερµοκρασία 555 είναι πολύ υψηλή, αλλά γιατί ο αριθµός 555 είναι 2 Bytes και όχι 1. «ΑΒ», «13/02/1999», «23» (ΛΑΘΟΣ) Η σωστή απάντηση είναι (ΛΑΘΟΣ), γιατί η τιµή «ΑΒ» δεν αντιστοιχεί σε ακέραιο αριθµό. Μπράβο σας εάν απαντήσατε σωστά σε όλες τις εγγραφές. Σε αντίθετη περίπτωση αφιερώστε λίγο χρόνο για µία επανάληψη στην ενότητα 2 του κεφαλαίου 2. 2.4 1) Η σωστή απάντηση είναι 29 blocks. 2) Η σωστή απάντηση είναι 143 blocks. 3) Η σωστή απάντηση είναι 1 block. Η λογική των λύσεων είναι η εξής: Κάθε block έχει διαθέσιµα 200–20=180 Bytes (είπαµε ότι τα 20 δεσµεύονται). Άρα σε κάθε block χωράνε 7 εγγραφές (180 Bytes 178 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 2 έχει το block και 25 Bytes για κάθε εγγραφή, 180/25=7,2. Όµως, δεν µπορούµε να έχουµε 7,2 εγγραφές αφού είπαµε ότι µία εγγραφή πρέπει να είναι ολόκληρη στο ίδιο block, άρα η απάντηση είναι 7). Εφόσον κάθε block χωράει 7 εγγραφές για τις 200 εγγραφές θα χρειαστούµε 200/7=28,57 blocks, δηλαδή για το (1) το αρχείο θα πρέπει να έχει 29 blocks (δεν µπορεί να έχει 28,57 blocks). Με τον ίδιο τρόπο η απάντηση στο (2) προκύπτει 143 blocks. Τέλος η απάντηση στο (3) είναι 1 block, αφού δεν µπορούµε να έχουµε λιγότερα από 1 block ανά αρχείο. 2.5 1) Η απάντηση είναι 5%. Έχουµε 2000 εγγραφές και κάθε block έχει 20 εγγραφές, άρα έχουµε 2000/20=100 blocks. Για κάθε block απαιτείται µία νέα εγγραφή για τον κατάλογο, άρα έχουµε 100 νέες εγγραφές που χρειάζονται 100/20=5 νέα blocks. Έτσι αντί για 100 blocks χρησιµοποιούµε 105 blocks δηλαδή µία αύξηση 5%. 2) Η απάντηση είναι 11%. Έχουµε 2000 εγγραφές και κάθε block έχει 10 εγγραφές, άρα έχουµε 2000/10=200 blocks. Για κάθε block απαιτείται µία νέα εγγραφή για τον κατάλογο του πρώτου επιπέδου, άρα έχουµε 200 νέες εγγραφές που χρειάζονται 200/10=20 νέα blocks για το πρώτο επίπεδο. Έχουµε επίσης 20 εγγραφές για το δεύτερο επίπεδο, που χρειάζονται 20/10=2 νέα blocks για το δεύτερο επίπεδο. Έτσι αντί για 200 blocks χρησιµοποιούµε επιπλέον 20+2=22, άρα σύνολο 222 blocks δηλαδή µία αύξηση 11%. 3) Η λύση είναι 11,5%. Προσοχή είναι ίδια µε την προηγούµενη (2) µέχρι το δεύτερο επίπεδο, µόνο που για να δεικτοδοτήσουµε τα δύο blocks του δευτέρου επιπέδου χρησιµοποιούµε ένα ακόµα block στο τρίτο επίπεδο. Άρα 22+1=23 blocks αντί για 200 ή ποσοστό αύξησης 11,5%. A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 3 179 3.1 Ακολουθούν οι σωστές απαντήσεις. Μπράβο σας, εάν απαντήσατε σωστά. Σε αντίθετη περίπτωση αφιερώστε χρόνο για να κάνετε µία επανάληψη στην ενότητα 3.1. i. Είναι η εγγραφή µε κωδικό 106. Η µόνη εγγραφή που δεν έχει γονιό. ii. Είναι οι εγγραφές µε κωδικούς 11, 13, 17, 621, 21, 24 και 35. Προσέξτε τον ορισµό. Φύλλα είναι οι εγγραφές που δεν έχουν κανένα παιδί. Άρα και η εγγραφή µε κωδικό 621 είναι φύλλο. iii. Έχει τις εγγραφές µε κωδικούς 21 και 24. Όπως φαίνεται στο σχήµα. iv. Είναι η εγγραφή µε κωδικό 177. Προσοχή όχι η εγγραφή που βρίσκεται ακριβώς πάνω της στο σχέδιο, αλλά η εγγραφή που είναι ιεραρχικά συνδεδεµένη µε αυτή, δηλαδή ο γονιός της. Η εγγραφή που είναι πάνω από την εγγραφή µε κωδικό 17 είναι η εγγραφή 13, αλλά δεν υπάρχει σύνδεση από την εγγραφή αυτή στην εγγραφή µε κωδικό 17. v. Καµία. Είπαµε στο (ii) ότι η εγγραφή 621 είναι φύλλο, άρα δεν έχει παιδιά. 3.2 Μπράβο σας, εάν απαντήσατε σε όλες τις προτάσεις σωστά. ∆εν ήταν εύκολη άσκηση. Σε αντίθετη περίπτωση διαβάστε ξανά την ενότητα 3.1 και επαναλάβατε την άσκηση. Η εγγραφή µε κωδικό 177 είναι η ρίζα των εγγραφών µε κωδικούς 11, 13 και 17. (ΛΑΘΟΣ) Λάθος. Είναι ο γονιός των παραπάνω εγγραφών, αλλά όχι η ρίζα. Κάθε δέντρο έχει µία ρίζα και το συγκεκριµένο έχει ως ρίζα την εγγραφή µε κωδικό 106. Η εγγραφή µε κωδικό 177 είναι παιδί της εγγραφής µε κωδικό 106. (ΣΩΣΤΟ) Προφανές από το σχήµα. Η εγγραφή µε κωδικό 411 είναι παιδί της εγγραφής µε κωδικό 621. (ΛΑΘΟΣ) Αν και σχηµατικά είναι κάτω από την εγγραφή µε κωδικό 621, δεν είναι παιδί της, γιατί δεν συνδέονται ιεραρχικά. Η εγγραφή µε κωδικό 621 είναι φύλλο, άρα δεν έχει παιδιά. Η εγγραφή µε κωδικό 621 είναι φύλλο. (ΣΩΣΤΟ) Είναι σωστό. (Βλ. την προηγούµενη απάντηση και την απάντηση ii της άσκησης 3.1.) Η εγγραφή µε κωδικό 13 είναι γονιός της εγγραφής µε κωδικό 17. (ΛΑΘΟΣ) Λάθος. Είναι και οι δύο παιδιά της εγγραφής µε κωδικό 177. 180 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆∞•π√§√°∏™∏™ / KEº. 3 3.3 Μπράβο σας, εάν απαντήσατε σε όλες τις προτάσεις σωστά. ∆εν ήταν εύκολη άσκηση. Σε αντίθετη περίπτωση διαβάστε ξανά τις ενότητες 3.1 και 3.2 και επαναλάβατε την άσκηση. 1) ∆εν είναι ιεραρχικό δέντρο, γιατί οι εγγραφή 2 δεν έχει κανένα γονιό. Μελετήστε τους περιορισµούς της ενότητας 3.1 για τα ιεραρχικά δέντρα. 2) Είναι ιεραρχικό δέντρο, αφού κάθε εγγραφή έχει µόνο ένα γονέα. Η ρίζα είναι η εγγραφή 1 και τα φύλλα οι εγγραφές 6, 7 και 8. Η διαδροµή των συνδέσεων που θέλει προσοχή είναι η (1,2), (2,5), (5,3), (3,4) και (4,8). 3) Επίσης είναι ιεραρχικό δέντρο, αφού κάθε εγγραφή έχει µόνο ένα γονέα. Η ρίζα είναι πάλι η εγγραφή 1 και τα φύλλα οι εγγραφές 5, 6, 7 και 8. 3.4 Οι σωστές προτάσεις είναι οι παρακάτω. Σε περίπτωση που αντιµετωπίσατε πρόβληµα αφιερώστε χρόνο για επανάληψη στην ενότητα 3.3.1. Οντότητα στο διάγραµµα σχέσεων – οντοτήτων είναι ένα στοιχείο του πραγµατικού περιβάλλοντος µε αυτόνοµη πραγµατική ή θεωρητική υπόσταση. Κατηγορήµατα για µία οντότητα του διαγράµµατος σχέσεων – οντοτήτων είναι στοιχεία που καθορίζουν χαρακτηριστικά της συγκεκριµένης οντότητας. Κλειδί για µία οντότητα του διαγράµµατος σχέσεων – οντοτήτων είναι το σύνολο των κατηγορηµάτων της οντότητας τα οποία είναι µοναδικά για κάθε εγγραφή και τη διακρίνουν πλήρως από τις άλλες. 3.5 Μπράβο σας, εάν απαντήσατε σε όλες τις προτάσεις σωστά. ∆εν ήταν εύκολη άσκηση. Σε αντίθετη περίπτωση διαβάστε ξανά την ενότητα 3.3 και ειδικότερα τις ενότητες 3.3.1 και 3.3.2 και επαναλάβατε την άσκηση. Οι σχέσεις δεν αναπαριστώνται στο φυσικό επίπεδο. Στο φυσικό επίπεδο, µε εγγραφές αντιστοιχούν µόνο οντότητες. (ΛΑΘΟΣ) Φυσικά και στο φυσικό επίπεδο αναπαριστώνται και οι σχέσεις. ∆ιαβάστε αναλυτικά την ενότητα 3.3 και ειδικά το 3.3.2 και θα βρείτε την εξήγηση µετά τον ορισµό των σχέσεων. Κάθε σχέση στην οποία µετέχουν δύο οντότητες θα έχει βαθµό 2. (ΣΩΣΤΟ) A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 181 Σύµφωνα µε τον ορισµό του βαθµού µίας σχέσης, αφού έχει δύο οντότητες έχει και βαθµό δύο. Κάθε σχέση ISA είναι και σχέση 1 προς 1. (ΣΩΣΤΟ) Ορίσαµε τη σχέση ISA ως µία εξειδίκευση της σχέσης 1 προς 1. Προσοχή όµως, το αντίστροφο φυσικά και δεν ισχύει. Μία σχέση είναι Ν προς Μ, εάν µία εγγραφή από µία οντότητα συµµετέχει δύο ή περισσότερες φορές στη σχέση. (ΛΑΘΟΣ) Θα µπορούσ να είναι 1 προς Ν. Αν λέγαµε «Μία σχέση είναι Ν προς Μ, εάν µία εγγραφή από κάθε οντότητα συµµετέχει δύο ή περισσότερες φορές», τότε θα ισχύει η πρόταση. Κάθε σχέση Ν προς Μ έχει βαθµό Ν. (ΛΑΘΟΣ) Μη συγχέετε το βαθµό µίας σχέσης µε την κατηγορία στην οποία αυτή ανήκει. Η σχέση Ν προς Ν που αναφέρουµε στην επεξήγηση της ενότητας 3.3.2 είναι σχέση µε βαθµό 2. 182 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 4.1 Ακολουθούν οι απαντήσεις για τα ερωτήµατα της άσκησης: 1. Για κάθε οντότητα έχουµε τα εξής: Οµάδα: Κατηγορία: Παίκτης: Μάνατζερ: 5 2 7 3 Αντίστοιχα για κάθε σχέση έχουµε ως arity το άθροισµα των κλειδιών κάθε οντότητας που συµµετέχει στη σχέση, συν τα επιπλέον κατηγορήµατα αυτής της σχέσης. Έτσι προκύπτουν τα εξής: Χρησιµοποιεί: Συµµετέχει: Παίζει: Συνεργάζεται: Αγώνας: 4 4 3 3 5 2. Οι πίνακες για τις οντότητες είναι οι ακόλουθοι (µε έντονα γράµµατα είναι τα πεδία που αποτελούν το κλειδί για κάθε πίνακα): ΟΜΑ∆Α Ονοµασία Έδρα Ιδιοκτήτης Χορηγός Έτος Ίδρυσης KΑΤΗΓΟΡΙΑ Ονοµασία Xρονιά ΠΑΙΚΤΗΣ Α. Μητρ. Όνοµα Επώνυµο Πατρ/µο Ύψος Ηµ. Γέν. Πόλης MΑΝΑΤΖΕΡ Όνοµα Επώνυµο Tηλέφωνο A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 183 3. Οι πίνακες για τις σχέσεις είναι: ΧΡΗΣΙΜΟΠΟΙΕΙ Όνοµα Μαν. Επώνυµο Μαν. Ονοµασία Οµ. Έδρα Οµ. ΣΥΜΜΕΤΕΧΕΙ Oνοµασία K. Xρονιά K. Ονοµασία Οµ. Έδρα Οµ. ΠΑΙΖΕΙ Α.Μ. Παικ. Ονοµασία Οµ. Έδρα Οµ. ΣΥΝΕΡΓΑΖΕΤΑΙ Όνοµα Μαν. Επώνυµο Μαν. Α.Μ. Παικ. AΓΩΝΑΣ Ονοµασία Ο 1 Ονοµασία Ο 1 Γήπεδο Ηµεροµηνία Σκορ Παρατηρήστε ότι στις σχέσεις αναφέρουµε, δίπλα στο όνοµα κάθε κλειδιού και το όνοµα της οντότητας στην οποία είναι κλειδί (τα αρχικά της οντότητας), ώστε να γίνεται η διάκριση ανάµεσα σε κατηγορήµατα µε ίδια ονοµασία. Μπράβο σας, εάν απαντήσατε σωστά σε όλα τα ερωτήµατα αυτής της άσκησης. Αυτό δείχνει ότι έχετε κατανοήσει τις έννοιες που µελετήσατε. Σε αντίθετη περίπτωση, αφιερώστε λίγο χρόνο για µία καλή επανάληψη σε όλες τις έννοιες που περιγράφονται στην ενότητα 4.1 και ίσως και στα διαγράµµατα σχέσεων – οντοτήτων που περιγράψαµε στην ενότητα 3.3 και 3.4. 4.2 Η ενηµέρωση δεν µπορεί να δηµιουργήσει προβλήµατα ακεραιότητας. Τα προβλήµατα δηµιουργούνται µόνο στην εισαγωγή ή στη διαγραφή. (ΛΑΘΟΣ) 184 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 Μπράβο σας, εάν απαντήσατε «λάθος». Είπαµε ότι η ενηµέρωση αντιτοιχεί σε διαγραφή και εισαγωγή όταν γίνονται αλλαγές σε κλειδιά, αλλά όχι ότι η ενηµέρωση δεν δηµιουργεί προβλήµατα. Κάθε εισαγωγή δεδοµένων παραβιάζει την ακεραιότητα της Βάσης ∆εδοµένων, όταν γίνεται εισαγωγή σε κλειδί. (ΛΑΘΟΣ) Μεγάλο λάθος! Κάθε εισαγωγή δεδοµένων θα έχει ως αποτέλεσµα να γίνει εισαγωγή σε κλειδί, αφού δεν µπορεί να υπάρξει πίνακας χωρίς κλειδί. Άρα αυτό που λέει η πρόταση είναι ότι κάθε εισαγωγή δεδοµένων παραβιάζει την ακεραιότητα, κάτι που φυσικά δεν µπορεί να ισχύει. Η επιλογή δεν επηρεάζει την ακεραιότητα. (ΣΩΣΤΟ) Μπράβο σας, εάν επιλέξατε «σωστό». Προκύπτει από τον ορισµό της επιλογής. Ξαναδιαβάστε τους ορισµούς εάν δεν απαντήσατε σωστά. Κλείδωµα δεδοµένων δεν χρειάζεται να γίνει κατά την επιλογή. (ΣΩΣΤΟ) Επιλογή σηµαίνει ανάγνωση δεδοµένων. Εφόσον τα δεδοµένα δεν αλλάζουν δεν χρειάζεται να κλειδωθούν. Το κλείδωµα γίνεται µόνο όταν υπάρχει αλλαγή στα δεδοµένα. Όταν δύο χρήστες κάνουν επιλογή των ίδιων δεδοµένων την ίδια χρονική στιγµή η Βάση ∆εδοµένων κλειδώνει τα δεδοµένα και επιτρέπει µόνο σε ένα χρήστη κάθε φορά να τα διαβάζει. (ΛΑΘΟΣ) Μπράβο σας, εάν επιλέξατε «λάθος». ∆ιαβάστε την απάντηση στην προηγούµενη ερώτηση. Είπαµε ότι κατά την επιλογή δεν χρειάζεται να γίνει κλείδωµα. 4.3 1. Ζητήσαµε τους παίκτες µε όνοµα «Νίκος» και ύψος µεγαλύτερο του 1,96. Άρα και ο παίκτης µε ύψος 1,96 δεν µετέχει στην απάντηση που είναι η εξής: Α. Μητρ. 23711 Όνοµα Νίκος Επώνυµο Ιωάννου Πατρ/µο Κώστας Ύψος 1,99 Ηµ. Γέν. 20/11/80 Πόλη Πάτρα 2. Ζητήσαµε τους Μάνατζερ µε µικρό όνοµα Νίκος. Όνοµα Νίκος Επώνυµο Βασιλείου Τηλέφωνο 061-555666 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 185 4.4 1. Ζητήσαµε αναδιάταξη του πίνακα παίκτης και επιλογή µόνο των στηλών «Όνοµα», «Επώνυµο», «Πόλη». H απάντηση είναι η εξής: Όνοµα Νίκος Μιχάλης Πέτρος Νίκος Νίκος Πέτρος 4.5 Επώνυµο Ιωάννου Ξανθός Ηλίου Μιχαήλ Ξανθός Πέτρου Λάρισα Αθήνα Πόλη Πάτρα Αθήνα Πάτρα 4.4 2. Ζητήσαµε επιλογή µόνο των επωνύµων των µάνατζερ, άρα: Επώνυµο Βασιλείου Χρήστου Ιωάννου Ηλίου Βασιλείου Μπράβο σας, εάν το υλοποιήσατε, γιατί είχε µία παγίδα. Πρώτα έπρεπε να γίνει η επιλογή και µετά η προβολή, γιατί αλλιώς δεν θα µπορούσατε να επιλέξετε την «Πόλη». Η σωστή λύση είναι π Επώνυµο, Ύψος (σ Πόλη=Πάτρα (Παίκτης)). 4.6 Μπράβο σας, εάν το υλοποιήσατε, γιατί ήταν δύσκολη άσκηση. 1. Είναι η ένωση δύο πινάκων, άρα έχουµε τα ακόλουθα αποτελέσµατα: Παίκτης Όνοµα Νίκος Μιχάλης Πέτρος Νίκος Νίκος Πέτρος Mάνατζερ Όνοµα Νίκος Κώστας Πέτρος Ηλίας Μιχάλης Παίκτης » Mάνατζερ Όνοµα Νίκος Μιχάλης Πέτρος Νίκος Νίκος Πέτρος Νίκος Κώστας Πέτρος Ηλίας Μιχάλης 186 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 2. Είναι η τοµή δύο πινάκων, άρα έχουµε τα εξής: Παίκτης Όνοµα Νίκος Μιχάλης Πέτρος Νίκος Νίκος Πέτρος Mάνατζερ Όνοµα Νίκος Κώστας Πέτρος Ηλίας Μιχάλης Παίκτης « Mάνατζερ Όνοµα Νίκος Μιχάλης Πέτρος 3. Είναι η διαφορά δύο πινάκων, άρα έχουµε τα εξής: Παίκτης Όνοµα Νίκος Μιχάλης Πέτρος Νίκος Νίκος Πέτρος Mάνατζερ Όνοµα Νίκος Κώστας Πέτρος Ηλίας Μιχάλης Παίκτης – Mάνατζερ Όνοµα 4.7 Μπράβο σας, εάν το υλοποιήσατε γιατί ήταν δύσκολη άσκηση. Ακολουθούν οι απαντήσεις. Απάντηση 1 A 1 B 3 Γ 6 ∆ 7 E 1 B 1 Απάντηση 2 Γ 7 ∆ 4 E 5 A 3 1 Απάντηση 3 B 1 6 Γ 7 6 ∆ 4 6 4.8 Μπράβο σας, εάν τα καταφέρατε σε αυτή την άσκηση. Ήταν πραγµατικά δύσκολη αφού δεν επεκταθήκαµε στο σχεσιακό υπολογισµό και δεν σας δώσαµε αρκετά παραδείγµατα. Εάν δεν τα καταφέρατε, µην απογοητεύεστε, αλλά αφιερώστε χρόνο για να διαβάσετε περισσότερα για το σχεσιακό υπολογισµό από τη βιβλιογραφία που αναγράφεται στο τέλος A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 4 & 5 187 του κεφαλαίου: 1) { x | A(x) Ÿ E} ∆ηλαδή οι εγγραφές x του συνόλου Α για τις οποίες ισχύει η σχέση Ε. 2) {x(2) | ($y) (A (y) Ÿ x [1] = y [Σ1] Ÿ x [2] = y [Σ2])} ∆ηλαδή οι εγγραφές x µε arity 2 για τις οποίες η πρώτη είναι ίδια µε τη στήλη Σ1 του πίνακα Α και η δεύτερη ίδια µε τη στήλη Σ2 του πίνακα Α. 3) {x | A(x) Ú B(x)} Προφανώς τα x που είναι ή στον πίνακα Α ή στον πίνακα Β ή και στους δύο πίνακες. 4) {x | A(x) Ÿ ÿ B(x)} Πάλι πολύ απλά τα x που είναι στον πίνακα Α και δεν είναι στον πίνακα Β. 5) {x(a+b) | ($ y(a)) ($z(b)) (A (y) Ÿ B (z) Ÿ x [1] = y [1] Ÿ … Ÿ x [a] = y [a] Ÿ x [a + 1] = z [1] Ÿ … Ÿ x [a + b] = z [b])} Ουσιαστικά ζητάµε τα x µε arity ίσο µε το arity του Α και του Β µε κοινά στοιχεία, όπως καθορίζονται οι σχέσεις. 5.1 Ακολουθεί η απάντηση στις παρακάτω συντοµογραφίες: 1) SQL 2) SEQUEL 3) QBE 5.2 Η ερώτηση σε SQL στην πιο απλή µορφή της είναι SELECT ONOMA FROM ª∞£∏ª∞ WHERE ∫ø¢π∫√™<1100; Φυσικά η ίδια ερώτηση µπορεί να γραφεί στην πιο αναλυτική µορφή της SELECT ª∞£∏ª∞.ONOMA FROM ª∞£∏ª∞ WHERE ª∞£∏ª∞.∫ø¢π∫√™<1100; Structured Query Language Structured English Query Language Query by Example 188 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏∏™ / KEº. 5 Όποιον τρόπο και να επιλέξατε είναι απόλυτα σωστός. Καλύτερα, όταν γράφετε ερωτήσεις σε SQL, να έχετε ένα ενιαίο τρόπο γραφής. Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης: ONOMA Φυσική Mαθηµατικά Μπράβο σας, εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.3 Η ερώτηση σε SQL είναι (δίνουµε τη λύση στην πιο απλή µορφή της, αλλά φυσικά και η πλήρης µορφή, όπως είδαµε στην προηγούµενη άσκηση, είναι επίσης σωστή) SELECT ONOMA, ∂¶ø¡Àª√ FROM ∫∞£∏°∏∆∏™ WHERE ∏ª_°∂¡>1/1/1960; Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ONOMA Κωνσταντίνος Μιχαήλ Χρήστος EΠΩNYMO Μακρύς Ξανθός Χρήστου Μπράβο σας, εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.4 Η ερώτηση σε SQL είναι SELECT ª∞£∏ª∞.ONOMA, ∆ª∏ª∞.√¡√ª∞ FROM ª∞£∏ª∞, ∆ª∏ª∞ WHERE (ª∞£∏ª∞.∂∆√™_¢π¢∞™∫= ‘∞’) AND (∆ª∏ª∞.∂∆√™_π¢ƒÀ™∏™<1980); Προσοχή ότι εδώ δεν θα µπορούσε να υπάρχει απλή µορφή, αφού πρέπει να ξεχωρίζει για ποιο όνοµα µιλάµε (το όνοµα του τµήµατος ή το όνοµα του µαθήµατος). Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 189 ONOMA MAΘ Φυσική Μαθηµατικά Φυσική Μαθηµατικά ONOMA TMH Μαθηµατικό Μαθηµατικό Φυσικό Φυσικό Μπράβο σας, εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.5 1. Η ερώτηση σε SQL είναι SELECT ª∞£∏ª∞.ONOMA FROM ª∞£∏ª∞ WHERE ª∞£∏ª∞.∫ø¢π∫√™<1100 ORDER BY ª∞£∏ª∞.√¡√ª∞; Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ONOMA MAΘ Μαθηµατικά Φυσική Μπράβο σας, εάν απαντήσατε σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στο επόµενο τµήµα της άσκησης. 2. Η ερώτηση σε SQL είναι SELECT ONOMA, ∂¶ø¡Àª√ FROM ∫∞£∏°∏∆∏™ WHERE ∏ª_°∂¡>1/1/1960 ORDER BY ∂¶ø¡Àª√ DESC, √¡√ª∞ DESC; Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ONOMA Χρήστος Μιχαήλ Κωνσταντίνος EΠΩNYMO Χρήστου Ξανθός Μακρύς 190 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 Μπράβο σας, εάν απαντήσατε σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στο επόµενο τµήµα της άσκησης. 3. Η ερώτηση σε SQL είναι SELECT FROM WHERE ORDER BY ª∞£∏ª∞.ONOMA, ∆ª∏ª∞.√¡√ª∞ ª∞£∏ª∞, ∆ª∏ª∞ (ª∞£∏ª∞.∂∆√™_¢π¢∞™∫= ‘∞’) AND (∆ª∏ª∞.∂∆√™_π¢ƒÀ™∏™<1980) ª∞£∏ª∞.√¡√ª∞ DESC, ∆ª∏ª∞.√¡√ª∞ ASC; Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ONOMA MAΘ Φυσική Φυσική Μαθηµατικά Μαθηµατικά ONOMA TMH Μαθηµατικό Φυσικό Μαθηµατικό Φυσικό Μπράβο σας, εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.6 Η ερώτηση σε SQL είναι SELECT FROM WHERE ONOMA, ∂¶ø¡Àª√ ∫∞£∏°∏∆∏™ √¡√ª∞ LIKE ‘Mȯ%’; Προσοχή, στα δεδοµένα που έχουµε εισάγει έχουµε δώσει δύο καθηγητές µε όνοµα ‘Μιχάλης’, µόνο που τον ένα τον εισάγαµε ως ‘Μιχάλης’ και τον άλλον ως ‘Μιχαήλ’. Με την εντολή αυτή θα βρούµε και τους δύο, ενώ αν ζητάγαµε ONOMA= ‘Μιχάλης’ θα βρίσκαµε µόνο τον ένα. Ακολουθεί ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ONOMA Μιχαήλ Μιχάλης EΠΩNYMO Βαρδής Ξανθός Μπράβο σας, εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 191 5.7 Η ερώτηση σε SQL είναι: SELECT FROM WHERE ONOMA ∆ª∏ª∞ ∂∆√™_π¢ƒÀ™∏™ IS NULL; Επειδή έχουµε εισάγει το έτος ίδρυσης σε κάθε τµήµα, ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης δεν θα έχει καθόλου στοιχεία. Μπράβο σας, εάν απαντήσατε σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.8 Η ερώτηση σε SQL είναι SELECT FROM ORDER BY DISTINCT ∂¶ø¡Àª√ º√π∆∏∆∏™ ∂¶ø¡Àª√ DESC; Ακολουθεί ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης. Προσέξτε ότι τα διπλά επώνυµα «Βασιλείου» και «Χρήστου» εµφανίζονται µόνο µία φορά. EΠΩNYMO Xρήστου Xατζή Bασιλείου Bαρδής Μπράβο σας, εάν απαντήσατε σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.9 Θα δώσουµε πρώτα την ερώτηση σε SQL µε τη χρήση του «ΙΝ» SELECT FROM WHERE º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√ º√π∆∏∆∏™ º√π∆∏∆∏™.∏ª_°∂¡ π¡ (SELECT ∏ª_°∂¡ FROM ∫∞£∏°∏∆∏™); 192 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 Αντίστοιχα, η ερώτηση σε SQL µε τη χρήση του «ANY» είναι SELECT FROM WHERE º√π∆∏∆∏™.√¡√ª∞, º√π∆∏∆∏™.∂¶ø¡Àª√ º√π∆∏∆∏™ º√π∆∏∆∏™.∏ª_°∂¡ = ANY (SELECT ∏ª_°∂¡ FROM ∫∞£∏°∏∆∏™); Ακολουθεί ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης. Προσέξτε ότι είναι κενός, αφού δεν έχουµε εισάγει κάποιους φοιτητές που να έχουν την ίδια ηλικία µε καθηγητές. Πάντως, θα µπορούσατε να αλλάξετε προσωρινά τα δεδοµένα της Βάσης ∆εδοµένων που βασίζεται στο παράδειγµα 5.1 και 5.2, ώστε να υπάρχουν και φοιτητές που να ικανοποιούν αυτή τη συνθήκη και η ερώτηση να έχει νόηµα. ONOMA EΠΩNYMO Μπράβο σας, εάν απαντήσατε σωστά και για τις δύο περιπτώσεις. ∆εν ήταν εύκολη άσκηση. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.10 Η ερώτηση σε SQL είναι SELECT FROM WHERE º√π∆∏∆∏™.ONOMA, º√π∆∏∆∏™.∂¶ø¡Àª√ º√π∆∏∆∏™ º√π∆∏∆∏™.∏ª_°∂¡ <= ALL (SELECT º√π∆∏∆∏™.∏ª_°∂¡ FROM º√π∆∏∆∏™); Προσοχή, χρησιµοποιούµε τον τελεστή «<= ALL» και όχι τον τελεστή «< ALL» γιατί στην εσωτερική ερώτηση θα έχουµε όλους τους φοιτητές, άρα καθένας θα συγκριθεί µε τον εαυτό του και για αυτό χρειαζόµαστε και την ισότητα. Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης: ONOMA Χρήστος EΠΩNYMO Χρήστου Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση γιατί ήταν µία πραγµατικά δύσκολη άσκηση. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 193 στο να πειραµατιστείτε µε τα επίπεδα ερωτήσεων και τις εντολές «ANY» «ALL» και «ΙΝ». Επίσης, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 5.11 Η ερώτηση σε SQL είναι SELECT º√π∆∏∆∏™.∂¶ø¡Àª√, º√π∆∏∆∏™.√¡√ª∞ º√π∆∏∆∏™.¶∞∆ƒø¡Àª√, ª∞£∏ª∞.√¡√ª∞ FROM (º√π∆∏∆∏™ INNER JOIN º√π∆_ª∞£ √¡ º√π∆∏∆∏™.∞ª=º√π∆_ª∞£.∞ª) INNER JOIN ª∞£∏ª∞ ON º√π∆_ª∞£.∫ø¢π∫√™=ª∞£∏ª∞.∫ø¢π∫√™ ORDER BY º√π∆∏∆∏™.∂¶ø¡Àª√, º√π∆∏∆∏™.√¡√ª∞; Στην προηγούµενη ερώτηση βάλαµε και διάταξη κατά επώνυµο και όνοµα φοιτητή για να είναι πιο εύκολη η παρουσίαση των αποτελεσµάτων, παρόλο που δεν ήταν ζητούµενο. (∆ηλαδή η τελευταία γραµµή, της ερώτησης σε SQL θα µπορούσε και να παραλείπεται. Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ΕΠΩΝΥΜΟ Βαρδής Βασιλείου Βασιλείου Βασλείου Χατζή Χατζή Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου ΟΝΟΜΑ Νικόλαος Ελένη Ελένη Νικόλαος Μαρίνα Μαρίνα Χρήστος Χρήστος Χρήστος Χρήστος Χρήστος Χρήστος ΠΑΤΡΩΝΥΜΟ Μιχαήλ Σωτήριος Σωτήριος Σωτήριος Αθανάσιος Αθανάσιος Βασίλειος Βασίλειος Βασίλειος Νικόλαος Νικόλαος Νικόλαος ΟΝΟΜΑ ΜΑΘΗΜΑΤΟΣ Φυσική Γραµµική Άλγεβρα Μαθηµατικά Μαθηµατικά Βάσεις ∆εδοµένων Φυσική Marketing ∆οµές ∆εδοµένων ΙΙ Λογικός Σχεδιασµός ∆οµές ∆εδοµένων Ι Λογικός Σχεδιασµός Ποιότητα Λογισµικού Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση. γιατί ήταν µία πραγµατικά δύσκολη άσκηση. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τη σύνδεση των πινάκων. 194 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 5.12 Η ερώτηση σε SQL είναι SELECT º√π∆∏∆∏™.∂¶ø¡Àª√, º√π∆∏∆∏™.AM, ª∞£∏ª∞.∫ø¢π∫√™, ∫∞£∏°∏∆∏™.ONOMA, ∫∞£∏°∏∆∏™.∂¶ø¡Àª√ (∫∞£_ª∞£ INNER JOIN ((º√π∆∏∆∏™ INNER JOIN º√π∆_ª∞£ ON º√π∆∏∆∏™.AM=º√π∆_ª∞£.AM) INNER JOIN ª∞£∏ª∞ ON º√π∆_ª∞£.∫ø¢π∫√™=ª∞£∏ª∞.∫ø¢π∫√™) ON ∫∞£_ª∞£.∫ø¢π∫√™=ª∞£∏ª∞.∫ø¢π∫√™) INNER JOIN ∫∞£∏°∏∆∏™ ON (∫∞£_ª∞£.∂¶ø¡Àª√=∫∞£∏°∏∆∏™.∂¶ø¡Àª√) AND (∫∞£_ª∞£.ONOMA=∫∞£∏°∏∆∏™.ONOMA); FROM Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ΕΠΩΝΥΜΟ Φ Βασιλείου Βασιλείου Βασιλείου Βαρδής Χατζή Χατζή Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου ΑΜ ΦΟΙΤ 19071 19071 19072 19109 19409 19409 19345 19345 19345 19344 19344 19344 ΚΩ∆ΙΚΟΣ Μ 1089 1239 1089 1045 1045 1667 1134 1891 1992 1134 1998 1892 ΟΝΟΜΑ Κ Ειρήνη Ειρήνη Ειρήνη Μιχαήλ Μιχαήλ Μιχαήλ Χρήστος Κωνσταντίνος Χρήστος Χρήστος Κωνσταντίνος Κωνσταντίνος ΕΠΩΝΥΜΟ Κ Νικολαΐδη Νικολαΐδη Νικολαΐδη Βαρδής Βαρδής Ξανθός Χρήστου Μακρύς Χρήστου Χρήστου Μακρύς Μακρύς Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση, γιατί ήταν η πιο δύσκολη άσκηση που έχετε καταπιαστεί σε αυτό το κεφάλαιο. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τη σύνδεση των πινάκων. A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 195 5.13 Η ερώτηση σε SQL είναι: SELECT FROM GROUP BY HAVING º√π∆_∆ª∏ª∞.ONOMA, COUNT (*) º√π∆_∆ª∏ª∞ º√π∆_∆ª∏ª∞.ONOMA COUNT (*) <=1; Με δεδοµένο ότι σε κάθε τµήµα έχουµε εισάγει από δύο φοιτητές ο πίνακας που θα προκύψει θα είναι κενός. Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση, γιατί ήταν αρκετά δύσκοη άσκηση. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τη σύνδεση των πινάκων. 5.14 Η ερώτηση σε SQL είναι: SELECT FROM GROUP BY HAVING ∫∞£_ª∞£.ONOMA, ∫∞£_ª∞£.∂¶ø¡Àª√, COUNT (*) ∫∞£_ª∞£ ∫∞£_ª∞£.∂¶ø¡Àª√, ∫∞£_ª∞£.ONOMA COUNT(*)>2; Προσέξτε ότι στο GROUP BY χρησιµοποιούµε τόσο το όνοµα και το επώνυµο αφού κλειδί στους καθηγητές είναι και τα δύο. Ο πίνακας που θα προκύψει ακολουθεί ONOMA Κωνσταντίνος EΠΩNYMO Μακρύς 3 Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση, γιατί ήταν αρκετά δύσκολη. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τη σύνδεση των πινάκων. 5.15 Η εντολή διαγραφής στη γλώσσα SQL είναι DELETE FROM º√π∆∏∆∏™ WHERE ∏ª_°∂¡ = 20–08–1978; Ο πίνακας που θα προκύψει θα έχει δύο φοιτητές λιγότερους, οι οποίοι και διαγράφηκαν ως αποτέλεσµα της εντολής και ακολουθεί 196 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 5 & 6 ΦOITHTHΣ ΟΝΟΜΑ Ελένη Νικόλαος Χρήστος Μαρίνα ΕΠΩΝΥΜΟ Βασιλείου Βαρδής Χρήστου Χατζή ΠΑΤΡΩΝΥΜΟ Σωτήριος Μιχαήλ Βασίλειος Αθανάσιος ΑΜ 19071 19109 19344 19409 ΗΜ_ΓΕΝ 22-03-1980 03-01-1977 19-07-1976 10-10-1977 Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τις εντολές «INSERT», «DELETE» και «UPDATE». 6.1 Ο πίνακας ερώτησης είναι ο εξής: KAΘHΓHTHΣ ΟΝΟΜΑ Ρ. ΕΠΩΝΥΜΟ Ρ. ΠΑΤΡΩΝΥΜΟ ΒΑΘΜΙ∆Α ΗΜ_ΓΕΝ Στο συγκεκριµένο παράδειγµα επιλέξαµε να χρησιµοποιήσουµε το συµβολισµό «Ρ.». Φυσικά και οι συµβολισµοί «Ρ._Κάτι» ή «_Κάτι» είναι απόλυτα σωστοί. Ο πίνακας αποτελεσµάτων ακολουθεί KAΘHΓHTHΣ ΟΝΟΜΑ Ειρήνη ΕΠΩΝΥΜΟ Νικολαΐδη Κωνσταντίνος Μακρύς Μιχαήλ Μιχάλης Χρήστος Βαρδής Ξανθός Χρήστου Μπράβο σας, εάν καταφέρατε και υλοποιήσατε αυτή την άσκηση. Σε περίπτωση που δεν τα καταφέρατε, ξαναδιαβάστε την ενότητα και καλύτερα, πριν την επαναλάβετε, πειραµατιστείτε σύµφωνα µε τις οδηγίες της δραστηριότητας 1 του κεφαλαίου αυτού. A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 197 6.2 Η ερώτηση σε QBE είναι η εξής: ΦOITHTHΣ ΟΝΟΜΑ P. ΕΠΩΝΥΜΟ P. ΠΑΤΡΩΝΥΜΟ ΑΜ ΗΜ_ΓΕΝ > 1–1–1960 Ακολουθεί και ο πίνακας αποτελεσµάτων: ΟΝΟΜΑ Κωνσταντίνος Μιχαήλ Χρήστος ΕΠΩΝΥΜΟ Μακρύς Βαρδής Χρήστου Μπράβο σας, εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 6.3 Η ερώτηση σε QBE είναι: KAΘHΓHTHΣ ΟΝΟΜΑ P. LIKE ‘Μιχ%’ Θυµηθείτε ότι, όπως είπαµε και σε αντίστοιχη άσκηση στην SQL, στα δεδοµένα που έχουµε εισάγει έχουµε δώσει δύο καθηγητές µε όνοµα ‘Μιχάλης’, µόνο που τον ένα τον εισάγαµε ως ‘Μιχάλης’ και τον άλλον ως ‘Μιχαήλ’. Με την εντολή αυτή θα βρούµε και τους δύο, ενώ αν βάζαµε κάτω από το όνοµα ‘Μιχάλης’ θα βρίσκαµε µόνο τον ένα. Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης ΟΝΟΜΑ Μιχαήλ Μιχάλης ΕΠΩΝΥΜΟ Βαρδής Ξανθός ΕΠΩΝΥΜΟ P. ΠΑΤΡΩΝΥΜΟ BAΘMI∆A ΗΜ_ΓΕΝ Μπράβο σας εάν απαντήσατε σε όλα σωστά. Σε αντίθετη περίπτωση, ξαναδιαβάστε τα παραδείγµατα και πειραµατιστείτε πριν προχωρήσετε στις επόµενες ασκήσεις. 198 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 6.4 Η ερώτηση σε QBE θα αποτελείται από πολλούς πίνακες, αφού είναι ερώτηση σύνδεσης και από έναν πίνακα για τον καθορισµό του αποτελέσµατος. Οι πίνακες είναι οι εξής: ΦOITHTHΣ ΟΝΟΜΑ _ΟΝ ΦOIT_MAΘ AM _ΑΜ AΠANTHΣH ΕΠΩΝΥΜΟ Ρ._ΟΝ ΟΝΟΜΑ Ρ._ΕΠ ΠΑΤΡΩΝΥΜΟ Ρ._ΠΑ ONOMA MAΘHMATOΣ Ρ._ΟΝΜΑΘ KΩ∆IKOΣ _KΩ∆ ΕΠΩΝΥΜΟ _ΕΠ ΠΑΤΡΩΝΥΜΟ _ΠΑ MAΘHMA KΩ∆IKOΣ _KΩ∆ ΟΝΟΜΑ _ONMAΘ ETOΣ_∆I∆AΣK AM _ΑΜ ΗΜ_ΓΕΝ Στους παραπάνω πίνακες χρησιµοποιήσαµε τις µεταβλητές «_ΑΜ» και «_ΚΩ∆» για να κάνουµε τη σύνδεση ανάµεσα στους πίνακες. Ακολουθεί και ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης AΠANTHΣH ΕΠΩΝΥΜΟ Βαρδής Βασιλείου Βασιλείου Βασιλείου Χατζή Χατζή Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου ΟΝΟΜΑ Νικόλαος Ελένη Ελένη Νικόλαος Μαρίνα Μαρίνα Χρήστος Χρήστος Χρήστος Χρήστος Χρήστος Χρήστος ΠΑΤΡΩΝΥΜΟ Μιχαήλ Σωτήριος Σωτήριος Σωτήριος Αθανάσιος Αθανάσιος Βασίλειος Βασίλειος Βασίλειος Νικόλαος Νικόλαος Νικόλαος ONOMA MAΘHMATOΣ Φυσική Γραµµική Άλγεβρα Μαθηµατικά Μαθηµατικά Βάσεις ∆εδοµένων Φυσική Marketing ∆οµές ∆εδοµένων ΙΙ Λογικός Σχεδιασµός ∆οµές ∆εδοµένων Ι Λογικός Σχεδιασµός Ποιότητα Λογισµικού A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 199 Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση, γιατί ήταν µία πραγµατικά δύσκολη άσκηση. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τη σύνδεση των πινάκων στη γλώσσα ερωτήσεων QBE. 6.5 Η ερώτηση σε QBE θα αποτελείται από τους παρακάτω πίνακες: ΦOITHTHΣ ΟΝΟΜΑ _ΟΝΦ ΦΟΙΤ_ΜΑΘ ΑΜ _KΩ∆ MAΘHMA KΩ∆IKOΣ _KΩ∆ KAΘ_ΜΑΘ ΟΝΟΜ _ONK KAΘHΓHTHΣ ΟΝΟΜΑ _ΟΝK AΠANTHΣH ΕΠΩΝΥΜΟ Ρ._ΟΝΦ AM ΦOIT Ρ._ΑΜ KΩ∆IKOΣ M Ρ._ΚΩ∆ ONOMA K Ρ._ΟΝΚ EΠΩNYMO K Ρ._ΕΠΚ ΕΠΩΝΥΜΟ _EΠK ΠΑΤΡΩΝΥΜΟ BAΘMI∆A ΗΜ_ΓΕΝ EΠΩNYMO _EΠK KΩ∆IKOΣ _KΩ∆ ΟΝΟΜΑ ETOΣ_∆I∆AΣK ΚΩ∆ΙΚΟΣ _ΑΜ ΕΠΩΝΥΜΟ ΠΑΤΡΩΝΥΜΟ ΑΜ _ΑΜ ΗΜ_ΓΕΝ Στους παραπάνω πίνακες χρησιµοποιήσαµε τις µεταβλητές «_ΑΜ», «_ΚΩ∆», «_ΟΝΚ» και «_ΕΠΚ» για να κάνουµε τη σύνδεση ανάµεσα στους πίνακες. Ακολουθεί ο πίνακας που θα προκύψει ως αποτέλεσµα της απάντησης 200 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 AΠANTHΣH ΕΠΩΝΥΜΟ Βασιλείου Βασιλείου Βασιλείου Βαρδής Χατζή Χατζή Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου Χρήστου AM ΦOIT 19071 19071 19072 19109 19409 19409 19345 19345 19345 19344 19344 19344 KΩ∆IKOΣ M 1089 1239 1089 1045 1045 1667 1134 1891 1992 1134 1998 1892 ONOMA K Ειρήνη Ειρήνη Ειρήνη Μιχαήλ Μιχαήλ Μιχαήλ Χρήστος Κωνσταντίνος Χρήστος Χρήστος Κωνσταντίνος Κωνσταντίνος EΠΩNYMO K Νικολαΐδη Νικολαΐδη Νικολαΐδη Βαρδής Βαρδής Ξανθός Χρήστου Μακρύς Χρήστου Χρήστου Μακρύς Μακρύς Μπράβο σας, εάν απαντήσατε σωστά σε αυτή την άσκηση, γιατί ήταν η πιο δύσκολη άσκηση που έχετε καταπιαστεί σε αυτό το κεφάλαιο. Σε αντίθετη περίπτωση, µην απογοητεύεστε, αλλά αφιερώστε λίγο χρόνο στο να πειραµατιστείτε µε τη σύνδεση των πινάκων στη γλώσσα ερωτήσεων QBE. 6.6 Οι πίνακες που αποτελούν τη Βάση ∆εδοµένων σε γραφική µορφή είναι όπως περίπου φαίνεται παρακάτω ΦOITHTHΣ ONOMA EΠΩNYMO ΠATPΩNYMO AM HM_ΓEN ΦOIT_TMHMA AM KΩ∆IKOΣ MAΘHMA KΩ∆IKOΣ ONOMA ETOΣ_∆I∆AΣK Οι συνδέσεις έχουν γίνει στα κλειδιά κάθε πίνακα και συγκεκριµένα στα «ΑΜ» και «ΚΩ∆ΙΚΟΣ». Ο πίνακας αποτελέσµατος είναι της µορφής που φαίνεται στο επόµενο παράδειγµα. A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 201 Field: Table: Sort: Show: Criteria: Or: ΕΠΩΝΥΜΟ ΦΟΙΤΗΤΗΣ Ascending ✔ ΟΝΟΜΑ ΦΟΙΤΗΤΗΣ Ascending ✔ ΠATPΩNYMO ΦΟΙΤΗΤΗΣ ✔ ΟΝΟΜΑ MAΘHMA ✔ Σε αυτόν τον πίνακα ο χρήστης έχει σύρει τα πεδία «ΟΝΟΜΑ», «ΕΠΩΝΥΜΟ» και «ΠΑΤΡΩΝΥΜΟ» από τον πίνακα «ΦΟΙΤΗΤΗΣ» και «ΟΝΟΜΑ» από τον πίνακα «ΜΑΘΗΜΑ». Επίσης, έχει επιλέξει να είναι όλα εµφανίσιµα στο αποτέλεσµα και να υπάρχει διάταξη πρώτα µε το επώνυµο και µετά µε το όνοµα. Μπράβο σας, εάν τα καταφέρατε µε αυτή την άσκηση. ∆οκιµάστε να την υλοποιήσετε και στην πράξη σε κάποιο σύστηµα. 6.7 Οι πίνακες που αποτελούν τη Βάση ∆εδοµένων σε γραφική µορφή είναι όπως περίπου φαίνεται παρακάτω ΦOITHTHΣ ONOMA EΠΩNYMO ΠATPΩNYMO AM HM_ΓEN ΦOIT_TMHMA AM KΩ∆IKOΣ MAΘHMA KΩ∆IKOΣ ONOMA ETOΣ_∆I∆AΣK KAΘ_MAΘ KΩ∆IKOΣ ONOMA EΠΩNYMO KAΘHΓHTHΣ ONOMA EΠΩNYMO ΠATPΩNYMO BAΘMI∆A HM_ΓEN Οι συνδέσεις έχουν γίνει στα κλειδιά κάθε πίνακα και συγκεκριµένα στα «ΑΜ» που συνδέει τους πίνακες «ΦΟΙΤΗΤΗΣ» και «ΦΟΙΤ_ΜΑΘ», στο πεδίο «ΚΩ∆ΙΚΟΣ» που συνδέ- 202 A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 ει τόσο τον πίνακα «ΦΟΙΤ_ΜΑΘ» µε τον πίνακα «ΜΑΘΗΜΑ», όσο και τον πίνακα «ΜΑΘΗΜΑ» µε τον πίνακα «ΚΑΘ_ΜΑΘ» και στο κλειδί «ΟΝΟΜΑ – ΕΠΩΝΥΜΟ», που συνδέει τους πίνακες «ΚΑΘ_ΜΑΘ» και «ΚΑΘΗΓΗΤΗΣ». Ο πίνακας αποτελέσµατος είναι της µορφής που φαίνεται στο παρακάτω παράδειγµα Field: Table: Sort: Show: Criteria: Or: Σε αυτόν τον πίνακα ο χρήστης έχει σύρει τα πεδία «ΕΠΩΝΥΜΟ» και «ΑΜ» από τον πίνακα «ΦΟΙΤΗΤΗΣ», τα πεδία «ΟΝΟΜΑ» και «ΚΩ∆ΙΚΟΣ» από τον πίνακα «ΜΑΘΗΜΑ» και τα πεδία «ΟΝΟΜΑ» και «ΕΠΩΝΥΜΟ» από τον πίνακα «ΚΑΘΗΓΗΤΗΣ». Επίσης, έχει επιλέξει να είναι όλα εµφανίσιµα στο αποτέλεσµα και έχει δώσει ως κριτήριο «<19400» στο πεδίο «ΑΜ». Τέλος, δεν έχει καθορίσει αν θα υπάρχει διάταξη των αποτελεσµάτων. Ο πίνακας µε τα αποτελέσµατα ακολουθεί ΕΠΩΝΥΜΟ ΦOITHTH Βασιλείου Βασιλείου Βασιλείου Βαρδής Χρήστου Χρήστου Χρήστου Χρήστου AM ΦOITHTH 19071 19071 19072 19109 19345 19345 19345 19344 KΩ∆IKOΣ MAΘHMATOΣ 1089 1239 1089 1045 1134 1891 1992 1134 ONOMA MAΘHMAT. Μαθηµατικά Γραµµική Άλγεβρα Μαθηµατικά Φυσική Λογικός Σχεδιασµός ∆οµές ∆εδοµένων Ι Ποιότητα Λογισµικού Λογικός Σχεδιασµός Χρήστος Κωνσταντίνος Χρήστος Χρήστος Χρήστου Μακρύς Χρήστου Χρήστου ONOMA KAΘHΓHTH Ειρήνη Ειρήνη Ειρήνη EΠΩNYMO KAΘHΓHTH Νικολαΐδη Νικολαΐδη Νικολαΐδη ✔ ✔ < 19400 ✔ ✔ ✔ ✔ ΕΠΩΝΥΜΟ ΦΟΙΤΗΤΗΣ AM ΦΟΙΤΗΤΗΣ KΩ∆IKOΣ MAΘHMA ΟΝΟΜΑ ΟΝΟΜΑ EΠΩNYMO KAΘHΓ. MAΘHMA KAΘHΓ. A¶∞¡∆∏™∂π™ ∞™∫∏™∂ø¡ ∞À∆√∞•π√§√°∏™∏™ / KEº. 6 203 Χρήστου Χρήστου 19344 19344 1998 1892 Marketing ∆οµές ∆εδοµένων ΙΙ Κωνσταντίνος Κωνσταντίνος Μακρύς Μακρύς Μπράβο σας, εάν τα καταφέρατε µε αυτή την άσκηση, γιατί ήταν αρκετά δύσκολη, αφού απαιτούσε να χρησιµοποιήσετε πέντε διαφορετικούς πίνακες. ∆οκιµάστε να την υλοποιήσετε και στην πράξη σε κάποιο σύστηµα. O‰ËÁ›Â˜ Î·È Î·Ù¢ı‡ÓÛÂȘ ÁÈ· ÙȘ ‰Ú·ÛÙËÚÈfiÙËÙ˜ 1.1 Περιγράψτε παραδείγµατα του πραγµατικού κόσµου τα οποία γνωρίζετε αρκετά καλά. Για παράδειγµα εάν έχετε εργαστεί σε κάποιο κατάστηµα σκεφτείτε εάν θα είχε εφαρµογή µία Βάση ∆εδοµένων για αυτό το κατάστηµα και το σκοπό και τη µορφή των δεδοµένων που θα εισαχθούν σε αυτή τη Βάση ∆εδοµένων. Σκεφτείτε το Ελληνικό Ανοικτό Πανεπστήµιο στο οποίο σπουδάζετε και πως µια Βάση ∆εδοµένων θα µπορούσε να µοντελοποιήσει τα δεδοµένα του. 1.2 Θυµηθείτε ότι όλοι οι χρήστες δεν θα πρέπει να έχουν πρόσβαση σε όλα τα δεδοµένα. Για παράδειγµα δύο επίπεδα χρηστών θα ήταν «Υπεύθυνος Λειτουργίας της Βάση ∆εδοµένων» µε δικαίωµα να εισάγει στη Βάση ∆εδοµένων τις µετεωρολογικές πληροφορίες και «Απλός Χρήστης» ο οποίος µόνο διαβάζει τις πληροφορίες. Απλοί χρήστες θα µπορούσαν να είναι τηλεοπτικοί και ραδιοφωνικοί σταθµοί, εφηµερίδες κτλ. Εάν δεν τα καταφέρατε να εντοπίσετε τη διαφορά ανάµεσα σε απλούς χρήστες και χρήστες που έχουν την ευθύνη διαχείρισης των δεδοµένων µην απογοητεύεστε, αλλά επαναλάβατε τη µελέτη της ενότητας 1.2. 1.3 Σκεφτείτε ένα λογοτεχνικό βιβλίο. Η µεταφορά του υλικού του σε µία Βάση ∆εδοµένων και η οργάνωσή τους δεν θα είχε νόηµα, αφού η πληροφορία είναι στατική και προορίζεται για σειριακή ανάγνωση. Ισχύει όµως το ίδιο για µία εγκυκλοπαίδεια; (Προφανώς όχι και µπράβο σας εάν τη συµπεριλάβατε στις επιλογές σας.) 1.4 Ανατρέξτε στις οδηγίες για τη δραστηριότητα 1.1 και δείτε τι προτείναµε για τους χρήστες της Βάσης ∆εδοµένων. Τώρα µε βάσει την εµπειρία που έχετε αποκτήσει καθορίστε τα όρια των δυνατοτήτων που πρέπει να επιτρέπει η Βάση ∆εδοµένων σε καθέναν από αυτούς. Για παράδειγµα ο απλός χρήστης (από ένα τηλεοπτικό σταθµό) θα πρέπει να µπορεί να διαβάζει τα δεδοµένα, αλλά δεν θα πρέπει να έχει καµία δυνατότητα µεταβολής των. 1.5 Σε αυτή τη δραστηριότητα σας ζητάµε να «παίξετε το ρόλο» του αναλυτή, δηλαδή του επιστήµονα που συζητά µε κάποιον πελάτη, εντοπίζει τις ανάγκες του και προτείνει τεχνολογικές λύσεις που να τον εξυπηρετούν (όταν αυτό είναι εφικτό). Με την εµπειρία που έχετε 206 O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 1 & 2 θα πρέπει να εντοπίσετε τα δεδοµένα που χρησιµοποιούνται, τις πιθανές ερωτήσεις και το κυριότερο να αναγνωρίσετε εάν η λύση είναι συµφέρουσα (δηλαδή θα διευκολύνει την επιχείρηση στο έργο της) ή όχι. Εάν αξιοποιήσατε την εµπειρία σας από τις δραστηριότητες 1.1 και 1.3 είµαστε βέβαιοι πως δεν θα αντιµετωπίσατε προβλήµατα. Σε αντίθετη περίπτωση µελετήστε πάλι όλο το κεφάλαιο (είναι µια καλή ευκαιρία για µια γενική επανάληψη) και επαναλάβατε τις δραστηριότητες 1.1, 1.3 και 1.5. 2.1 Το ζητούµενο από αυτή τη δραστηριότητα ήταν να σχεδιαστούν τα σχήµατα 2.2 και 2.3 του κεφαλαίου 2 για τις τρεις εντολές που επιλέξατε. Έτσι σε κάθε περίπτωση και χρησιµοποιώντας το σχήµα 2.2 η εντολή του χρήστη θα εµφανισθεί στο εξωτερικό επίπεδο και τα δεδοµένα που θα αντληθούν από τους δίσκους στο φυσικό επίπεδο. Το επίπεδο αντίληψης θα το αντλήσετε από το σχήµα 2.3 και θα ενσωµατωθεί στο σχέδιο σας. 2.2 Χρησιµοποιώντας την εµπειρία σας από την άσκηση 3 δεν θα έπρεπε να αντιµετωπίσατε κανένα πρόβληµα. Ενδεικτικά σας δίνουµε 10 εγγραφές: (101, 17/3/1998, 23), (105, ∆ευτέρα, 67), (882, 11/8/97, 23), (171, ΑΒΓ, 3), (999, Τρίτη, 88), (192, 23/12/1997, 11), (185, Μάρτιος, 7), (22, 11/1/1994, 3), (1271, ∆ευτέρα, 7), (8939, 18/1/91, 8). 2.3 Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Το βασικό ήταν να εντοπίσετε τα δοµικά στοιχεία του αρχείου, δηλαδή τα blocks και τις εγγραφές. Κάθε block έχει 200 bytes, από τα οποία τα 20 είναι δεσµευµένα, και κάθε εγγραφή 25 Bytes. Άρα σε κάθε block χωρούν 7 εγγραφές και µένουν και αδιάθετα 5 Bytes. Ακολουθεί ένα σχήµα µε τις 10 παραπάνω εγγραφές. Τα blocks χωρίζονται µε bold γραµµές και κάθε κουτάκι αντιστοιχεί σε 1 Byte, ενώ τα γκρίζα κουτάκια είναι κενά. O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 2 207 20 Bytes δεσµευµένα για το block Kωδικός 101 1 7 / 3 / 23 Kωδικός 105 7 BΓ Kωδικός 999 T 88 ρ ί τ η Kωδικός 192 1 ∆ 67 9 9 8 ε υ τ έ Kωδικός 882 ρ 1 23 α 1 / 8 Kωδικός 171 / 9 A 3 2 11 3 / 1 2 Kωδικός 185 / M 7 1 ά 9 ρ 9 τ 7 ι ο ς 20 Bytes δεσµευµένα για το block Kωδικός 22 1 1 / 1 / 3 Kωδικός 1271 1 2.4 1 ∆ 7 9 9 4 ε υ τ έ Kωδικός 8939 ρ 1 7 α 8 / Kτλ… 1 / 9 Βασικό στοιχείο αυτής της δραστηριότητας είναι να προσέξετε ποιες εγγραφές έχουν διαγραφεί και να γράψετε στη θέση τους τις νέες. Προσέξτε ότι στην πραγµατικότητα οι εγγραφές δεν διαγράφονται από το δίσκο, αλλά ενεργοποιείται το bit διαγραφής. Εάν αντιµετωπίσατε προβλήµατα µε τη δραστηριότητα, επαναλάβατε την ενότητα 2.3.1 και τις δραστηριότητες 2 και 3 του κεφαλαίου 2. 2.5 Θα έχετε 11 blocks στο χαρτί (το τελευταίο block θα έχει µόνο 4 πόλεις). Ο πρώτος κατάλογος θα έχει 3 blocks µε 5 πόλεις στα δύο πρώτα και 1 µόνο πόλη στο τελευταίο. Θα χρειαστείτε και δεύτερο επίπεδο µε ένα block και τρεις πόλεις. Μπράβο σας, εάν το υλοποιήσατε, γιατί ήταν δύσκολο. Εάν είχατε προβλήµατα µελετήστε την ενότητα 2.3.3 και ειδικότερα το σχήµα 2.6. 208 O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 3 3.1 Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Το βασικό ήταν να εντοπίσετε τα ονόµατα και να τα διατάξετε ιεραρχικά αρχίζοντας από τα παλαιότερα µέλη του γενεαλογικού δέντρου (π.χ. τον προπάππο σας). 1. Εάν έχετε βάλει τα στοιχεία για όλα τα µέλη της οικογένειά σας, δεν θα πρέπει να είναι Iεραρχικό ∆έντρο! Φυσικό είναι, αφού εσείς θα έχετε ως κόµβους γονιούς τους κόµβους των γονέων σας, δηλαδή θα έχετε δύο κόµβους γονιούς, κάτι που έρχεται σε αντίθεση µε τον ορισµό της ενότητας 3.1. 2. Όχι, αφού δεν είναι ιεραρχικό δέντρο. 3. Μία απλή αλλαγή θα ήταν να ετοιµάσετε το δέντρο αναφέροντας µόνο ένα µέλος κάθε ζευγαριού (π.χ. µόνο τον πατέρα). Άλλη λύση να αναφέρετε και τους δύο γονείς σε µία εγγραφή. Μπράβο σας, εάν δεν αντιµετωπίσατε πρόβληµα, γιατί ήταν µία δύσκολη δραστηριότητα. 3.2 Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Το βασικό ήταν να εντοπίσετε τα ονόµατα και να τα διατάξετε ιεραρχικά αρχίζοντας από τα παλαιότερα µέλη του γενεαλογικού δέντρου (π.χ. τον προπάππο σας). Τώρα δεν υπήρχε πρόβληµα να έχετε ως εγγραφές και τους δύο γονείς για κάθε παιδί. 3.3 Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Το βασικό ήταν να εντοπίσετε τις βασικές οντότητες (όπως π.χ. η οντότητα πόλη) και να επιλέξετε τα χαρακτηριστικά που περιγράφουν κάθε πόλη (όπως π.χ. η ονοµασία της κάθε πόλης). Εάν αντιµετωπίσατε προβλήµατα, µην ανησυχείτε. Θα περιγράψουµε περισσότερο τα διαγράµµατα σχέσεων – οντοτήτων στις επόµενες ενότητες και θα ξεκαθαρίσουν καλύτερα. 3.4 Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Έχουµε δύο οντότητες (τις «Οµάδα» και «Παίκτης») και δύο σχέσεις: α) τη σχέση «Παίζει», που αναφέρεται σε παίκτη που παίζει σε οµάδα και είναι σχέση 1 προς Ν (ένας παίκτης παίζει σε µία µόνο οµάδα, αλλά µία οµάδα έχει πολλούς παίκτες), και β) τη σχέση αγώνας, που είναι σχέση Ν προς Μ στην οντότητα «Οµάδα» (δηλαδή συµµετέχουν εγγραφές από την οντότητα οµάδα). O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 3 209 3.5 Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Το βασικό ήταν να εντοπίσετε τις βασικές οντότητες (όπως π.χ. η οντότητα «πόλη» και η νέα οντότητα «µέτρηση») και τις µεταξύ τους σχέσεις. Προσέξτε την έννοια της ηµεροµηνίας για κάθε «µέτρηση». 3.6 Αυτή είναι µία δύσκολη δραστηριότητα, γιατί είναι η πρώτη φορά που αντιµετωπίζετε το θέµα των σχέσεων οντοτήτων σχεδιαστικά. Μπράβο σας, εάν δεν αντιµετωπίσατε κανένα πρόβληµα. Το βασικό ήταν να χρησιµοποιήσετε τα δοµικά στοιχεία που περιγράψαµε στην ενότητα 3.3.3 και να αναπαραστήσετε τις σχέσεις και τις οντότητες του προβλήµατος. Έτσι, θα έπρεπε να έχετε δύο τετράγωνα (ένα για κάθε οντότητα) και δύο ρόµβους (ένα για κάθε σχέση. Προσέξτε ο ρόµβος που περιγράφει τη σχέση «Αγώνας» ξεκινάει από την οντότητα οµάδα και καταλήγει πάλι στην οντότητα οµάδα και είναι σχέση Ν προς Μ. Μην παραλείψετε να σχεδιάσετε και τις ελλείψεις για τα κατηγορήµατα και να σηµειώσετε τα κατηγορήµατα που είναι κλειδιά. Επίσης θυµηθείτε ότι η σχέση αγώνας έχει κατηγορήµατα και συµπεριλάβετέ τα στο σχήµα. 3.7 Με βάση την εµπειρία που αποκτήσατε στη δραστηριότητα 6 που προηγήθηκε δεν θα έπρεπε να αντιµετωπίσατε κάποιο πρόβληµα. Σε περίπτωση όµως που είχατε προβλήµατα είτε µε αυτή τη δραστηριότητα, είτε µε την προηγούµενη, τότε καλύτερα να αφιερώσετε χρόνο για µία καλή επανάληψη της ενότητας 3.3. 3.8 Μπράβο σας, εάν δεν αντιµετωπίσατε πρόβληµα σε αυτή τη δραστηριότητα. Το ζητούµενο είναι να εντοπίσετε τα στοιχεία που είναι κοινά τόσο για τους παίκτες όσο και για τους µάνατζερ (στην περίπτωση αυτή είναι µόνο το όνοµα και το επώνυµο) και να τα θέσετε ως στοιχεία της οντότητας «Άνθρωπος». Τα ειδικά στοιχεία για κάθε οντότητα θα πρέπει να περιοριστούν στις οντότητες που θα περιγράφονται µε σχέση ISA. 3.9 Σε αυτή τη ΠΠσας ζητήθηκαν στοιχεία που αναφέραµε στο κεφάλαιο 2. Σε περίπτωση που αντιµετωπίσατε πρόβληµα, ίσως θα έπρεπε να αφιερώσετε κάποιο χρόνο για µία επανάληψη τόσο στο κεφάλαιο 2 όσο και στο κεφάλαιο 3. Πάντως, εάν µεταφέρατε στο χαρτί ότι ακριβώς παρουσιάζεται στο σχήµα 3.9, δεν θα έπρεπε να είχατε πρόβληµα. Θυµηθείτε 210 O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 3 & 4 να µεταφέρετε τα κατηγορήµατα σε πεδία και φυσικά προσέξτε τα κλειδιά κάθε οντότητας να εµφανίζονται στις σχέσεις στις οποίες συµµετέχει αυτή η οντότητα. 3.10 Ένα πρόβληµα είναι πώς θα περιγραφεί το γεγονός ότι δύο οµάδες µπορούν να παίξουν περισσότερους από έναν αγώνα ανά σεζόν. Πώς θα περιγραφεί αυτό στο διάγραµµα, εάν δεν γίνουν αλαγές στη σχεδίαση; Επίσης τι γίνεται µε τις διαφορετικές χρονιές; Πώς µπορούµε να έχουµε πληροφορίες για το πού έπαιζε ένας παίκτης πριν από την οµάδα στην οποία παίζει τώρα; Μπράβο σας εάν εντοπίσατε προβλήµατα, όπως τα παραπάνω. Προσπαθήστε να µετατρέψετε το παράδειγµα σε ένα αρκετά πιο µεγάλο και πολύπλοκο σχήµα, που να δίνει λύσεις στα παραπάνω. 4.1 Λογικά δεν θα έπρεπε να αντιµετωπίσετε προβλήµατα και µπράβο σας, εάν τα καταφέρατε. Το ζητούµενο ήταν να εισάγετε 10 παραδείγµατα για κάθε οντότητα και 5 παραδείγµατα από εγγραφές για κάθε σχέση. Τα σηµεία που έπρεπε να προσέξετε ήταν να χρησιµοποιήστε στις σχέσεις εγγραφές (δηλαδή τα κλειδιά από εγγραφές) που είχατε ήδη εισάγει στις οντότητες και φυσικά να προσέξετε να µην υπάρχουν κενές τιµές στα κλειδιά. 4.2 Λογικά δεν θα έπρεπε να αντιµετωπίσετε προβλήµατα µε δεδοµένο ότι είχατε υλοποιήσει τη δραστηριότητα 1 του κεφαλαίου 4 και µπράβο σας, εάν τα καταφέρατε. Εάν αντιµετωπίσατε πρόβληµα στο να εντοπίσετε τις εγγραφές που δηµιουργούν προβλήµατα ακεραιότητας, τότε αφιερώστε λίγο χρόνο για µία επανάληψη της ενότητας 4.1.2 και επαναλάβετε τη δραστηριότητα. 4.3 Λογικά δεν θα έπρεπε να αντιµετωπίσετε προβλήµατα µε δεδοµένο ότι έχετε εµπειρία στις προβολές από τις προηγούµενες ασκήσεις. Θα έπρεπε να πάρετε προβολές είτε µε µόνο το «Όνοµα», είτε µε µόνο το «Επώνυµο», είτε και µε τα δύο από τους πίνακες «Παίκτης» και «Μάνατζερ» και να επιβεβαιώσετε την ισότητα συγκρίνοντας τα αποτελέσµατα των πράξεων. O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 4 & 5 211 4.4 ∆εν θα σας δώσουµε την πλήρη λύση για αυτή τη δραστηριότητα γιατί θα προκύψει ένας τεράστιος πίνακας. Αυτός ο πίνακας θα πρέπει να έχει arity 10 (ο πίνακας «Παίκτης» έχει 7 στήλες και ο πίνακας «Μάνατζερ» 3, άρα το άθροισµά τους είναι 10) και cardinality 30 (6 γραµµές που έχει ο πίνακας «Παίκτης» επί 5 γραµµές που έχει ο πίνακας «Μάνατζερ» µας δίνει 30). Μπράβο σας, εάν υλοποιήσατε τον πίνακα µε όλα τα παραπάνω χαρακτηριστικά. 4.5 Αυτή η δραστηριότητα ήταν αρκετά δύσκολη. Εάν δεν τα καταφέρατε, µην απογοητεύεστε, αλλά αφιερώστε χρόνο για να διαβάσετε περισσότερα για το σχεσιακό υπολογισµό από τη βιβλιογραφία που αναγράφεται στο τέλος του κεφαλαίου. Ουσιαστικά από τις πράξεις που περιγράψαµε στην ενότητα 4.2 τις περισσότερες τις καλύψαµε στην προηγούµενη άσκηση αυτοαξιολόγησης (άσκηση 8 του κεφαλαίου 4). Η πράξη τοµή δεν θα σας δυσκόλεψε, εάν θυµηθήκατε ότι είναι δύο αφαιρέσεις. Όσο για τις συνδέσεις, είπαµε ότι είναι προβολές και επιλογές πάνω σε ένα καρτεσιανό γινόµενο. Μπράβο σας, εάν τα καταφέρατε για όλες τις πράξεις. 5.1 Μπράβο σας, εάν τα καταφέρατε, γιατί αυτή ήταν µία δραστηριότητα που απαιτούσε αρκετή εργασία και αναζήτηση. Η απάντησή σας θα πρέπει να περιέχει αρκετά συστήµατα, µερικά από αυτά ίσως να µην είναι σε µεγάλη χρήση σήµερα. Επίσης, θα πρέπει να έχετε συµπεριλάβει στην απάντησή σας τόσο µικρά συστήµατα, όπως η Microsoft Access (που υποστηρίζει τόσο SQL και QBE, µε κύρια γλώσσα ερωτήσεων τη QBE), όσο και µεγάλα συστήµατα, όπως για παράδειγµα η ORACLE. Εάν δεν τα καταφέρατε, µην απογοητεύεστε. Μπορείτε να αναζητήσετε πληροφορίες από υπολογιστικά κέντρα τµηµάτων Πανεπιστηµίων, καθώς και στον επαγγελµατικό χώρο. Εκεί θα εντοπίσετε αρκετά συστήµατα για να µπορέσετε να ολοκληρώσετε τη δραστηριότητα. 5.2 Μπράβο σας, εάν τα καταφέρατε, αν και δεν θα πρέπει να δυσκολευτήκατε. Μπορείτε να χρησιµοποιείτε τη Βάση ∆εδοµένων που δηµιουργήσατε για να ελέγχετε την ορθότητα των ασκήσεων του κεφαλαίου και για να εντοπίζετε και να διορθώνετε πιθανά λάθη σας. 5.3 Μπράβο σας, εάν τα καταφέρατε. Γενικά, µη διστάζετε να πειραµατίζεστε µε τη Βάση 212 O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 5 ∆εδοµένων που δηµιουργήσατε. Αυτός είναι και ο καλύτερος τρόπος για να µάθετε SQL. Μπορείτε να δηµιουργήσετε ένα αντίγραφο της Βάσης ∆εδοµένων σας και να πειραµατίζεστε συνεχώς µε αυτό το αντίγραφο, χωρίς να υπάρχει φόβος να καταστρέψετε τα αρχικά δεδοµένα που έχετε δηµιουργήσει στο πρωτότυπο. Με αυτό τον τρόπο θα µάθετε πολλά περισσότερα από κάθε άλλη µορφή µελέτης. 5.4 Μπράβο σας, εάν τα καταφέρατε. Όπως σας είπαµε και στην προηγούµενη δραστηριότητα ο καλύτερος τρόπος για να µάθετε SQL είναι να πειραµατίζεστε συνεχώς πάνω στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων, που επιλέξατε να χρησιµοποιείτε. 5.5 Στη δραστηριότητα αυτή πρέπει να προσέξετε να µην χρησιµοποιήσετε την ίδια µετονοµασία για διαφορετικούς πίνακες και φυσικά να µην κάνετε λάθος στη χρήση των νέων ονοµάτων. Μπράβο σας, εάν τα καταφέρατε µε αυτή τη δραστηριότητα. 5.6 Βασικό σε αυτή τη δραστηριότητα ήταν να προσέξετε ποιες εντολές εκτελούν πράξεις σε σύνολα (όπως για παράδειγµα η «UNION») και ποιες εντολές επιστρέφουν «αληθές» ή «ψευδές» στη συνθήκη του «WHERE». Λογικά δεν θα έπρεπε να αντιµετωπίσατε σηµαντικά προβλήµατα και µπράβο σας, εάν τα καταφέρατε να υλοποιήσετε µία τουλάχιστον ερώτηση για κάθε εντολή που συζητήσαµε σε αυτή την ενότητα. 5.7 Μπράβο σας, εάν τα καταφέρατε και υλοποιήσατε ερωτήσεις µε συνδέσεις. Όπως επαναλαµβάνουµε συνεχώς σε αυτό το κεφάλαιο, ο καλύτερος τρόπος για να µάθετε SQL είναι να πειραµατίζεστε συνεχώς πάνω στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων που επιλέξατε να χρησιµοποιείτε. 5.8 Μπράβο σας, εάν τα καταφέρατε και δεν αντιµετωπίσατε πρόβληµα µε αυτή την εργασία. Γενικά ο καλύτερος τρόπος εκµάθησης είναι ο συνεχής πειραµατισµός. 5.9 Η εκτέλεση αυτής της δραστηριότητας σχετίζεται άµεσα µε το σύστηµα που χρησιµοποιείτε. Σε περίπτωση που αντιµετωπίσατε δυσκολίες, αυτό µπορεί και να οφείλεται στο O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 5 & 6 213 σύστηµα. Μελετήστε τα εγχειρίδια χρήσης του και ξαναπροσπαθήστε, αλλά κυρίως µην απογοητεύεστε. 5.10 Σε περίπτωση που τα καταφέρατε µε τη δραστηριότητα 9 δεν θα πρέπει να αντιµετωπίσατε πρόβληµα ούτε µε αυτή τη δραστηριότητα. Μπράβο σας εάν χρησιµοποιήσατε και τις εντολές UPDATE και DELETE για να διορθώσετε πιθανά λάθη που κάνατε. 6.1 Ένα καλό σύστηµα που µπορείτε να χρησιµοποιήσετε είναι η Microsoft Access που παρέχει την QBE ως βασική γλώσσα υποβολής ερωτήσεων. Μπράβο σας, εάν τα καταφέρατε και αποκτήσατε εξοικείωση µε την υποβολή ερωτήσεων σε QBE, γιατί αυτή η γνώση θα σας φανεί χρήσιµη για τις επόµενες ασκήσεις και δραστηριότητες. 6.2 Μπράβο σας, εάν τα καταφέρατε και υλοποιήσατε τις ερωτήσεις στο Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων που χρησιµοποιείτε. Σε περίπτωση που αντιµετωπίσατε πρόβληµα, είναι πολύ πιθανό αυτό να οφείλεται σε µικρές διαφοροποιήσεις της QBE που χρησιµοποιεί το σύστηµά σας. Καλύτερα µελετήστε τα εγχειρίδια του συστήµατος και επαναλάβατε τη δραστηριότητα. 6.3 Ένα βασικό πλεονέκτηµα του συστήµατος αυτού είναι ότι µπορείτε να δώσετε την ερώτηση σε µία από τις γλώσσες που µάθαµε (SQL ή QBE) και να δείτε την ίδια ερώτηση αυτόµατα και στην άλλη γλώσσα. Μπράβο σας, εάν το ανακαλύψατε και πειραµατιστήκατε µε αυτό. 214 O ¢ ∏ ° π ∂ ™ ∫ ∞ π ∫ ∞∆ ∂ À £ À ¡ ™ ∂ π ™ ° π ∞ ∆ π ™ ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ / K E º . 7 7.1 Μπράβο σας, εάν τα καταφέρατε. Υπήρχαν πολλές τέτοιες Βάσεις, όταν γραφόταν το βιβλίο και σίγουρα θα έχουν ήδη κυκλοφορήσει αρκετές ακόµα. Η δραστηριότητα αυτή είχε κυρίως ως σκοπό να σας δείξει ότι οι αντικειµενοστραφείς Βάσεις ∆εδοµένων κάνουν σταδιακά την εµφάνισή τους στην αγορά. 7.2 Μπράβο σας, εάν τα καταφέρατε. Όπως είπαµε, σε αυτό το βιβλίο δεν θα αφιερώσουµε πολύ µεγάλο χώρο στην παρουσίαση των αντικειµενοστραφών Βάσεων ∆εδοµένων και για αυτό είναι σαφώς καλύτερα να πειραµατιστείτε και να διαβάσετε αρκετά από την προτεινόµενη βιβλιογραφία. 7.3 Μπράβο σας, εάν τα καταφέρατε. Όπως είπαµε και στην προηγούµενη δραστηριότητα, σε αυτό το βιβλίο δεν θα αφιερώσουµε πολύ µεγάλο χώρο στην παρουσίαση της OQL και για αυτό είναι σαφώς καλύτερα να πειραµατιστείτε και να διαβάσετε αρκετά από την προτεινόµενη βιβλιογραφία. 7.4 Μπράβο σας, εάν τα καταφέρατε. Επειδή σε αυτό το βιβλίο δεν θα αφιερώσουµε πολύ µεγάλο χώρο στην παρουσίαση της SQL3 είναι σαφώς καλύτερα να πειραµατιστείτε και να διαβάσετε αρκετά από την προτεινόµενη βιβλιογραφία. AÏÊ·‚ËÙÈÎfi ¢ÚÂÙ‹ÚÈÔ fiÚˆÓ (ÂÏÏËÓÈο – ·ÁÁÏÈο) Aδιέξοδο Ακεραιότητα Αντικείµενο Αντικειµενοστραφής Αριθµός Γραµµών Πίνακα Αριθµός Στηλών Πίνακα Αρχεία Ασθενής Οντότητα Βάση ∆εδοµένων Γλώσσα Οικοδεσπότης Γλώσσα Ορισµού ∆εδοµένων Γλώσσα Χειρισµού ∆εδοµένων Γλώσσες Ερωτήσεων Γονιός ∆εδοµένα ∆είκτες ∆εικτοδότηση ∆έντρα τύπου Β ∆έντρο ∆ιαγραφή ∆ιάταξη ∆οµηµένος Προγραµµατισµός Εγγραφές Εισαγωγή Ενηµέρωση Εξωτερικό Επίπεδο Επιλογή Επίπεδα Προσπέλασης Βάσης ∆εδοµένων Επίπεδο Αντίληψης Εσωτερικό (Φυσικό) Επίπεδο Deadlock Integrity Object Object Oriented Cardinality Arity Files Weak Entity Database Host Language Data Definition Language Data Manipulation Language Query Languages Parent Data Pointers Indexing B–Trees Tree Delete Sorting Structured Programming Records Insert Update External Level Select Database User Levels Conceptual Level Internal (Physical) Level 216 A§º∞µ∏∆π∫√ ∂Àƒ∂∆∏ƒπ√ √ƒø¡ (∂§§∏¡π∫∞ – ∞°°§π∫∞) Ιεραρχικό Μοντέλο Κατακερµατισµός Κατηγόρηµα Κενή Τιµή Κλάση Κλειδί Κλείδωµα Κληρονοµικότητα Μέθοδος Μετονοµασίες Οντότητα Οργάνωση ∆εδοµένων Όψεις ∆εδοµένων Παιδί Παράδειγµα Πεδία Πίνακας Αποτελέσµατος Πίνακας Εώτησης Πίνακας Πληροφορία Συµβολοσειρά Σύνδεση Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων Σχέση Σχεσιακή Άλγεβρα Σχεσιακός Υπολογισµός Τύπος ∆εδοµένων Φύλλο Χρήστες Βάσης ∆εδοµένων Hierarchic Model Hashing Attribute Null Value Class Key Lock Inheritance Method Aliases Entity Data Organization Data Views Child Example Fields Result Table Query Table Table Information String Link Database Management System (DBMS) Relation Relational Algebra Relational Calculus Data Type Leaf Database Users AÏÊ·‚ËÙÈÎfi ¢ÚÂÙ‹ÚÈÔ fiÚˆÓ (·ÁÁÏÈο – ÂÏÏËÓÈο) Aliases Arity Attribute B–Trees Cardinality Child Class Conceptual Level Data Definition Language Data Manipulation Language Data Organization Data Type Data Views Data Database Management System (DBMS) Database User Levels Database Users Database Deadlock Delete Entity Example External Level Fields Files Hashing Hierarchic Model Host Language Indexing Information Μετονοµασίες Αριθµός Στηλών Πίνακα Κατηγόρηµα ∆έντρα τύπου Β Αριθµός Γραµµών Πίνακα Παιδί Κλάση Επίπεδο Αντίληψης Γλώσσα Ορισµού ∆εδοµένων Γλώσσα Χειρισµού ∆εδοµένων Οργάνωση ∆εδοµένων Τύπος ∆εδοµένων Όψεις ∆εδοµένων ∆εδοµένα Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων Επίπεδα Προσπέλασης Βάσης ∆εδοµένων Χρήστες Βάσης ∆εδοµένων Βάση ∆εδοµένων Aδιέξοδο ∆ιαγραφή Οντότητα Παράδειγµα Εξωτερικό Επίπεδο Πεδία Αρχεία Κατακερµατισµός Ιεραρχικό Μοντέλο Γλώσσα Οικοδεσπότης ∆εικτοδότηση Πληροφορία 218 A§º∞µ∏∆π∫√ ∂Àƒ∂∆∏ƒπ√ √ƒø¡ (∞°°§π∫∞ – ∂§§∏¡π∫∞) Inheritance Insert Integrity Internal (Physical) Level Key Leaf Link Lock Method Null Value Object Oriented Object Parent Pointers Query Languages Query Table Records Relation Relational Algebra Relational Calculus Result Table Select Sorting String Structured Programming Table Tree Update Weak Entity Κληρονοµικότητα Εισαγωγή Ακεραιότητα Εσωτερικό (Φυσικό) Επίπεδο Κλειδί Φύλλο Σύνδεση Κλείδωµα Μέθοδος Κενή Τιµή Αντικειµενοστραφής Αντικείµενο Γονιός ∆είκτες Γλώσσες Ερωτήσεων Πίνακας Ερώτησης Εγγραφές Σχέση Σχεσιακή Άλγεβρα Σχεσιακός Υπολογισµός Πίνακας Αποτελέσµατος Επιλογή ∆ιάταξη Συµβολοσειρά ∆οµηµένος Προγραµµατισµός Πίνακας ∆έντρο Ενηµέρωση Ασθενής Οντότητα °ÏˆÛÛ¿ÚÈÔ Αρχεία Τα Αρχεία είναι συλλογές από εγγραφές. Βάση ∆εδοµένων Η Βάση ∆εδοµένων είναι µια αυστηρά τυποποιηµένη συλλογή από σχετικά µεταξύ τους δεδοµένα, που παρέχει ένα αυτόµατο, κεντρικό και κοινό τρόπο χειρισµού τους. Βαθµός Σχέσης Βαθµός µιας σχέσης ονοµάζεται ο αριθµός των οντοτήτων που συµµετέχουν στη σχέση. ∆εδοµένα Ως δεδοµένα ορίζονται στοιχεία, έννοιες και οδηγίες, τυποποιηµένα σε καθορισµένη µορφή, κατάλληλα για επεξεργασία από ανθρώπους ή µηχανές. ∆ιαφάνεια Ως ∆ιαφάνεια ορίζεται το γεγονός ότι ο χρήστης δεν γνωρίζει πού βρίσκονται τα δεδοµένα του και απλά βλέπει το αποτέλεσµα των εντολών που εκτελεί στο εξωτερικό επίπεδο. ∆έντρα τύπου Β+ Τα δέντρα τύπου Β+ είναι εξειδίκευση των δέντρων τύπου Β. Στα δέντρα τύπου Β+ υπάρχει ο επιπλέον περιορισµός ότι τα δεδοµένα (δείκτες προς τα blocks που περιέχουν δεδοµένα) αποθηκεύονται µόνο στα φύλλα του δέντρου και, συνήθως, τα φύλλα ενός δέντρου τύπου Β+ είναι συνδεδεµένα µεταξύ τους παρέχοντας µια ενιαία διατεταγµένη µορφή καταλόγου. Εγγραφές Εγγραφές είναι συλλογές από τιµές για ένα καθορισµένο αριθµό στοιχείων, τα οποία ονοµάζονται πεδία. Εξωτερικό Επίπεδο Ως εξωτερικό επίπεδο της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα δεδοµένα της Βάσης ∆εδοµένων παρουσιάζονται στο χρήστη. Ιδεατό επίπεδο Ως επίπεδο αντίληψης (ιδεατό επίπεδο) της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο περιγράφεται το σχήµα της Βάσης ∆εδοµένων µε αυστηρά καθορισµένο τρόπο, σε επίπεδο αφαίρεσης αµέσως υψηλότερο από αυτό του φυσικού επιπέδου. 220 BA™EI™ ¢E¢OMENøN Εσωτερικό (Φυσικό) Επίπεδο Ως φυσικό επίπεδο της αρχιτεκτονικής µίας Βάσης ∆εδοµένων ορίζεται το επίπεδο στο οποίο τα δεδοµένα αποθηκεύονται και οργανώνονται υπό τη µορφή bytes και σελίδων στο µηχανισµό αποθήκευσης της Βάσης ∆εδοµένων. Κατηγορήµατα Κατηγορήµατα µίας οντότητας του διαγράµµατος σχέσεων – οντοτήτων είναι τα στοιχεία που καθορίζουν τα χαρακτηριστικά της συγκεκριµένης οντότητας. Κλειδί Κλειδί για µία οντότητα του διαγράµµατος σχέσεων – οντοτήτων είναι το σύνολο των κατηγορηµάτων της οντότητας τα οποία είναι µοναδικά για κάθε εγγραφή και τη χαρακτηρίζουν απόλυτα. Οντότητα Οντότητα στο διάγραµµα σχέσεων – οντοτήτων είναι ένα στοιχείο του πραγµατικού περιβάλλοντος µε αυτόνοµη πραγµατική ή θεωρητική υπόσταση. Πεδία Τα Πεδία είναι στοιχεία µε καθορισµένο τύπο δεδοµένων που δεσµεύουν αποθηκευτικό χώρο. Πίνακας Ο πίνακας σε µία σχεσιακή Βάση ∆εδοµένων αποτελείται από µία ή περισσότερες, στήλες που αντιστοιχούν σε τιµές πεδίων και από γραµµές που αντιστοιχούν σε τιµές για αυτά τα πεδία. Πληροφορία Η πληροφορία εξάγεται από τα δεδοµένα και χρησιµοποιείται στην επίλυση προβληµάτων. Σύστηµα ∆ιαχείρισης Βάσεων ∆εδοµένων Σύστηµα ∆ιαχείρισης Βάσεν ∆εδοµένων είναι το λογισµικό το οποίο επιτρέπει στους χρήστες να δηµιουργούν και να χρησιµοποιούν Βάσεις ∆εδοµένων. Σχέση Η σχέση ανάµεσα σε οντότητες καθορίζει ένα σύνολο από συσχετισµούς ανάµεσα σε εγγραφές των οντοτήτων αυτών. Τύποι ∆εδοµένων Οι Τύποι ∆εδοµένων καθορίζουν τη µορφή των δεδοµένων και τον αποθηκευτικό χώρο που θα δεσµεύσουν. °§ø™™APIO 221 Χρήστες Βάσης ∆εδοµένων Χρήστες µιας Βάσης ∆εδοµένων είναι όσοι χρησιµοποιούν τη Βάση ∆εδοµένων, είτε για απόκτηση πληροφορίας, είτε για συντήρηση της Βάσης ∆εδοµένων. ...
View Full Document

This note was uploaded on 03/21/2010 for the course CS 234 taught by Professor Sadsd during the Spring '10 term at Open Uni..

Page1 / 224

&Icirc;’&Ici - Bάσεις ∆εδοµένων Ε ΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών

This preview shows document pages 1 - 5. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online