Κεφάλαιο 1: Η βάση δεδομένων... 15



Σχετικά έγγραφα
Μαρία-Στεφανία-Γιάννης 1 ο Πρότυπο Πειραματικό Δημοτικό Σχολείο Θεσσαλονίκης Ε2 Π.Τ.Δ.Ε.-Α.Π.Θ

Πρακτικό εργαλείο. για την ταυτοποίηση πρώτου επιπέδου των θυμάτων παράνομης διακίνησης και εμπορίας. τη σεξουαλική εκμετάλλευση

ΟΡΓΑΝΩΣΗ ΕΝΟΤΗΤΩΝ Α ΤΑΞΗΣ ΕΝΟΤΗΤΑ 3

ΚΩΔΙΚΑΣ ΔΕΟΝΤΟΛΟΓΙΑΣ

Έλλειψη εσωτερικής ελευθερίας

ΠΡΟΒΛΗΜΑΤΑ ΤΗΣ ΔΗΜΟΣΙΑΣ ΖΩΗΣ, ΜΙΑ ΨΥΧΑΝΑΛΥΤΙΚΗ ΠΡΟΣΕΓΓΙΣΗ

Φλωρεντία, 10 Δεκεμβρίου 1513 Προς τον: ΦΡΑΓΚΙΣΚΟ ΒΕΤΤΟΡΙ, Πρέσβη της Φλωρεντίας στην Αγία Παπική Έδρα, Ρώμη. Εξοχώτατε Πρέσβη,

Αυτός που δεν μπορεί να δει τα μικρά πράγματα είναι τυφλός και για τα μεγαλύτερα. (Κομφούκιος, πχ)

«ΑΝΩ ΛΙΟΣΙΑ: ΤΟΠΙΚΗ ΙΣΤΟΡΙΑ, ΠΕΡΙΒΑΛΛΟΝ, ΠΡΟΚΛΗΣΕΙΣ, ΠΡΟΟΠΤΙΚΕΣ»

ΠΑΡΟΥΣΙΑΣΗ ΤΩΝ ΓΕΝΙΚΩΝ ΚΑΙ ΕΙΔΙΚΩΝ ΟΡΩΝ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ «ΑΣΦΑΛΩΣ ΚΑΤΟΙΚΕΙΝ» ΚΟΙΝΟΧΡΗΣΤΟΙ ΧΩΡΟΙ

Ο αναλφαβητισμός ως σύγχρονο πρόβλημα

ΕΘΙΜΑ ΤΟΥ ΚΟΣΜΟΥ. Αγγελική Περιστέρη Α 2

Kεντρικός συντονισμός πολιτικών, μόνιμοι υφυπουργοί, μείωση ειδικών συμβούλων, κατάργηση αναπληρωτών.

ΕΡΓΑΛΕΙΑ ΣΥΜΒΟΥΛΕΤΙΚΗΣ

ΘΕΣΕΙΣ ΤΟΥ ΣΥΝΔΕΣΜΟΥ ΓΙΑ ΤΗΝ ΑΝΑΜΟΡΦΩΣΗ ΤΟΥ ΘΕΣΜΙΚΟΥ ΠΛΑΙΣΙΟΥ ΑΝΑΘΕΣΗΣ ΚΑΙ ΕΚΠΟΝΗΣΗΣ ΜΕΛΕΤΩΝ

03-00: Βιομάζα για παραγωγή ενέργειας Γενικά ζητήματα εφοδιαστικών αλυσίδων

Συνωμοσία Πυρήνων της Φωτιάς - Πυρήνας Αντάρτικου Πόλης

ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΙΚΟ ΣΗΜΕΙΩΜΑ 13 Α' ΜΕΡΟΣ ΑΠΟ ΤΟΝ ΠΟΛΕΜΟ ΤΟΥ 1897 ΣΤΟ ΓΟΥΔΙ

ΣΥΣΤΗΜΑ ΔΙΑΓΝΩΣΗΣ ΑΝΑΓΚΩΝ ΑΓΟΡΑΣ ΕΡΓΑΣΙΑΣ ΠΑΡΑΔΟΤΕΟ ΕΘΝΙΚΟΥ ΜΗΧΑΝΙΣΜΟΥ

ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΦΟΡΕΙΑ ΑΘΗΝΩΝ. Αθήνα, 19 Ιανουαρίου 2015 Α ΝΑΚΟΙΝΩΣΗ 3/15. ΠΡΟΣ : Όλους τους Βαθμοφόρους της Αθήνας ΚΟΙΝΟΠΟΙΗΣΗ :

Σε ποιες κατηγορίες μειώνεται η σύνταξη από 1/1/2009 (σε εφαρμογή του Ν.3655/2008)

Κατερίνα Παναγοπούλου: Δημιουργώντας κοινωνικό κεφάλαιο την εποχή της κρίσης

5 η Ενότητα Κουλτούρα και στρατηγική

Περιεχόμενα. Εισαγωγή... 7 ΜΕΡΟΣ Α Κεφάλαιο 1. Κεφάλαιο 2. Κεφάλαιο 3. Κεφάλαιο 4. Κεφάλαιο 5. Κεφάλαιο 6. Κεφάλαιο 7. Κεφάλαιο 8.

ΟΡΟΙ ΧΡΗΣΗΣ ΔΙΑΔΙΚΤΥΑΚΟΥ ΤΟΠΟΥ. ΙΔΡΥΜΑΤΟΣ ΜΠΟΔΟΣΑΚΗ (bodossaki.gr)

Υποψήφιοι Σχολικοί Σύμβουλοι

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΚΡΗΤΗΣ ΣΧΟΛΗ ΙΟΙΚΗΣΗΣ ΟΙΚΟΝΟΜΙΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

ΓΙΩΡΓΟΣ ΜΠΛΑΝΑΣ ΓΙΑ ΤΟΝ ΑΝΑΡΧΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

Τοποθέτηση Δημάρχου Γ. Πατούλη. για τεχνικό πρόγραμμα 2010

Χρηματοδότηση των Συλλόγων στην εποχή της κρίσης

ΤΕΙ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΛΟΓΙΣΤΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

ΠΑΙΔΑΓΩΓΙΚΗ ΣΧΟΛΗ (ΦΛΩΡΙΝΑ) ΤΜΗΜΑ ΝΗΠΙΑΓΩΓΩΝ ΕΡΓΑΣΤΗΡΙΟ ΔΙΔΑΚΤΙΚΗΣ ΦΥΣΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΠΑΡΑΓΩΓΗΣ ΔΙΔΑΚΤΙΚΟΥ ΥΛΙΚΟΥ

Κεφάλαιο Πέμπτο Εθνοπολιτισμική Ζωή και Εμπειρίες Ελληνικότητας των Ελληνοαυστραλών Εφήβων

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΛΑΜΑΤΑΣ ΣΧΟΛΗ ΟΙΚΟΝΟΜΙΑΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΜΟΝΑΔΩΝ ΥΓΕΙΑΣ ΚΑΙ ΠΡΟΝΟΙΑΣ

Η συμβολή του Πλάτωνα στα Μαθηματικά

Βασικά σημεία διάλεξης

Σοφία Γιουρούκου, Ψυχολόγος Συνθετική Ψυχοθεραπεύτρια

Ομιλία του ημάρχου Αμαρουσίου, Προέδρου Ιατρικού Συλλόγου Αθηνών. Γιώργου Πατούλη, στην εκδήλωση μνήμης στον Ιωάννη Πασαλίδη

ΜΟΥΣΕΙΟ ΚΑΠΝΟΥ ΚΑΒΑΛΑΣ ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ

Α. ΟΡΓΑΝΑ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΕΦΑΡΜΟΓΗΣ

Δρ.ΠΟΛΥΚΑΡΠΟΣ ΕΥΡΙΠΙΔΟΥ

Ασυντήρητες και επικίνδυνες οικοδομές

Ο αθλητισμός εμπνέεται από την ειρήνη. Η ειρήνη εμπνέεται από τον αθλητισμό.

8 Μάρτη. Η βία κατά των γυναικών

ΔΕΛΤΙΟ ΤΥΠΟΥ. Ελλείψεις στο φορολογικό νομοσχέδιο. Σοβαρές ελλείψεις στη νέα μορφή του φορολογικού νομοσχεδίου

ΓΥΝΑΙΚΕΙΟΙ ΑΓΡΟΤΟΥΡΙΣΤΙΚΟΙ ΣΥΝΕΤΑΙΡΙΣΜΟΙ ΣΤΗΝ ΕΛΛΑ Α

Συνοπτική Παρουσίαση. Ελλάδα

Όμιλος Λογοτεχνίας. Δράκογλου Αναστασία, Κιννά Πασχαλίνα

ΙΝΣΤΙΤΟΥΤΟ ΠΑΙΔΑΓΩΓΙΚΩΝ ΕΡΕΥΝΩΝ ΜΕΛΕΤΩΝ ΔΙΔΑΣΚΑΛΙΚΗΣ ΟΜΟΣΠΟΝΔΙΑΣ ΕΛΛΑΔΑΣ

Ο κόσμος των επιχειρήσεων, τησ οικονομιασ και των αγορών: επιχειρηματικές δραστηριότητες, επιχειρηματικοί κίνδυνοι και επιχειρηματικές πρακτικές

ΚΕΦΑΛΑΙΟ 3 ο ΤΟ ΜΕΛΛΟΝ ΤΗΣ ΕΥΡΩΠΑΪΚΗΣ ΕΝΩΣΗΣ. 3.1 Εισαγωγή

ΤΟ ΝΕΟ ΑΣΦΑΛΙΣΤΙΚΟ ΤΟΠΙΟ

γραμματισμό των νηπίων

ΠΟΛΙΤΙΚΉ ΠΑΙΔΕΙΑ. Α Γενικού Λυκείου και ΕΠΑ.Λ. Καζάκου Γεωργία, ΠΕ09 Οικονομολόγος

Τρίτη, 2 Σεπτεμβρίου 2014 Αριθ. Τεύχους: 200 Περιεχόμενα

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΥΠΟΒΟΛΗ ΑΙΤΗΣΗΣ ΓΙΑ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΓΙΑ ΠΙΘΑΝΕΣ ΚΕΝΕΣ ΘΕΣΕΙΣ

ΣΥΝΤΟΝΙΣΤΕΣ ΟΜΑΔΑΣ PROJECT ΑΝΘΡΩΠΙΣΤΙΚΕΣ ΕΠΙΣΤΗΜΕΣ: ΟΜΑΔΑ PROJECT ΑΝΘΡΩΠΙΣΤΙΚΕΣ ΕΠΙΣΤΗΜΕΣ:

Το ολοκαύτωμα της Κάσου

ΚΕΦΑΛΑΙΟ Α.2 ΑΝΑΠΤΥΞΙΑΚΗ ΦΥΣΙΟΓΝΩΜΙΑ ΤΟΥ ΔΗΜΟΥ ΑΜΑΛΙΑΔΑΣ

4. Παρατηρήστε την εικόνα Τι συμβαίνει στους πάγους της Αρκτικής, στον Βόρειο Πόλο;

Οι ιοί και οι ιογενείς λοιμώξεις του αναπνευστικού συστήματος στα παιδιά


ΘΕΜΑ: «Καλλιέργεια προφορικών δεξιοτήτων των νηπίων: Διδακτικές δραστηριότητες του προφορικού λόγου στο νηπιαγωγείο»

Πρακτικό 6/2012 της συνεδρίασης της Επιτροπής Ποιότητας Ζωής, του Δήμου Λήμνου, της 4ης Μαΐου 2012.

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΗΛΕΚΤΡΟΝΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ ΑΙΤΗΣΕΩΝ ΜΕΤΑΤΑΞΕΩΝ ΕΚΠΑΙΔΕΥΤΙΚΩΝ. ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Υπουργείο Παιδείας και Θρησκευμάτων

Η ΔΙΑΘΕΜΑΤΙΚΗ ΤΗΣ ΔΙΑΘΕΜΑΤΙΚΗΣ

ΑΣΤΡΟΝΟΜΙΑ ΣΤΗΝ ΑΡΧΑΙΑ ΕΛΛΑΔΑ

ΤΙΤΛΟΣ ΒΙΒΛΙΟΥ: Συνδικαλιστική εκπαίδευση, Συλλογικές συμβάσεις, Συλλογικές διαπραγματεύσεις.

ΜΗ ΤΥΠΙΚΟΤΗΤΑ ΚΑΙ ΜΗ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ ΣΤΙΣ ΑΓΟΡΕΣ

ΑΝΑΚΥΚΛΩΣΗ ΤΗΓΑΝΕΛΑΙΟΥ ΓΙΑΤΙ - ΠΩΣ - ΠΟΤΕ

289 ον Σύστημα Αεροπροσκόπων Αγίας Φύλας ΟΜΑΔΑ ΠΡΟΣΚΟΠΩΝ ΕΓΧΕΙΡΙΔΙΟ ΧΑΛΚΙΝΟΥ ΤΡΙΦΥΛΛΟΥ

Ηλεκτρικό φορτίο Ηλεκτρική δύναμη

«ΣΥΝΕΝΤΕΥΞΗ ΤΟΥ ΗΜΑΡΧΟΥ ΙΛΙΟΥ, Κ. ΝΙΚΟΥ ΖΕΝΕΤΟΥ ΣΤΗΝ ΕΦΗΜΕΡΙ Α «ΜΙΤΟΣ» ΚΑΙ ΤΗ ΗΜΟΣΙΟΓΡΑΦΟ ΑΘΗΝΑ ΠΕΡΡΑΚΗ»

Ο Χειμωνάς σε αναμέτρηση με τον σαιξπηρικό Άμλετ

μέρους του και εξυπηρέτηση του υπόλοιπου με ρήτρα ανάπτυξης και απασχόλησης Με επαρκή φορολόγηση του πλούτου, των μεγάλων περιουσιών και εισοδημάτων

Πρόγραμμα Κοινωνικών Δεξιοτήτων Δεκεμβρίου

ΔΙΑΔΟΣΗ ΘΕΡΜΟΤΗΤΑΣ Φυσική Β' Γυμνασίου. Επιμέλεια: Ιωάννης Γιαμνιαδάκης

ΕΡΓΑΣΙΑ ΤΕΧΝΟΛΟΓΙΑΣ «ΚΑΤΟΙΚΙΔΙΑ ΖΩΑ»

Τα Αναβολικά. Τα αναβολικά χωρίζονται στα φυσικά και στα συνθετικά.

Σχολικός εκφοβισµός και γονείς

ΑΝΑΚΟΙΝΩΣΗ ΑΙΤΗΣΕΩΝ ΓΙΑ ΟΡΚΩΜΟΣΙΑ

ΣΥΓΚΡΙΣΗ ΣΥΜΒΑΤΙΚΗΣ ΚΑΙ ΜΗΧΑΝΟΠΟΙΗΜΕΝΗΣ ΜΕΘΟΔΟΥ ΣΠΟΡΑΣ ΚΑΙ ΜΕΤΑΦΥΤΕΥΣΗΣ ΣΠΟΡΟΦΥΤΩΝ ΛΑΧΑΝΙΚΩΝ

Η ΑΥΤΕΠΑΓΓΕΛΤΗ ΑΝΑΖΗΤΗΣΗ ΔΙΚΑΙΟΛΟΓΗΤΙΚΩΝ ΜΙΑ ΚΡΙΤΙΚΗ ΑΠΟΤΙΜΗΣΗ. ( Διοικητική Ενημέρωση, τ.51, Οκτώβριος Νοέμβριος Δεκέμβριος 2009)

6 η Ενότητα Στρατηγική σε επιχειρηματικό επίπεδο

Η Φυσική με Πειράματα

Η υποστήριξη της επαγγελματικής μάθησης μέσα από την έρευνα-δράση: διαδικασίες και αποτελέσματα

ΓΕΝΙΚΕΣ ΑΡΧΕΣ ΑΧΡΗΜΑΤΗΣ ΚΟΙΝΩΝΙΑΣ

Στο Δηµόσιο Σχολείο «µας»...

Ατομικό ιστορικό νηπίου

ΑΝΑΚΟΙΝΩΣΗ ΣΟΧ 3/2015 για τη σύναψη ΣΥΜΒΑΣΗΣ ΕΡΓΑΣΙΑΣ ΟΡΙΣΜΕΝΟΥ ΧΡΟΝΟΥ. Η Κοινωφελής ηµοτική Επιχείρηση ήµου Αµπελοκήπων-Μενεµένης

1. Εισαγωγή. 2. Καταπολέμηση της φοροδιαφυγής

Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών

Εσωτερικοί Κανονισμοί Τοπικής Αυτοδιοίκησης

Φασίστες και αφεντικά στου πηγαδιού τον πάτο, ζήτω το παγκόσμιο προλεταριάτο.

Το ρολόι που κρατάς στα χέρια σου κρύβει ένα μυστικό: το μυστικό της κόκκινης ομάδας. Αν είσαι αρκετά τολμηρός, μπορείς κι εσύ να ενημερωθείς για τα

Πρώτη διδακτική πρόταση Χρωματίζοντας ένα σκίτσο


ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ ΓΕΝΙΚΟΙ ΟΡΟΙ

ΕΜΠΕΙΡΟΓΝΩΜΟΣΥΝΗ ΓΙΑ ΤΗΝ ΟΛΟΚΛΗΡΩΜΕΝΗ ΑΝΑΠΤΥΞΗ ΤΟΥ ΚΛΑΔΟΥ ΤΗΣ ΕΚΤΡΟΦΗΣ ΤΩΝ ΓΟΥΝΟΦΟΡΩΝ

Transcript:

Περιεχόμενα Κεφάλαιο 1: Η βάση δεδομένων... 15 1. Περιγραφή της εφαρμογής... 17 2. Βάσεις δεδομένων... 20 2.1 Βασικές έννοιες... 21 2.2 Χειρισμός κύριων και εξαρτημένων εγγραφών... 24 2.3 Ευριστικοί κανόνες δημιουργίας πινάκων... 27 2.4 Αλυσιδωτή/περιοριστική διαγραφή πινάκων... 37 3. MySQL... 40 3.1 Εγκατάσταση... 40 3.2 Ρυθμίσεις... 40 3.3 Διαχείριση MySQL με MySQLControlCenter... 44 3.3.1 Διαχείριση του MySQL server... 46 3.3.2 Δημιουργία βάσεων δεδομένων πινάκων... 46 3.3.3 Εκτέλεση εντολών με SQL Editor... 55 3.3.4 Διαχείριση χρηστών... 60 3.3.5 Έλεγχος σύνδεσης... 63 3.4 Διαχείριση MySQL με phpmyadmin... 65 3.4.3 Ρυθμίσεις του phpmyadmin για την MySQL... 67 3.5 Ερωτήματα πάνω στη βάση... 68 Ενδεικτικές εργασίας... 70 Αποτελέσματα Συμπεράσματα... 71

Java Προχωρημένες τεχνικές Κεφάλαιο 2: Υλοποίηση της εφαρμογής... 73 1. Java... 75 1.1 Γιατί Java;... 75 1.2 JDK JRE... 76 1.3 Ρυθμίσεις της Java... 80 1.4 Java Plug-in... 85 2. Μικροεφαρμογές Java... 86 2.1 Δημιουργία μικροεφαρμογής Java... 86 2.2 Δημιουργία αρχείων *.jar... 88 2.3 Εγκατάσταση μικροεφαρμογής Java... 89 2.3.1 Ρυθμίσεις στο περιβάλλον του Διακομιστή Ιστού... 89 2.3.2 Εγκατάσταση της εφαρμογής στον υπολογιστή-πελάτη... 91 2.3.3 Εγκατάσταση της εφαρμογής στον διακομιστή... 93 3. Συμβάσεις υλοποίησης της εφαρμογής... 95 4. Δημιουργία οθονών της εφαρμογής... 101 4.1 Κλάσεις με οθόνες... 101 4.1.1 Οθόνη KTDBMainPanel... 104 4.1.2 Οθόνη UserFrame... 108 4.1.3 Οθόνη TeamFrame... 109 4.1.4 Οθόνη StudentsPerTeamListFrame... 112 4.1.5 Οθόνη SpecStudentFrame... 113 4.1.6 Οθόνη HelpFrame... 114 5. Παράμετροι εφαρμογής... 117 5.1 Παράμετροι στο HTML αρχείο... 118 5.2 Παραμέτροι από αρχείο ιδιοτήτων... 121 5.3 Παραμέτροι στην γραμμή εντολής... 124 6. Χειρισμός της βάσης δεδομένων... 125 6.1 Παράμετροι στο HTML αρχείο...126 6.2 Παράμετροι από αρχείο ιδιοτήτων... 127 7. Ενσωμάτωση λειτουργιών στις κλάσεις... 129 7.1 Αλληλεπίδραση ανάμεσα στις κλάσεις... 129 7.2 Αλληλεπίδραση με το χρήστη... 131 8. Λειτουργίες στη βάση δεδομένων... 145 8.1 Κλάσεις προσπέλασης πεδίων πινάκων... 146 8.2 Εισαγωγή-ενημέρωση... 150 8.3 Έλεγχος πριν τις δεσμευτικές πράξεις... 151 8.3.1 Mέθοδος databasework()... 151 8.4 Εκτέλεση εντολών sql... 155 8.4.1 Εντολή δυναμικής SQL κλάση DBWorkForUser()... 158 8.4.2 Εντολή PreparedStatement κλάση DBWorkForLesson()... 160 8.5 Πλαίσια διαλόγου... 162 12

Περιεχόμενα 8.6 Διαγραφή εγγραφής αλυσιδωτή διαγραφή... 164 8.7 Αναζήτηση δεδομένων από τη βάση... 171 8.7.1 Το αντικείμενο result set... 172 8.7.2 Χρήση του result set... 173 8.8 Τιμές πίνακα σε οθόνη μονής εγγραφής... 176 8.9 Τιμές πίνακα σε οθόνη πολλών εγγραφών... 176 8.9.1 Πίνακες στην Java και Table Model... 176 8.9.2 TableModel σε σύνθετο πλαίσιο (JComboBox)... 182 8.9.3 Τιμές πίνακα σε σύνθετο πλαίσιο... 184 8.9.4 Διαβίβαση παραμέτρων, εμφάνιση πεδίων κριτηρίων... 186 9. Χειρισμός των ραδιοπλήκτρων... 190 10. Χειρισμός εξωτερικών αρχείων... 192 11. Ενδεικτικές εργασίες... 194 12. Αποτελέσματα και συμπεράσματα... 195 Κεφάλαιο 3: Μικροϋπηρεσιες Java Διακομιστες Ιστού... 197 1. Μικροϋπηρεσίες Java... 199 1.1 Τι είναι... 199 1.2 Η διεπαφή προγραμματισμού μικροϋπηρεσίας... 200 1.3 Λειτουργία της μικροϋπηρεσίας... 201 1.4 Δομή μιας μικροϋπηρεσίας... 204 1.5 Κλήση μικροϋπηρεσίας... 206 1.5.1 Δημιουργία αρχείου HTML με FrontPage... 206 2. Διακομιστής Ιστού... 208 2.1 Τι είναι... 209 2.2 Επικοινωνία Διακομιστή Ιστού και πελάτη... 211 2.2.1 Προγράμματα πύλης... 211 2.2.2 Σύγκριση του CGI και των μικροϋπηρεσιών... 212 2.2.3 Θύρα... 213 2.2.4 Παραδείγματα Διακομιστών Ιστού... 214 2.3 Γενικές προδιαγραφές Διακομιστών Ιστού... 215 2.3.1 Εγκατάσταση Διακομιστή Ιστού... 216 2.3.2 Έλεγχος καλής εγκατάστασης του διακομιστή... 221 2.3.3 Ρυθμίσεις/ενσωμάτωση δυνατοτήτων σε Διακομιστές Ιστού... 223 2.3.4 Υπηρεσίες και δυνατότητες των Διακομιστών Ιστού... 237 2.4.5 Εγκατάσταση εφαρμογών σε Διακομιστές Ιστού... 243 3. Η μικροϋπηρεσία μεταφοράς αρχείων... 249 3.1 Παράμετροι σε μικροϋπηρεσίες... 249 3.1.1 JServ module Παράδειγμα zone.properties... 249 3.1.2 Tomcat Αρχείο context.xml... 250 3.1.3 Tomcat Αρχείο web.xml... 250 3.2 Ο κώδικας της μικροϋπηρεσίας... 252 13

Java Προχωρημένες τεχνικές 4. Περιπτωσιολογία: Savant Web Server... 254 5. Αποστολή αρχείων: CallServer... 257 Συμπεράσματα...260 Βιβλιογραφία...263 14

Η βάση δεδομένων 1. Περιγραφή της εφαρμογής 2. Βάσεις δεδομένων 3. MySQL

Java Προχωρημένες τεχνικές Στο κεφάλαιο αυτό θα παρουσιάσουμε τη δημιουργία μιας βάσης δεδομένων που θα υποστηρίζει τα δεδομένα μιας εφαρμογής πελάτη-διακομιστή (clientserver). Η εφαρμογή αυτή έχει σκοπό να χρησιμοποιηθεί από τους σπουδαστές μιας σχολής, οι οποίοι για να περάσουν ένα μάθημα πρέπει να εκπονήσουν διάφορες εργασίες. Η εφαρμογή θα αναλάβει τη δημιουργία ομάδων, την καταχώρηση σπουδαστών στις ομάδες και τη μεταφορά της εργασίας της ομάδας, μέσω του ιστού, στο διακομιστή του καθηγητή. Θα δώσει τη διεπιφάνεια (interface) με την οποία οι σπουδαστές: Θα καταχωρούνται μόνοι τους στο σύστημα με έναν κωδικό σύνδεσης (login/password). Θα δημιουργούν μια ομάδα ανά μάθημα και ανά εργασία. Θα καταχωρούν τα μέλη για την ομάδα αυτή. Θα αποστέλλουν εργασίες προς βαθμολόγηση, για κάθε ομάδα. Ο καθηγητής θα βαθμολογήσει την εργασία της ομάδας και ο βαθμός θα αποτελεί την κοινή βαθμολογία του κάθε μέλους της ομάδας. Για την υλοποίηση των παραπάνω, θα επεξηγήσουμε στο κεφάλαιο αυτό τον τρόπο εγκατάστασης μιας βάσης δεδομένων σε MySQL και θα δημιουργήσουμε τη βάση δεδομένων, η οποία θα υποστηρίζει τους πίνακες που θα τηρούν τα στοιχεία των σπουδαστών. Θα δείξουμε, επίσης, τις απαραίτητες ρυθμίσεις ώ- στε η βάση να είναι προσπελάσιμη μέσω του ιστού, καθώς και τις ρυθμίσεις που πρέπει να γίνουν για να είναι ασφαλής η χρήση της. 16

Κεφάλαιο 1: Η βάση δεδομένων 1. Περιγραφή της εφαρμογής Για την υλοποίηση των δυνατοτήτων της εφαρμογής θα δημιουργήσουμε μέσα στη βάση δεδομένων διάφορους πίνακες. Ο χειρισμός κάποιων από τους πίνακες αυτούς θα γίνεται μόνο από τους σπουδαστές (π.χ. για τον κωδικό και το συνθηματικό (password) του πίνακα χρηστών, τις ομάδες και τα μέλη της κάθε ομάδας), κάποιων άλλων μόνο από τον καθηγητή (π.χ. για τα μαθήματα και τη δημιουργία εργασιών ανά μάθημα). Στους πίνακες των σπουδαστών υπάρχουν όμως και πεδία τα οποία διαχειρίζεται μόνο ο καθηγητής (όπως π.χ. η βαθμολογία της ομάδας ή αν επιτρέπεται πλέον να αποστέλλονται ή όχι άλλες εργασίες ή να εγγράφονται νέα μέλη σε ομάδες) και τα οποία επηρεάζουν τη συμπεριφορά των σπουδαστών. Ανάμεσα στα δύο μέρη υπάρχει επικοινωνία και αλληλεπίδραση, η οποία υλοποιείται με διαμοιρασμό των δεδομένων και διαφορετικό περιβάλλον διαχείρισης από κάθε πλευρά. Στην παράγραφο αυτή θα δούμε ποιοι είναι οι πίνακες τους οποίους πρέπει να διαχειρίζεται η εφαρμογή, ποιες οι πληροφορίες που πρέπει να καταχωρούνται μέσα σε αυτούς και ποιες οι μεταξύ τους συσχετίσεις σύμφωνα με τις παραπάνω απαιτήσεις. Διευκρινίζουμε ότι η εφαρμογή δεν σκοπεύει να αποτελέσει μηχανογράφηση της Γραμματείας μιας σχολής, αλλά να δώσει λύση σε συγκεκριμένο πρόβλημα. Με αυτές τις προδιαγραφές όμως γίνονται φανερές οι δυνατές επεκτάσεις της. Οι πίνακες που χρειάζονται για την αποθήκευση των πληροφοριών της εφαρμογής και οι προδιαγραφές τους είναι: Ο πίνακας Users ( Χρήστες ): Χρησιμοποιείται για την εγγραφή (registration) του κάθε ενδιαφερόμενου στο σύστημα. Θα πρέπει να περιλαμβάνει τουλάχιστον τον κωδικό εισαγωγής ενός χρήστη στο σύστημα καθώς και το συνθηματικό του (password). Σε αυτόν μπορούμε να καταχωρούμε και άλλα στοιχεία, όπως ονοματεπώνυμο, διεύθυνση, ενδιαφέροντα, e-mail κ.λπ. Κάθε όνομα χρήστη (user name) πρέπει να είναι σαφώς μοναδικό για όλη την εφαρμογή. Θεωρώντας ότι δεν πρέπει να εγγράφεται ο κάθε ένας σε αυτήν την εφαρμογή, χρησιμοποιούμε μια ασυνήθιστη αντιμετώπιση για την καταχώρηση των στοιχείων του νέου χρήστη: κατά τη δημιουργία του Λεξικού Δεδομένων (data 17

Java Προχωρημένες τεχνικές dictionary) με τους πίνακες, δημιουργούμε μέσα στον πίνακα Users μια εγγραφή που αναπαριστά έναν εικονικό χρήστη (dummy user) ο οποίος έχει κωδικό πρόσβασης/συνθηματικό KTDB/KTDB. Ο καθηγητής μπορεί να ενημερώσει τους σπουδαστές του για την ιδιαιτερότητα αυτή. Με την έναρξη της ε- φαρμογής, θα εμφανίζεται μια οθόνη, στην οποία ο νέος χρήστης που θα θέλει να εγγραφεί θα πρέπει να χρησιμοποιήσει τους κωδικούς αυτού του εικονικού χρήστη για να εισαχθεί και κατόπιν θα πρέπει να ορίσει τους δικούς του προσωπικούς κωδικούς. Φυσικά, το συγκεκριμένο όνομα χρήστη πρέπει να προφυλάσσεται από διαγραφή και τροποποίηση. Η συνήθης πρακτική σε ανάλογες περιπτώσεις είναι να χρησιμοποιείται ένα κουμπί, π.χ. Εγγραφή, στην αρχική οθόνη της εφαρμογής, με το πάτημα του οποίου εμφανίζεται η οθόνη που περιέχει τα στοιχεία που πρέπει να συμπληρώσει ο χρήστης για να καταχωρηθεί. Ο πίνακας Lessons ( Μαθήματα ): Χρησιμοποιείται από τον καθηγητή για την καταχώρηση των μαθημάτων στα οποία περιμένει εργασίες. Τα πεδία του πίνακα πρέπει να περιγράφουν το μάθημα: ονομασία μαθήματος, καθηγητής που το διδάσκει, έτος διδασκλίας κ.λπ. Εφόσον τα μαθήματα εξαρτώνται από το έτος, πρέπει σε κάθε σχολική χρονιά να καταχωρούνται τα μαθήματα του συγκεκριμένου έτους. Ωστόσο, πρέπει να υπάρχουν και τα μαθήματα των προηγούμενων ετών για ιστορικούς λόγους: π.χ. εξαγωγή συμπερασμάτων για την βαθμολογική εξέλιξη ενός σπουδαστή, παρακολούθηση της επιτυχίας των σπουδαστών ανά μάθημα κ.λπ. Ακόμα και αν το μάθημα επαναλαμβάνεται από χρονιά σε χρονιά, σε κάθε χρονιά ένα πρέπει να είναι το τρέχον μάθημα για το οποίο οι σπουδαστές θα έχουν την δυνατότητα να δημιουργούν ομάδες και να στέλνουν τις εργασίες τους. Για να υλοποιηθεί αυτή η προδιαγραφή, δημιουργείται στον πίνακα Lessons το πεδίο ActiveLesson ( ΕνεργόΜάθημα ), του οποίου η τιμή είναι 1 μόνο για τα μαθήματα της τρέχουσας χρονιάς. Το πεδίο αυτό γίνεται 0 για όλα τα μαθήματα των προηγούμενων ετών στα οποία δεν ε- πιτρέπεται πλέον να καταχωρούνται ή να διαγράφονται ομάδες και να αποστέλλονται εργασίες. Το πεδίο ActiveLesson ελέγχεται μόνο από τον καθηγητή του μαθήματος. Ο πίνακας Teams ( Ομάδες ): Αποθηκεύει στοιχεία από τις ομάδες των σπουδαστών. Είναι πιθανό σε κάθε μάθημα να δημιουργηθούν ασκήσεις ή α- κόμα σε κάθε μάθημα να δοθούν πολλές ασκήσεις, οι οποίες μπορεί και να λειτουργούν παράλληλα. Για να είναι αυτό δυνατόν, δημιουργείται μια ομάδα για 18

Κεφάλαιο 1: Η βάση δεδομένων κάθε μάθημα και για κάθε εργασία, συνεπώς τα πεδία του πίνακα πρέπει να καθορίζουν την ομάδα, το μάθημα για το οποίο συστάθηκε, καθώς και την ά- σκηση. Αυτό έχει σαν συνέπεια στην επόμενη εργασία, ακόμα και του ίδιου μαθήματος, να απαιτείται η σύσταση άλλης ομάδας. Μολονότι αυτό σημαίνει επιπλέον κόπο για τους σπουδαστές, μας επιτρέπει να ανεξαρτητοποιούμε τα μέλη από την ομάδα: οι χρήστες επιτρέπεται να αλλάξουν από άσκηση σε άσκηση ή να συμμετέχουν ταυτόχρονα σε δύο ανεξάρτητες ομάδες για δύο παράλληλες ασκήσεις, ακόμα και στο ίδιο μάθημα. Επίσης έχουμε τη δυνατότητα να τηρούμε ιστορικά στοιχεία για τις ομάδες και τα μέλη τους ανά μάθημα, με αποτέλεσμα να είναι πολύ εύκολη η τελική συνολική βαθμολογία των σπουδαστών. Για κάθε εργασία οι σπουδαστές έχουν μια προθεσμία μέχρι την οποία μπορούν να στέλνουν αρχεία. Για να υλοποιηθεί αυτή η απαίτηση, δημιουργείται στον πίνακα το πεδίο CanBeAffected ( ΜπορείΝαΕπηρεαστεί ), το οποίο χειρίζεται μόνο ο καθηγητής, μετατρέποντας την τιμή του σε 1 όταν αποφασίσει ότι έληξε η προθεσμία δημιουργίας ομάδων και υποβολής εργασιών. Από τότε και μετά, οι σπουδαστές δεν μπορούν να αλλάζουν ή να διαγράφουν τις ομάδες και τις εργασίες των ομάδων. Ο πίνακας αυτός είναι επίσης ενημερωμένος με το username του χρήστη που καταχώρησε την ομάδα. Ο πίνακας StudentsPerTeam ( ΣπουδαστέςΑνάΟμάδα ): Τα πεδία του περιγράφουν τα μέλη της ομάδας. Οι εγγραφές του πρέπει να συνδεθούν με τον πίνακα Teams συνεπώς είναι εξαρτημένος (detail) από αυτόν. Ως μέλη στις ομάδες εργασίας επιτρέπεται να συμμετέχουν μόνο εγγεγραμμένοι σπουδαστές άρα, πριν επιτραπεί η καταχώρηση ενός μέλους, πρέπει να ελέγχεται αν είναι εγγεγραμμένος χρήστης συνεπώς πρέπει να γίνει σύνδεση και με τον πίνακα Users. Αυτό σημαίνει ότι όλοι οι σπουδαστές που θα συμμετέχουν σε ομάδες πρέπει πρώτα να εγγραφούν στο σύστημα. Επίσης, για κάθε σπουδαστή επιτρέπεται μία μόνο συμμετοχή σε κάθε άσκηση. Για να γίνει αυτό, ένα μοναδικό χαρακτηριστικό του σπουδαστή, π.χ. ο Αριθμός Μητρώου του, θα μπορεί να χρησιμοποιηθεί μία μόνο φορά σε κάθε άσκηση. Ακόμη, ένα μέλος ορίζεται αρχηγός για την περίπτωση που πρέπει να εκπροσωπηθεί η ομάδα. Ο πίνακας ExternalFiles ( ΕξωτερικάΑρχεία ): Ο πίνακας αποθηκεύει το όνομα του αρχείου και τον φάκελο αποθήκευσης των εργασιών που απο- 19

Java Προχωρημένες τεχνικές στέλλουν οι σπουδαστές. Αποφασίζουμε ότι οι σπουδαστές μπορούν να στείλουν περισσότερα από ένα αρχεία για την ίδια εργασία π.χ. για την περίπτωση που έχουν διασπάσει (με ένα εργαλείο διαίρεσης split) την εργασία σε περισσότερα του ενός αρχεία για να μεταφερθεί πιο γρήγορα. Και αυτός ο πίνακας αποτελεί εξαρτημένο πίνακα του Teams. Για τη συμπεριφορά των πινάκων καθορίζoυμε ότι: Όταν ο σπουδαστής διαγράφει μια εγγραφή από τον πίνακα Teams πρέπει να διαγράφονται ταυτόχρονα τα μέλη της ομάδας (από τον πίνακα StudentsPerTeam) και οι εργασίες τους (από τον πίνακα ExternalFiles). Εφόσον ένας σπουδαστής έχει καταχωρηθεί ως χρήστης του συστήματος και έχει εγγραφεί σε ομάδες δεν θα μπορεί πλέον να διαγραφεί. Θα πρέπει πρώτα να διαγραφεί από τις ομάδες εφόσον επιτρέπεται ακόμα από το πεδίο CanBeAffected του πίνακα Teams και μετά να διαγραφεί ως χρήστης από το σύστημα. Από το σχεδιασμό των πινάκων με αυτόν τον τρόπο μπορούμε να εξαγάγουμε συμπεράσματα, όπως: Ποιος είναι ο μέσος όρος βαθμολογίας των σπουδαστών ανά μάθημα ή ανεξαρτήτως μαθήματος. Ποια είναι η συνολική απόδοση των σπουδαστών ανά μάθημα στη διάρκεια των ετών. Σε ποιες ομάδες συμμετείχαν οι σπουδαστές κατά την εκπόνηση των εργασιών. Ποια είναι τα μαθήματα με τη μεγαλύτερη βαθμολογική επιτυχία κ.λπ. 2. Βάσεις δεδομένων Στην παράγραφο αυτή, και πριν τη δημιουργία των πινάκων της εφαρμογής, θα αναφερθούμε στις τεχνικές βάσεων δεδομένων τις οποίες θα χρησιμοποιήσουμε στην κατασκευή των πινάκων, και θα αναπτύξουμε έννοιες όπως αλυσιδωτή και απαγορευμένη διαγραφή (cascade και restrict delete), χειρισμός ε- ξαρτημένων (detail) εγγραφών ως προς την ενημέρωση και διαγραφή τους, 20

Κεφάλαιο 1: Η βάση δεδομένων τεχνικές χρησιμοποίησης εναλλακτικών κλειδιών και ευριστικές (heuristic) τεχνικές δημιουργίας δεικτών. Κατόπιν θα παρουσιάσουμε τον τρόπο εγκατάστασης, τη ρύθμιση και τον έλεγχο της ασφάλειας του συστήματος διαχείρισης βάσεων δεδομένων που θα τους υποστηρίξει, της MySQL. Θα παρουσιάσουμε επίσης και άλλα προϊόντα όπως τα phpmyadmin και MySQLControlCenter, τα οποία διαθέτουν διασύνδεση γραφικών με την οποία μπορούμε να δημιουργήσουμε πίνακες και χρήστες στην MySQL, να ελέγξουμε την πρόσβαση σε αυτήν, και να ρυθμίσουμε μεταβλητές της. Τέλος, θα κατασκευάσουμε και θα τεκμηριώσουμε τους πίνακες της εφαρμογής. 2.1 Βασικές έννοιες Η SQL είναι η γλώσσα δημιουργίας και διαχείρισης βάσεων δεδομένων και των πινάκων τους καθώς και χειρισμού των δεδομένων που καταχωρούνται σε αυτούς. Εντολές της, όπως οι create table και create index είναι δυνατό να δημιουργούνται μέσα από περιβάλλοντα γραφικών και για τις ανάγκες του παρόντος βιβλίου θεωρούνται γνωστές. Θα αναφέρουμε, ωστόσο, μερικούς ορισμούς που αφορούν τις βάσεις δεδομένων και θα φανούν χρήσιμοι στην παρακάτω μελέτη. Master = κύριος πίνακας. Οι εγγραφές του δεν εξαρτώνται από εγγραφές άλλου πίνακα. Στην περίπτωσή μας, οι πίνακες Users και Lessons είναι κύριοι πίνακες. Detail = εξαρτημένος ή δευτερεύων πίνακας. Παρέχει πρόσθετες πληροφορίες για τον κύριο πίνακα κάποιες εγγραφές του εξαρτώνται, μέσω ενός ή περισσότερων πεδίων, από μία εγγραφή του κύριου. Τουλάχιστον ένα πεδίο της κάθε εγγραφής του περιέχει την ίδια τιμή με αντίστοιχο πεδίο του πίνακα από τον οποίο εξαρτάται. Παράδειγμα: οι πίνακες StudentsPerTeam και External- Files αποτελούν δευτερεύοντες πίνακες του πίνακα Teams. Foreign = ξένο πεδίο. Όταν ένα πεδίο ενός πίνακα παίρνει υποχρεωτικά τιμές από ένα πεδίο ενός άλλου πίνακα, τότε το πεδίο στο δεύτερο πίνακα αποτελεί το ξένο πεδίο (foreign) για το πεδίο του πρώτου. Στην περίπτωση αυ- 21

Java Προχωρημένες τεχνικές τή, οι τιμές των πεδίων του πρώτου πίνακα είναι υποσύνολο του δεύτερου. Παράδειγμα αποτελεί το πεδίο του πίνακα StudentsPerTeam το οποίο παίρνει τιμές υποχρεωτικά από πεδίο του πίνακα Users, με το σκεπτικό ότι δεν μπορεί κάποιος να γίνει μέλος ομάδας αν δεν είναι χρήστης του συστήματος ωστόσο δεν είναι υποχρεωτικό όλοι όσοι έχουν εγγραφεί στο σύστημα να συμμετέχουν και σε ομάδες. SQL statement = πρόταση (έγκυρη) της SQL (π.χ. create database, create table, grant, select, delete, update, insert) Query = ερώτημα στη βάση (πρόταση SQL τύπου select) Delete = διαγραφή εγγραφής (πρόταση SQL τύπου delete) Update = ενημέρωση εγγραφής (πρόταση SQL τύπου update) Insert = καταχώρηση εγγραφής (πρόταση SQL τύπου insert) Cascade delete = αλυσιδωτή διαγραφή. Διαγραφή εγγραφών στον εξαρτημένο πίνακα, η οποία ενεργοποιείται όταν διαγραφεί η σχετική εγγραφή στον κύριο πίνακα. Delete restrict = απαγόρευση διαγραφής. Απαγόρευση διαγραφής μιας εγγραφής στον κύριο πίνακα έχουμε όταν σε έναν εξαρτημένο πίνακά του υ- πάρχουν εγγραφές που εξαρτώνται από την συγκεκριμένη εγγραφή. Auto_increment = Αυτόματη αύξηση. Αριθμητικό πεδίο πίνακα που παίρνει διαδοχικές αριθμητικές τιμές. Η διαχείρισή του γίνεται από τη βάση δεδομένων. Οι τιμές των πεδίων auto_increment είναι μη αναπληρούμενες : διαγραφή μιας εγγραφής με πεδίο auto_increment αφήνει πάντα τον αριθμό εκείνης της εγγραφής κενό. Συνεπώς πρέπει το πεδίο που είναι auto_increment να είναι "αρκετά" μεγάλο. Primary key = πρωτεύον κλειδί (της εγγραφής). Είναι το πεδίο (ή ο συνδυασμός πεδίων) που μπορεί, μόνο του και με μοναδικό τρόπο, να ανακαλέσει όλα τα άλλα πεδία της εγγραφής. Συνεπώς, η τιμή των πεδίων κάθε πρωτεύοντος κλειδιού υπάρχει μία μόνο φορά μέσα σε έναν πίνακα. Συνήθως ένα πεδίο auto_increment είναι μοναδικό και μπορεί κάλλιστα να αποτελέσει πρωτεύον κλειδί της εγγραφής. 22

Κεφάλαιο 1: Η βάση δεδομένων Alternative key = εναλλακτικό κλειδί της εγγραφής. Είναι το πεδίο ή συνδυασμός πεδίων που μπορεί μεν να χαρακτηρίσει μονοσήμαντα μια εγγραφή, αλλά για διάφορους λόγους δεν έχει επιλεγεί ως πρωτεύον κλειδί. Index = δείκτης (προς ένα πεδίο ή συνδυασμούς πεδίων). Είναι ένας μηχανισμός που επιταχύνει την αναζήτηση εγγραφών. Συνήθως, ο δείκτης υλοποιείται με ένα επιπλέον αρχείο, το οποίο χρησιμοποιεί μεθόδους ταξινόμησης για να δώσει γρήγορη πρόσβαση στις εγγραφές του πίνακα. Ο τρόπος δημιουργίας και συντήρησης των δεικτών εξαρτάται από το σύστημα διαχείρισης βάσεων δεδομένων. Ανάλογα με το σύστημα διαχείρισης βάσεων δεδομένων, υπάρχουν συνήθως δείκτες τριών ειδών: Δείκτης πρωτεύοντος κλειδιού (primary key index): δημιουργείται πάνω στα πεδία του πρωτεύοντος κλειδιού και εξασφαλίζει μοναδικότητα και γρήγορη αναζήτηση. Μοναδικός δείκτης (unique key index): δημιουργείται στα πεδία εναλλακτικού κλειδιού. Η δημιουργία δείκτη μοναδικού τύπου σε έναν πίνακα εξασφαλίζει ότι οι τιμές των πεδίων του πίνακα πάνω στα οποία εφαρμόζεται ο δείκτης αυτός θα είναι μοναδικές. Η συνέπεια είναι ότι δεν είναι δυνατή η εκ των υστέρων προσθήκη μοναδικού δείκτη σε πεδία ενός πίνακα οι τιμές των οποίων δεν είναι μοναδικές. Δείκτης κλειδιού (index key): εφαρμόζεται πάνω σε πεδία, συνήθως κειμένου, απλώς και μόνο για να επιταχύνει την αναζήτησή τους. Orphans = ορφανές (εγγραφές). Εγγραφές του εξαρτημένου πίνακα που έχουν χάσει τη σύνδεσή τους με τον κύριο πίνακα. Privilege = δικαίωμα. Το δικαίωμα που έχει ένας χρήστης πάνω στη βάση δεδομένων τόσο στα δεδομένα, όσο και στους πίνακες. Ενδεχόμενα δικαιώματα: εκτέλεσης εντολών select, delete, insert, δυνατότητες drop, create πάνω στους πίνακες (tables) ή drop, create των ευρετηρίων (indexes), δυνατότητες κλεισίματος (shutdown) βάσης δεδομένων κ.α. Grant = εκχώρηση. Εντολή με την οποία εκχωρούνται στο χρήστη δικαιώματα πάνω σε πίνακες της βάσης δεδομένων. Ένα από τα δικαιώματα μπορεί να είναι η δυνατότητα να εκχωρεί αυτός τα δικαιώματά του και σε άλλους χρήστες. 23

Java Προχωρημένες τεχνικές 2.2 Χειρισμός κύριων και εξαρτημένων εγγραφών Σύμφωνα με τις αρχές των βάσεων δεδομένων, όταν για έναν κύριο πίνακα (master) υπάρχει ένας εξαρτημένος (detail), πεδία του οποίου συνδέονται ή και ενημερώνονται από τιμές πεδίων του κύριου, αυτή η σύνδεση ανάμεσά τους δεν πρέπει να καταστραφεί. Αν σβηστούν εγγραφές του κύριου πίνακα, πρέπει να σβηστούν και οι σχετιζόμενες εγγραφές του εξαρτημένου. Όμοια, δεν πρέπει να επιτρέπεται η αλλαγή πεδίων τιμών στον κύριο πίνακα εφόσον ο εξαρτημένος έχει εγγραφές που εξαρτώνται από τις τιμές αυτές. Οι εγγραφές του εξαρτημένου πίνακα που δεν έχουν σύνδεση με εγγραφές του κύριου λέγονται ορφανές (orphans). Η βάση δεδομένων που έχει ορφανές εγγραφές λέγεται ασυνεπής (inconsistent). Ποτέ δεν πρέπει να μένουν ορφανές εγγραφές σε ε- ξαρτημένους πίνακες ούτε όμως και να διαγράφονται ορφανές εγγραφές χωρίς να ενημερώνεται ο χρήστης για τις συνέπειες της διαγραφής. Ο λόγος για τον οποίο δεν πρέπει να μένουν ορφανές εγγραφές είναι ότι η εκ νέου χρήση κάποιων τιμών στα πεδία-κλειδιά μπορεί να συνδέσει σε μια κύρια εγγραφή και τέτοιες αποκομμένες και ξεχασμένες ορφανές εγγραφές, αλλοιώνοντας τα πραγματικά δεδομένα. Ο λόγος για τον οποίο δεν πρέπει να επιτρέπεται η αυθόρμητη διαγραφή στοιχείων είναι ότι μια άστοχη απάντηση σε μια ερώτηση του τύπου Να διαγραφεί η εγγραφή; μπορεί να καταστρέψει τεράστια ποσότητα καταχωρήσεων. (Φανταστείτε μια εφαρμογή διαχείρισης βάσεων δεδομένων η οποία, παίρνοντας το πράσινο φως για διαγραφή σε έναν πίνακα Προμηθευτές, θα καταστρέψει και τα Προϊόντα αυτού του προμηθευτή, και δεκάδες Τιμολόγια πολλών ετών!). Από τον προγραμματιστή που αναπτύσσει μια εφαρμογή διαχείρισης βάσεων δεδομένων απαιτείται να διατηρήσει τη βάση συνεπή (consistent). Για να το επιτύχει αυτό, ο προγραμματιστής πρέπει να ελέγχει αν υπάρχουν τιμές στους εξαρτημένους πίνακες όταν πρόκειται να σβήσει εγγραφές από τον κύριο. Μετά τον έλεγχο, έχει τις εξής επιλογές: Επιλογή 1η: μπορεί να απαγορεύει τη διαγραφή της κύριας εγγραφής, ώσπου να διαγραφούν όλες οι επιμέρους εγγραφές όλων των εξαρτημέ- 24

Κεφάλαιο 1: Η βάση δεδομένων νων πινάκων. Σε αυτή την περίπτωση, η διαγραφή των επιμέρους εγγραφών αφήνεται σε ενέργειες του χρήστη, ο οποίος πρέπει να ανατρέξει στους εξαρτημένους πίνακες και να τις διαγράψει όλες, μία-μία, εσκεμμένα και με δική του ευθύνη. Στη συνέχεια, ελευθερωμένος από τις εγγραφές αυτές, ο κύριος πίνακας θα επιτρέπει τη διαγραφή και της δικής του εγγραφής. Η λύση αυτή θα εφαρμοστεί στον πίνακα Users και στον εξαρτημένο του, Teams. Η λογική είναι ότι με τον πίνακα Users συσχετίζονται όλα τα υπόλοιπα δεδομένα της εφαρμογής: ο σπουδαστής δημιουργεί μια εγγραφή και χρησιμοποιεί τον ίδιο κωδικό για να στείλει για κάθε μία από τις σχολικές του χρονιές, διάφορες εργασίες για πλήθος μαθημάτων. Άρα, όλο αυτό το ιστορικό πρέπει να προστατευτεί. Επιλογή 2η: μπορεί να ενημερώνει τον χρήστη μέσα από την εφαρμογή του για την ύπαρξη των επιμέρους εγγραφών και να τον ρωτάει αν θέλει να διαγραφούν. Σε θετική απάντηση, να φροντίζει ώστε ο κώδικας του προγράμματος να διαγράφει αυτόματα τις αντίστοιχες εγγραφές όλων των ε- ξαρτημένων πινάκων λίγο πριν τη διαγραφή της κύριας εγγραφής. Κατόπιν θα σβήνει και την κύρια εγγραφή. Η λύση αυτή θα εφαρμοστεί στον χειρισμό του πίνακα Teams και των εγγραφών των εξαρτημένων πινάκων του, StudentsPerTeam και ExternalFiles. Το ποια από τις δύο επιλογές χειρισμού των εξαρτημένων εγγραφών θα εφαρμοστεί κρίνεται και εξαρτάται ανά περίπτωση. Παράγοντες που βοηθούν τον προγραμματιστή να αποφασίσει πώς θα χειριστεί την κάθε περίπτωση είναι το μέγεθος και το πλήθος των εγγραφών. Παράδειγμα, αν οι εξαρτημένες εγγραφές είναι σημαντικές (π.χ. πληροφορίες οικονομικού τύπου) ή μεγάλες σε μέγεθος (και συνεπώς απαιτούν πολύ κόπο για να καταχωρηθούν) και σε πλήθος, τότε αποφεύγεται η διαγραφή τους με πρωτοβουλία της εφαρμογής εκτός αν έχει ζητηθεί διαφορετικά από το χρήστη της εφαρμογής. Μέθοδοι αυτόματης διαγραφής Για την υλοποίηση της αυτόματης διαγραφής των εξαρτημένων εγγραφών μέσα από την εφαρμογή, ο προγραμματιστής έχει δύο δυνατότητες. Ωστόσο πρέπει πάντα, και στις δύο περιπτώσεις, να ενημερώνει τον χρήστη και να τον ρωτάει 25