4.2. Η PHP και η MySQL...55

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "4.2. Η PHP και η MySQL...55"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗ ΚΑΙ ΕΠΕΞΕΡΓΑΣΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ PhytoKaryon: Μία κυτταρολογική βάση δεδοµένων των φυτών της Ευρώπης και της Μεσογείου Αξιοποίηση και παρουσίαση δεδοµένων ΙΙ Μεταπτυχιακός Φοιτητής: Αθανάσιος Σταυρόπουλος Επιβλέπουσα Καθηγήτρια: Γ. Καµάρη ΠΑΤΡΑ ΟΚΤΩΒΡΙΟΣ 2009

2 1. ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΙΑ ΙΚΤΥΟΥ Γενικά για τα δίκτυα δικτύων υπολογιστών ίκτυα επικοινωνιών Τοπικά ίκτυα επικοινωνιών Μητροπολιτικά ίκτυα επικοινωνιών ίκτυα Ευρείας Περιοχής (WAN) Παγκόσµιος Ιστός Περιήγηση στον Παγκόσµιο Ιστό Σύνοψη Εισαγωγή στις Βάσεις εδοµένων Τα εδοµένα και οι Πληροφορίες Η Οργάνωση Αρχείων Προβλήµατα της Οργάνωσης Αρχείων Οι Βάσεις εδοµένων και τα Σ Β (DBMS) Η Αρχιτεκτονική των Σ Β Οι Οντότητες (Entities) Οι Ιδιότητες (Attributes) Τα Στιγµιότυπα (Snapshots) Το Πρωτεύον Κλειδί (Primary Key) Οι Συσχετίσεις (Relationships) Το Ιεραρχικό Μοντέλο Βάσεων εδοµένων Το ικτυωτό Μοντέλο Βάσεων εδοµένων Το Σχεσιακό Μοντέλο Βάσεων εδοµένων Τα Σχεσιακά Σ Β (RDBMS) Το Μοντέλο Οντοτήτων Συσχετίσεων Οι Οντότητες Οι Ιδιότητες (Χαρακτηριστικά) των Οντοτήτων Τα Κλειδιά Οι Συσχετίσεις Μεταξύ Οντοτήτων Οι ιµελείς Συσχετίσεις Το ιάγραµµα Οντοτήτων Συσχετίσεων Λογικός Σχεδιασµός µιας Βάσης εδοµένων Η Κανονικοποίηση Πλεονασµός εδοµένων και Ανωµαλίες Ενηµέρωσης Η ιαδικασία της Κανονικοποίησης Σύνοψη Βασικές Εννοιες γλώσσας HTML Οδηγία (Tag) Πώς κατασκευάζεται µια απλή Web σελίδα Επικεφαλίδες ιαχωριστικά Ετικέτες στυλ Λίστες Εικόνες Στοίχιση κειµένου Πίνακες Σύνοψη ηµιουργία Database-Driven Web Site µε Χρήση PHP και MySQL Η Ανάγκη για ένα Database-Driven Web Site Η PHP και η MySQL

3 4.3. Αν ο Web Host Παρέχει την PHP και την MySQL Σύνοψη θεµελιωδης ορολογια της συστηµατικησ βοτανικησ Συστήµατα κατάταξης ή ταξινοµικά συστήµατα Ταξινοµικές βαθµίδες. Η έννοια του είδους Ονοµατολογία Συνήθεις συντοµογραφίες της Συστηµατικής Βοτανικής Σύνδεση των στοιχείων µε την Βάση εδοµένων PhytoKaryon Οικογένειες (Families) Γένη (Genus) Είδος (Species) Σύνοψη Βαση δεδοµενων phytokaryon Περιγραφή των στοιχείων της Βάσης εδοµένων PhytoKaryon Η Microsoft Access εργαλείο σχεδιασµού της Βάσης εδοµένων PhytoKaryon Περιγραφή της Βάσης εδοµένων PhytoKaryon ιάγραµµα Μοντέλου Οντοτήτων Συσχετίσεων της PhytoKaryon Σύνοψη µεθοδολογια Microsoft Access Access to MySQL Converter WampServer Apache Server MySQL PHP Βασική Σύνταξη και Εντολές της PHP Μεταβλητές και Τελεστές Η Αλληλεπίδραση µε τον Χρήστη και οι Φόρµες Σελίδες Πολλαπλού Σκοπού (Multi-Purpose Pages) ηµοσίευση εδοµένων της MySQL στο Web ηµιουργία Σύνδεσης της MySQL µε την PHP Εκτέλεση SQL Ερωτηµάτων (Queries) µε την PHP Χειρισµός των Αποτελεσµάτων της Εντολής SELECT Βασικές Λειτουργικές έννοιες SESSION GET POST Σύνδεση µε την Βάση Μενού Επάνω Τµήµα Ιστοσελίδων εξιό τµήµα ιστοσελίδων Επίπεδα Χρηστών ιαχείριση Χρηστών (Edit Database) Οικογένειες Και Γένη δειγµάτων Είδη ειγµάτων Εισαγωγή νέας εγγραφής Σύνοψη Αξιοποίηση της Βάσης εδοµένων PhytoKaryon Αρχική Σελίδα Ιστοσελίδας

4 8.2. Μενού Επιλογών ιαδικασίες Εγγραφής και Αποσύνδεσης χρήστη Περιήγηση ενός χρήστη στην ιστοσελίδα της PhytoKaryon Ο απλός χρήστης Περίηγηση του απλού χρήστη στη βάση (Database) Επιλογή Family Index Επιλογή Genus Index Επιλογή Species Index Επιλογή Paper Index Επιλογή Geographic Index Συµπεράσµατα ΠΑΡΑΡΤΗΜΑ Α Τι Είναι η SQL Οι Πίνακες Βάσεων εδοµένων (Database Tables) Τα Ερωτήµατα της SQL (SQL Queries) Χειρισµός εδοµένων της SQL (Data Manipulation) Ορισµός εδοµένων της SQL (Data Definition) Η SQL και οι Ενεργές Σελίδες ιακοµιστή Η Εντολή Select της SQL Το Where Clause της SQL Η Συνθήκη LIKE Οι Λογικοί Τελεστές And και Or Ο Τελεστής Between... And Η Λέξη Κλειδί Distinct Η Λέξη Κλειδί Order By Ασκηση σε SQL Η Εντολή INSERT INTO Η Εντολή Update Η Εντολή Delete Οι Συναρτήσεις Count της SQL Οι Λέξεις Κλειδιά COUNT και DISTINCT Οι Συναρτήσεις της SQL Η Λέξη Κλειδί Group By Η Λέξη Κλειδί HAVING Τα Ψευδώνυµα (Aliases) Ενωση Πινάκων (Join) ηµιουργία Βάσης εδοµένων και Πίνακα ιαγραφή Βάσης εδοµένων και Πίνακα Η Εντολή Alter Table Βιβλιογραφία

5 ΠΡΟΛΟΓΟΣ Η παρούσα Πτυχιακή Εργασία εκπονήθηκε στα πλαίσια του ιατµηµατικού Μεταπτυχιακού Προγράµµατος Σπουδών «Ηλεκτρονική και Επεξεργασία της Πληροφορίας» των Τµηµάτων Φυσικής, Μηχανικών Η/Υ και Πληροφορικής, Βιολογίας και Ιατρικής του Πανεπιστηµίου Πατρών. Σε αυτό το σηµείο θα θέλαµε να εκφράσουµε τις θερµές ευχαριστίες µας στην υπεύθυνη καθηγήτρια Καµάρη Γεωργία για το αξιόλογο θέµα που µας εµπιστεύτηκε. Επίσης ευχαριστούµε πολύ τους διδάκτορες Μπαρέκα Πέπη και Γεώργιο Μήτσαινα για την αµέριστη συµπαράσταση, την προσφορά πολύτιµων γνώσεων και την καθοδήγηση τους καθ όλη τη διάρκεια αυτής της εργασίας. Τέλος θα ήθελα να ευχαριστήσω την οικογένεια µου για την αµέριστη συµπαράσταση και υποµονή της. Αθανάσιος Σταυρόπουλος Πάτρα, Οκτώβριος

6 1. ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΙΑ ΙΚΤΥΟΥ Στόχος της ενότητας αυτής είναι η εισαγωγή στις βασικές έννοιες σε ότι αφορά το διαδίκτυο. Ενδείκνυται για µία πρώτη επαφή του αναγνώστη µε το τοµέα της επιστήµης που ασχολείται µε τις βασικές έννοιες του διαδικτύου. Οι παράγραφοι που ακολουθούν εξηγούν ποια είναι τα θέµατα και πως οδήγησαν στην ανάπτυξη της δικτύου ικτύων και πως φτάσαµε στην έννοια του Internet Γενικά για τα δίκτυα δικτύων υπολογιστών Σε κάθε ένα από τους τρεις τελευταίους αιώνες επικράτησε µία µοναδική τεχνολογία. Ο 18 ος αιώνας ήταν η εποχή των µεγάλων µηχανικών συστηµάτων που συνόδευσαν τη βιοµηχανική επανάσταση. Ο 19ος αιώνας ήταν η εποχή της ατµοµηχανής. Στον 20ο αιώνα η τεχνολογία-κλειδί είναι η συλλογή, επεξεργασία και διανοµή της πληροφορίας. Έχουµε δει την εγκατάσταση τηλεφωνικών δικτύων σε όλη την υδρόγειο, την εφεύρεση του ραδιοφώνου και της τηλεόρασης, τη γέννηση και χωρίς προηγούµενο ανάπτυξη της βιοµηχανίας υπολογιστών και την εκτόξευση επικοινωνιακών δορυφόρων. Αν και η βιοµηχανία των υπολογιστών είναι νέα σε σύγκριση µε άλλες βιοµηχανίες (αυτοκινητοβιοµηχανία, αεροµεταφορές) οι υπολογιστές έχουν εξελιχθεί θεαµατικά σε σύντοµο διάστηµα. Κατά την διάρκεια των πρώτων δεκαετιών της ύπαρξής τους, τα υπολογιστικά συστήµατα ήταν συγκεντρωµένα σε µια µεγάλη αίθουσα. Η ιδέα ότι µέσα σε 20 χρόνια θα παράγονταν µαζικά σε εκατοµµύρια εξίσου ισχυροί υπολογιστές (µικρότεροι και από γραµµατόσηµο) ήταν καθαρά επιστηµονική φαντασία. Εξαιτίας της ραγδαίας τεχνολογικής προόδου οι περιοχές της συλλογής, µεταφοράς, αποθήκευσης και επεξεργασίας της πληροφορίας συγκλίνουν ταχύτατα και οι διαφορές τους εξαφανίζονται. Καθώς αναπτύσσεται η ικανότητά µας να συλλέγουµε, να επεξεργαζόµαστε και να διανέµουµε πληροφορίες η ανάγκη για περισσότερη προηγµένη επεξεργασία της πληροφορίας αναπτύσσεται ακόµα ταχύτερα. 6

7 Η σύγκλιση των δυο ανεξάρτητων-πριν από λίγα χρόνια- τεχνολογιών της πληροφορικής (των υπολογιστών) και των τηλεπικοινωνιών είχε σηµαντική επίδραση στον τρόπο µε τον οποίο οργανώνονται τα υπολογιστικά συστήµατα. Η ιδέα του υπολογιστικού κέντρου µε ένα µεγάλο υπολογιστή, όπου οι χρήστες φέρνουν την δουλειά τους για επεξεργασία είναι πλέον ξεπερασµένη. Σήµερα ένας µεγάλος αριθµός ξεχωριστών αλλά διασυνδεδεµένων υπολογιστών κάνουν την δουλειά. Τα συστήµατα αυτά αποκαλούνται δίκτυα υπολογιστών. Οι αλλαγές που λαµβάνουν χώρα έχουν δραµατική επίδραση στον τρόπο µε τον οποίο επικοινωνούν άτοµα και οργανισµοί. Η διοίκηση σε όλα τα επίπεδα, το εµπόριο και η οικονοµία, η φροντίδα της υγείας, η εκπαίδευση, είναι µεταξύ των πεδίων της ανθρώπινης δραστηριότητας που επηρεάζονται βαθιά από τις τεχνολογικές προόδους που συντελούνται σήµερα. Η ανάγκη για ανάπτυξη των δικτύων υπολογιστών δηµιουργείται για καθένα από τους παρακάτω λόγους: τη διαθεσιµότητα όλων των προγραµµάτων, του εξοπλισµού (π.χ. εκτυπωτές, δίσκοι αποθήκευσης) και προπάντων των δεδοµένων, σε οποιονδήποτε στο δίκτυο, ανεξάρτητα από τη φυσική θέση του πόρου (resource) και του χρήστη την παροχή υψηλής αξιοπιστίας (high reliability) των µηχανηµάτων και των ζεύξεών τους τη γρήγορη διανοµή δεδοµένων την εξοικονόµηση χρηµάτων. Οι µικροί υπολογιστές έχουν έναν πολύ καλύτερο λόγο κόστους προς απόδοση από τους µεγαλύτερους. Οι µεγάλοι υπολογιστές (main frames) είναι σχεδόν δέκα φορές ταχύτεροι από τους προσωπικούς υπολογιστές αλλά κοστίζουν φορές περισσότερο. Να σηµειωθεί επίσης ότι τα δίκτυα αλλάζουν τον τρόπο λειτουργίας της κοινωνίας µας καθώς: υπάρχουν πολλαπλοί τρόποι επικοινωνίας µεταξύ ανθρώπων ( , chat, news-groups κλπ.) 7

8 η διανοµή του περιεχοµένου γίνεται µε διάφορα µέσα και τρόπους (audio, video, news groups κτλ.) υπάρχουν πλέον online υπηρεσίες (ηλεκτρονική αγορά, ηλεκτρονική τακτοποίηση τραπεζικών λογαριασµών, ηλεκτρονική αναζήτηση ιατρικής πληροφορίας κλπ.) προκύπτουν νέα προβλήµατα, άγνωστα στο παρελθόν (προσωπικά δεδοµένα, ηλεκτρονικά πνευµατικά δικαιώµατα κλπ.) Στις παρακάτω παραγράφους θα δοθούν οι βασικές έννοιες που θα πρέπει να είναι σε θέση να γνωρίζει κάποιος προκειµένου να κατανοεί και να αντιλαµβάνεται έννοιες, όπως ίκτυα επικοινωνιών κ ιαδίκτυο ίκτυα επικοινωνιών Τα δίκτυα επικοινωνιών είναι διατάξεις από υλικό και λογισµικό, οι οποίες επιτρέπουν στους χρήστες την ανταλλαγή πληροφοριών. Οι πληροφορίες αυτές µπορεί να είναι φωνή, ήχοι, γραφικά, εικόνες, κείµενο ή δεδοµένα. Το πιο δηµοφιλές και ευρέως διαδεδοµένο δίκτυο επικοινωνιών είναι το τηλεφωνικό δίκτυο. Ένα δίκτυο υπολογιστών γραφείου είναι ένα δίκτυο επικοινωνιών, το οποίο χρησιµοποιείται από οργανισµούς, εταιρείες, νοσοκοµεία κλπ. για να συνδέει προσωπικούς υπολογιστές, ώστε να µπορούν να µοιράζονται προγράµµατα και δεδοµένα και για να συνδέει τους υπολογιστές αυτούς µε εκτυπωτές ή µε άλλα περιφερειακά π.χ. σχεδιογράφους (plotters). Τα δίκτυα υπολογιστών χρησιµοποιούνται επίσης σε εργοστάσια παραγωγής για να συνδέουν µηχανικά εργαλεία, ροµπότ και αισθητήρες (Σχήµα 1.1). 8

9 ίκτυο Η/Υ Σχήµα 1.1: Ένα απλό δίκτυο υπολογιστών Το ιαδίκτυο (Ιnternet) είναι ένα παγκόσµιο σύστηµα από αλληλοσυνδεόµενα δίκτυα δικτύων υπολογιστών, το οποίο επιτρέπει σε εκατοµµύρια χρήστες να ανταλλάσουν µηνύµατα, αρχεία καθώς και σήµατα video και ήχου(σχήµα 1.2). Το εγχείρηµα ξεκίνησε το 1969 από το Advanced Research Projects Agency (ARPA) που ανήκει στην κυβέρνηση των Η.Π.Α. και στην αρχική του µορφή είχε ονοµαστεί ARPANET. O στόχος ήταν η επικοινωνία και ανταλλαγή δεδοµένων µεταξύ των υπολογιστών διαφόρων ερευνητικών ιδρυµάτων της χώρας. Ένα σηµαντικό πλεονέκτηµα του αρχικού σχεδιασµού ήταν το γεγονός ότι επειδή η πληροφορία µπορούσε να ακολουθεί παραπάνω από µία διαδροµές, ακόµη και σε καταστροφή ενός τµήµατος του δικτύου, το δίκτυο θα εξακολουθούσε να λειτουργεί επιτυχώς. 9

10 ίκτυο Η/Υ ίκτυο Η/Υ ίκτυο Η/Υ ιαδίκτυο INTERNET Σχήµα 1.2: Το ιαδίκτυο (Internet) Παρόλο που όλα αυτά τα συστήµατα είναι δίκτυα επικοινωνιών, είναι αρκετά διαφορετικά ως προς την πληροφορία που µεταδίδουν και τον τρόπο µε τον οποίο χρησιµοποιούνται. Ωστόσο βασίζονται σε παρόµοιες αρχές λειτουργίας. Κάθε τέτοιο σύστηµα είναι σχεδιασµένο για την ανταλλαγή πληροφορίας µεταξύ χρηστών. Οι χρήστες είναι συνήθως άνθρωποι αλλά µπορούν επίσης να είναι προγράµµατα υπολογιστών ή συσκευές. Ο υπολογιστής στέλνει ψηφιοποιηµένες πληροφορίες (δηλ. σε bits). ηλαδή, για να µπορέσει ένας υπολογιστής να επικοινωνήσει µε το Internet ή µε έναν άλλον υπολογιστή µέσω των αναλογικών τηλεφωνικών γραµµών, είναι απαραίτητη η χρήση µιας συσκευής η οποία ονοµάζεται modem. Η λέξη modem προέρχεται από τις λέξεις Modulation και Demodulation (διαµόρφωση/αποδιαµόρφωση). Η µονάδα την οποία χρησιµοποιούµε για τη µέτρηση της ταχύτητας µετάδοσης και λήψης των δεδοµένων µέσω ενός modem είναι τα bit ανά δευτερόλεπτο (bits per second - bps). Όσο περισσότερα bit ανά δευτερόλεπτο έχει τη δυνατότητα να χειριστεί ένα modem, τόσο πιο γρήγορα µπορεί να στείλει και να λάβει δεδοµένα. Ένα τέτοιο δίκτυο υπολογιστών, φαίνεται στο παρακάτω σχήµα 1.3: 10

11 Modem Modem ιαδίκτυο Σχήµα 1.3: Σύνδεση Ηλεκτρονικών Υπολογιστών µέσω modem Κατηγορίες δικτύων επικοινωνιών Όπως λέχθηκε παραπάνω, το δίκτυο επικοινωνιών χρησιµοποιείται για να µπορούν οι χρήστες να ανταλλάζουν δεδοµένα, µηνύµατα και να µπορούν να χρησιµοποιούν κοινό εξοπλισµό, όπως εκτυπωτές, µόντεµ και άλλο υλικό. Ανάλογα µε την έκταση την οποία εξυπηρετούν τα δίκτυα επικοινωνιών χωρίζονται σε τρεις γενικές κατηγορίες: Τοπικά δίκτυα (LAN: Local Area Networks), Μητροπολιτικά δίκτυα (MAN: Metropolitan Area Networks), Ευρείας περιοχής δίκτυα (WAN: Wide Area Networks) (Σχήµα 1.4). Σχήµα 1.4: Γενικές κατηγορίες δικτύων 1.3. Τοπικά ίκτυα επικοινωνιών Ο όρος τοπικό δίκτυο περιγράφει ένα δίκτυο υπολογιστών. Οι υπολογιστές αυτοί βρίσκονται σε µικρή απόσταση µεταξύ τους (µέσα σε ένα 11

12 κτίριο ή γραφείο) και µπορούν να επικοινωνήσουν µε µεγάλες ταχύτητες (από 10 Mbit/sec µέχρι 100Mbit/sec). Τα βασικά στοιχεία ενός τοπικού δικτύου υπολογιστών είναι το φυσικό µέσο µετάδοσης της πληροφορίας (πχ. καλώδιο), η κάρτα δικτύου (NIC Network Interface Card), η οποία είναι υπεύθυνη για τη ροή των πληροφοριών ανάµεσα στον υπολογιστή και το δίκτυο, και τέλος το λογισµικό σύστηµα δικτύου, το οποίο είναι υπεύθυνο για τη σωστή µετάδοση πληροφοριών και τη παροχή διάφορων υπηρεσιών στους χρήστες. Τέλος για την σύνδεση περισσότερων των δυο υπολογιστών, χρειάζεται επιπλέον και ένας διανοµέας ή συγκεντρωτής καλωδίωσης (HUB). Παραδείγµατα τοπικών δικτύων φαίνονται στο παρακάτω σχήµα 1.5. Σχήµα 1.5: LAN διαφόρων συνδεσµολογιών 1.4. Μητροπολιτικά ίκτυα επικοινωνιών Τα µητροπολιτικά δίκτυα (MAN) είναι µια µεγαλύτερη εκδοχή ενός LAN. Μπορεί να καλύπτει οµάδα γειτονικών γραφείων ενός νοσοκοµείου. Μπορεί να υποστηρίζει δεδοµένα και φωνή και ίσως να σχετίζεται µε την καλωδιακή τηλεόραση. Περιορίζονται µέσα στα όρια µιας πόλης και µπορούν να καλύπτουν αποστάσεις από 1 έως και100 km. (Σχήµα 1.6) 12

13 Σχήµα 1.6: Μητροπολιτικό δίκτυο (MAN) 1.5. ίκτυα Ευρείας Περιοχής (WAN) Τα δίκτυα ευρείας περιοχής (WAN) µπορούν να απλώνονται πολλές φορές και σε διαφορετικές ηπείρους. Ένα δίκτυο ευρείας περιοχής µπορεί να απαρτίζεται από υπολογιστές και τοπικά δίκτυα που βρίσκονται διαφορετικές πόλεις ή ακόµα και σε διαφορετικές χώρες. Τα ίκτυα Ευρείας Περιοχής χρησιµοποιούν καλώδια υψηλής ταχύτητας, οπτικές ίνες, και δορυφόρους για τη µεταφορά των δεδοµένων και των αρχείων. Τα δίκτυα ευρείας περιοχής χρησιµοποιούνται συνήθως από µεγάλες εταιρείες, κυρίως πολυεθνικές, οι οποίες έχουν δραστηριότητες σε πολλές πόλεις χώρες. Το Internet θεωρείται το µεγαλύτερο δίκτυο ευρείας περιοχής στον κόσµο. (Σχήµα 1.7) Σχήµα 1.7: Απεικόνιση δικτύου ευρείας περιοχής (WAN) 13

14 1.6. Παγκόσµιος Ιστός Ένα τέτοιο δίκτυο ευρείας περιοχής (WAN) και το περισσότερο χρησιµοποιούµενο τµήµα του ιαδικτύου είναι ο Παγκόσµιος Ιστός (World Wide Web - WWW), το οποίο στηρίζεται στο Hypertext Transfer Protocol (HTTP), ένα σύνολο συµβάσεων για την ανταλλαγή αρχείων (αρχεία κειµένου, εικόνας, πολυµέσων κ.τ.λ.). Μέσω του WWW ένας χρήστης µπορεί να έχει πρόσβαση σε εκατοµµύρια σελίδες (web pages), οι οποίες παραπέµπουν η µια στην άλλη µε συνδέσµους (links). Οι σελίδες συντάσσονται µε τη γλώσσα HTML (HyperText Markup Language). Η πρόσβαση στο web είναι εφικτή µε την χρήση ειδικών προγραµµάτων πλοήγησης (Web Browsers). Οι web browsers που επικρατούν είναι ο Netscape Navigator (Netscape) και ο Internet Explorer (Microsoft). Το πρωτόκολλο που δηµιουργήθηκε για τον Παγκόσµιο Ιστό και γενικά για τη λειτουργία του Internet, λέγεται TCP/IP (Transmission Control Protocol/ Internet Protocol Πρωτόκολλο Ελέγχου Μετάδοσης/ Πρωτόκολλο ιαδικτύωσης). Το µεν TCP είναι υπεύθυνο για τον κατακερµατισµό των πληροφοριών σε µικρότερα κοµµάτια (πακέτα) και τη σωστή επανασυγκόλλησή τους, το δε IP είναι υπεύθυνο για την παράδοση των πακέτων στον προορισµό τους. Έτσι κάθε υπολογιστής µπορεί να επικοινωνήσει µε οποιονδήποτε άλλο συνδεδεµένο υπολογιστή, επειδή απλά «µιλάνε» την ίδια γλώσσα. Το παρακάτω σχήµα 1.8 παριστάνει τη σχέση ανάµεσα στα διάφορα πρωτόκολλα του Internet: 14

15 Telnet FTP TCP FTP: µεταφορά αρχείων IP Τοπικά Πρωτόκολλα ικτύων Local Network Protocol Σχήµα 1.8: Πρωτόκολλα του Internet 1.7. Περιήγηση στον Παγκόσµιο Ιστό Όπως λέχθηκε παραπάνω για να περιηγηθεί ένας χρήστης χρησιµοποιώντας Η/Υ, µέσα στο Internet (Παγκόσµιος Ιστός), χρειάζεται να συνδέεται κάθε φορά µε έναν κεντρικό υπολογιστή ο οποίος επειδή βρίσκεται µέσα στον Παγκόσµιο Ιστό έχει το όνοµα: Web Server. Άρα, Web Server ονοµάζουµε το λογισµικό που τρέχει σε ένα κόµβο Internet και επιτρέπει σε άλλους υπολογιστές να αποκτούν αντίγραφα των Web Site που είναι αποθηκευµένα σε αυτόν. Ενώ, αντίστοιχα Web Client ονοµάζουµε το λογισµικό που τρέχει ένας οποιοδήποτε Η/Υ και του επιτρέπει να "διαβάζει" Web sites (από το σκληρό του δίσκο ή από το Internet αν είναι συνδεδεµένος µε αυτό). Το Web Site είναι ένα σύνολο από Web σελίδες µε λίγο ως πολύ κοινό αντικείµενο, αρχιτεκτονική και δοµή και οι οποίες συνήθως συστεγάζονται (φιλοξενούνται) στον ίδιο Web Server. Ένα text αρχείο Η/Υ ονοµάζεται Web Σελίδα και είναι κατασκευασµένο µε τέτοιο τρόπο που να µπορεί να παρουσιάζεται ολοκληρωµένο και στην επιθυµητή για τον δηµιουργό του µορφή, µε µία µόνο κλήση από τον χειριστή του κατάλληλου λογισµικού. Κάθε Web σελίδα έχει την δική της διεύθυνση µέσα στο Internet. Το αρχείο αυτό έχει µια URL διεύθυνση µέσα στο Internet (Παγκόσµιος Ιστός) και αποτελείται από 3 τµήµατα: 15

16 Το πρωτόκολλο που πρέπει να χρησιµοποιήσουµε για να αποκτήσουµε αυτό το αρχείο. Ο κόµβος στον οποίο είναι τοποθετηµένο το αρχείο. Το directory (µε το πλήρες path ή τµήµα αυτού κατά περίπτωση) που βρίσκεται το αρχείο και φυσικά το όνοµα του αρχείου. Π.χ. στο URL το είναι το πρωτόκολλο (HyperText Transfer Protocol), το είναι ο κόµβος και το forthnet/index.html είναι το directory και το όνοµα του αρχείου. Η παραπάνω URL σελίδα φαίνεται και στο παρακάτω σχήµα 1.9. WEB Server Forthnet, forthnet/index.html Internet WEB Client Web σελίδα:http://www.forthnet.gr/forthnet/index.html Σχήµα 1.9: Παράδειγµα URL σελίδας 1.8. Σύνοψη Οι αυξανόµενες ανάγκες για αναζήτηση πληροφοριών και ανάπτυξη σε όλους τους τοµείς της σύγχρονης ζωής, δηµιούργησε τεχνολογίες όπως τα δίκτυα ικτύων υπολογιστών. Οι συνδέσεις αυτές βοήθησαν στην παροχή της πληροφορίας σε µεγάλο εύρος χρηστών αλλά και ταυτόχρονα στην οργάνωση µεγάλου µέρους αυτής (πληροφορία) σε κεντρικούς υπολογιστές. Μέρος της οργάνωσης αυτής της πληροφορίας και ίσως το πιο σηµαντικό αποτελεί και η έννοια των Βάσεων εδοµένων. 16

17 2. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ Η αλµατώδης ανάπτυξη της επιστήµης της πληροφορικής και των επικοινωνιών τα τελευταία χρόνια έχει καταστήσει την πληροφορία ως ένα από τα βασικότερα και πολυτιµότερα αγαθά. Είναι κοινός τόπος σήµερα η εκτίµηση ότι το αγαθό της πληροφορίας είναι επιθυµητό απ όλους τους εργαζόµενους αλλά και τους εκπαιδευόµενους, ώστε να είναι πιο αποδοτικοί, ανταγωνιστικοί αλλά και παραγωγικοί στην εργασία τους. Τα συστήµατα βάσεων δεδοµένων τα χρησιµοποιούµε για να µπορούµε να αποθηκεύσουµε, να επεξεργαστούµε αλλά και να εκµεταλλευτούµε αποδοτικά αυτόν τον τεράστιο όγκο των πληροφοριών που αυξάνονται µε αλµατώδεις ρυθµούς καθηµερινά Τα εδοµένα και οι Πληροφορίες Με τον όρο πληροφορία αναφερόµαστε συνήθως σε ειδήσεις, γεγονότα και έννοιες που αποκτάµε από την καθηµερινή µας επικοινωνία και τα θεωρούµε ως αποκτηθείσα γνώση, ενώ τα δεδοµένα µπορούν να είναι µη κατάλληλα επεξεργασµένα και µη ταξινοµηµένα σύνολα πληροφοριών. Ένας αυστηρός ορισµός για το τι είναι δεδοµένα και τι είναι πληροφορία, σύµφωνα µε την επιτροπή ANSI των ΗΠΑ, είναι ο εξής : εδοµένα (data) είναι µια παράσταση, όπως γράµµατα, αριθµοί, σύµβολα κ.ά. στα οποία µπορούµε να δώσουµε κάποια σηµασία (έννοια). Πληροφορία (information) είναι η σηµασία που δίνουµε σ ένα σύνολο από δεδοµένα, τα οποία µπορούµε να επεξεργαστούµε βάσει προκαθορισµένων κανόνων και να βγάλουµε έτσι κάποια χρήσιµα συµπεράσµατα. Με τις πληροφορίες περιορίζεται η αβεβαιότητα που έχουµε για διάφορα πράγµατα και βοηθιόµαστε έτσι στο να λάβουµε σωστές αποφάσεις. Τα δεδοµένα µπορούν να θεωρηθούν ως τρόποι αναπαράστασης εννοιών και γεγονότων που µπορούν να υποστούν διαχείριση και επεξεργασία. Η συλλογή και αποθήκευση ενός τεράστιου όγκου δεδοµένων όπως απαιτούν οι κοινωνικές συνθήκες σήµερα, δεν λύνει τελείως το πρόβληµα της σωστής οργάνωσης και ταξινόµησης των δεδοµένων. Τα δεδοµένα θα πρέπει να οργανωθούν µε τέτοιο τρόπο έτσι ώστε να µπορούµε 17

18 να τα εντοπίζουµε και να τα αξιοποιούµε εύκολα και γρήγορα και τη στιγµή που τα χρειαζόµαστε. Ένα κλασικό παράδειγµα µη σωστής οργάνωσης δεδοµένων θα ήταν για παράδειγµα ο τηλεφωνικός κατάλογος µιας πόλης της Ελλάδας, όπου οι συνδροµητές δεν θα ήταν καταχωρηµένοι αλφαβητικά σύµφωνα µε το επώνυµο και το όνοµά τους, αλλά εντελώς τυχαία. Ένας τέτοιος τηλεφωνικός κατάλογος θα περιείχε µια τεράστια ποσότητα δεδοµένων αλλά θα ήταν ουσιαστικά άχρηστος. Ένα άλλο παράδειγµα µη σωστής οργάνωσης δεδοµένων θα ήταν µια πολύ µεγάλη βιβλιοθήκη µε χιλιάδες τόµους βιβλίων και χωρίς να διαθέτει κάποιο υποτυπώδες σύστηµα οργάνωσης και ταξινόµησης των βιβλίων. Ούτε οι υπάλληλοι της βιβλιοθήκης θα µπορούσαν να κάνουν τη δουλειά τους αλλά ούτε και οι επισκέπτες θα µπορούσαν να αξιοποιήσουν την πληθώρα των πληροφοριών που περιέχονται στα βιβλία. Εκτός λοιπόν από τη µόνιµη αποθήκευση των δεδοµένων, χρειαζόµαστε και κάποιους τρόπους ευέλικτης και αποδοτικής οργάνωσής τους. Χαρακτηριστικά παραδείγµατα δεδοµένων που απαιτούν σωστή και αποδοτική οργάνωση είναι τα εξής : Τα στοιχεία υπαλλήλων, πελατών, προµηθευτών και παραγγελιών µιας εµπορικής επιχείρησης. Τα στοιχεία υλικών µιας αποθήκης. Τα στοιχεία ταινιών, πελατών και δανεισµών µιας βιντεολέσχης. Τα στοιχεία υπαλλήλων, γιατρών, ασθενών αλλά και υλικών ενός νοσοκοµείου. Τα στοιχεία βιβλίων, χρηστών (δανειστών) και δανεισµών µιας βιβλιοθήκης Η Οργάνωση Αρχείων Ο πιο γνωστός τρόπος οργάνωσης δεδοµένων µε τη χρήση ηλεκτρονικών υπολογιστών είναι σε αρχεία εγγραφών. Για να κατανοήσουµε καλύτερα ορισµένες έννοιες, θα εξετάσουµε την περίπτωση ενός αρχείου πελατών και παραγγελιών µιας εµπορικής επιχείρησης. Για να οργανώσουµε 18

19 σωστά το αρχείο µας, θα πρέπει να δηµιουργήσουµε καρτέλες για τους πελάτες, αλλά και για τις παραγγελίες τους αργότερα, που θα πρέπει να περιέχουν τα εξής στοιχεία ανά πελάτη : Κωδικός Επώνυµο Όνοµα ιεύθυνση ΤΚ Πόλη Τηλέφωνο ΑΦΜ ΟΥ Η αντιστοίχιση του παλιού τρόπου οργάνωσης µε τις καρτέλες σε σχέση µε τον σύγχρονο ηλεκτρονικό τρόπο οργάνωσης, έχει ως εξής : Συρτάρι Αρχείο εδοµένων Καρτέλα πελάτη Εγγραφή του αρχείου δεδοµένων Στοιχείο της καρτέλας Πεδίο της εγγραφής Ένα αρχείο (file) θα µπορούµε να το χαρακτηρίσουµε σαν ένα σύνολο που αποτελείται από οργανωµένα οµοειδή στοιχεία. Τα στοιχεία ενός αρχείου µπορούµε να τα οργανώσουµε σε λογικές ενότητες και το σύνολο των στοιχείων που περιέχει µια λογική ενότητα καλείται εγγραφή (record). Το κάθε στοιχείο της εγγραφής καλείται πεδίο (field). Το πεδίο αποτελεί και τη µικρότερη δυνατή υποδιαίρεση των στοιχείων ενός αρχείου. Ένα πεδίο χαρακτηρίζεται από τον µέγιστο αριθµό των χαρακτήρων (bytes) που απαιτούνται για την καταχώρησή του στη µνήµη του υπολογιστή και που αποκαλείται µήκος του πεδίου (field length). Σε µια οργάνωση αρχείου όπως είναι οι πελάτες µιας εµπορικής επιχείρησης που είδαµε νωρίτερα, τα αντίστοιχα πεδία όλων των εγγραφών καταλαµβάνουν τον ίδιο αριθµό σε bytes που είναι αυτός που έχουµε ορίσει 19

20 κατά τη δηµιουργία του αρχείου. Για παράδειγµα, αν ορίσαµε ότι το πεδίο Επώνυµο θα έχει µήκος 15 χαρακτήρες, τότε το πεδίο της εγγραφής του πελάτη µε επώνυµο Παπαδόπουλος, αλλά και το πεδίο της εγγραφής του πελάτη µε επώνυµο Βες θα καταλαµβάνουν από 15 bytes στη µνήµη του υπολογιστή, ενώ αν ένας πελάτης ονοµάζεται Παπαχριστοδουλόπουλος, τότε θα γίνει αποκοπή του επωνύµου του και θα καταχωρηθούν στη µνήµη του υπολογιστή µόνο τα 15 πρώτα γράµµατα, δηλ. τα Παπαχριστοδουλό. Ένα πεδίο χαρακτηρίζεται ακόµη και από το είδος των δεδοµένων που µπορεί να περιέχει, όπως : Αλφαριθµητικό (alphanumeric), µπορεί να περιέχει γράµµατα, ψηφία ή και ειδικούς χαρακτήρες. Αριθµητικό (numeric), µπορεί να περιέχει µόνο αριθµούς. Αλφαβητικό (alphabetic), µπορεί να περιέχει µόνο γράµµατα (αλφαβητικούς χαρακτήρες). Ηµεροµηνίας (date), µπορεί να περιέχει µόνο ηµεροµηνίες. υαδικό (binary), µπορεί να περιέχει ειδικού τύπου δεδοµένα, όπως εικόνες, ήχους κ.ά. Λογικό (logical), µπορεί να περιέχει µόνο µία από δύο τιµές, οι οποίες αντιστοιχούν σε δύο διακριτές καταστάσεις και µπορούν να χαρακτηρισθούν σαν 0 και 1 ή σαν αληθές (true) και ψευδές (false). Σηµειώσεων (memo), µπορεί να περιέχει κείµενο µε µεταβλητό µήκος, το οποίο µπορεί να είναι και αρκετά µεγάλο και συνήθως αποθηκεύεται σαν ξεχωριστό αρχείο από το κύριο αρχείο. Όσον αφορά τις εγγραφές, χρήσιµοι ορισµοί είναι οι εξής : Μήκος εγγραφής (record length) καλείται το άθροισµα που προκύπτει από τα µήκη των πεδίων που την αποτελούν. οµή εγγραφής (record layout) ή γραµµογράφηση καλείται ο τρόπος µε τον οποίο οργανώνουµε τα πεδία µιας εγγραφής. ιάβασµα (read) από αρχείο σηµαίνει τη µεταφορά των δεδοµένων του αρχείου, που γίνεται συνήθως ανά µία εγγραφή, από το µέσο αποθήκευσης 20

21 (σκληρό δίσκο ή δισκέτα) στην κεντρική µνήµη του υπολογιστή για επεξεργασία. Γράψιµο (write) σε αρχείο σηµαίνει µεταφορά των δεδοµένων του αρχείου, που γίνεται συνήθως ανά µία εγγραφή, από την κεντρική µνήµη του υπολογιστή στο µέσο αποθήκευσης (σκληρό δίσκο ή δισκέτα) Προβλήµατα της Οργάνωσης Αρχείων Στα αρχικά στάδια της οργάνωσης αρχείων, ήταν πολύ συνηθισµένη πρακτική η δηµιουργία ξεχωριστών εφαρµογών (προγραµµάτων) και ξεχωριστών αρχείων, όπως για παράδειγµα η δηµιουργία ενός αρχείου πελατών και ενός άλλου ανεξάρτητου αρχείου για τις παραγγελίες των πελατών. Τα προβλήµατα που προέκυψαν από την πρακτική αυτή είναι τα εξής: Πλεονασµός των δεδοµένων (data redundancy). Υπάρχει η περίπτωση να έχουµε επανάληψη των ίδιων δεδοµένων σε αρχεία διαφορετικών εφαρµογών. Για παράδειγµα, αν έχουµε ένα αρχείο πελατών και ένα αρχείο παραγγελιών αυτών των πελατών, είναι σχεδόν σίγουρο ότι θα υπάρχουν κάποια στοιχεία των πελατών που θα υπάρχουν και στα δύο αρχεία. Ασυνέπεια των δεδοµένων (data inconsistency). Αυτό µπορεί να συµβεί όταν υπάρχουν τα ίδια στοιχεία των πελατών (πλεονασµός) και στο αρχείο πελατών και στο αρχείο παραγγελιών και χρειασθεί να γίνει κάποια αλλαγή στη διεύθυνση ή στα τηλέφωνα κάποιου πελάτη, οπότε είναι πολύ πιθανό να γίνει η διόρθωση µόνο στο ένα αρχείο και όχι και στο άλλο. Αδυναµία µερισµού δεδοµένων (data sharing). Μερισµός δεδοµένων σηµαίνει δυνατότητα για κοινή χρήση των στοιχείων κάποιων αρχείων. Για παράδειγµα, ο µερισµός δεδοµένων θα ήταν χρήσιµος αν µε την παραγγελία ενός πελάτη µπορούµε να έχουµε πρόσβαση την ίδια στιγµή στο αρχείο πελατών για να δούµε το υπόλοιπο του πελάτη και µετά στο αρχείο της αποθήκης για να δούµε αν είναι διαθέσιµα τα προϊόντα που παρήγγειλε ο συγκεκριµένος πελάτης. Η αδυναµία µερισµού δεδοµένων δηµιουργεί καθυστέρηση στη λήψη αποφάσεων και στην εξυπηρέτηση των χρηστών. Αδυναµία προτυποποίησης. Έχει να κάνει µε την ανοµοιοµορφία και µε την διαφορετική αναπαράσταση και οργάνωση των δεδοµένων στα αρχεία 21

22 των εφαρµογών. Η αδυναµία αυτή δηµιουργεί προβλήµατα προσαρµογής των χρηστών καθώς και προβλήµατα στην ανταλλαγή δεδοµένων µεταξύ διαφορετικών συστηµάτων Οι Βάσεις εδοµένων και τα Σ Β (DBMS) Για να δοθεί µια λύση σ όλα τα παραπάνω προβλήµατα, και µε βάση το γεγονός ότι η χρήση των ηλεκτρονικών υπολογιστών και συνεπώς η ηλεκτρονική καταχώρηση και επεξεργασία δεδοµένων αυξήθηκε κατακόρυφα ήδη από τη δεκαετία του 70 στις µεγάλες επιχειρήσεις και άρα είχαµε πάρα πολλές εφαρµογές να επεξεργάζονται δεδοµένα σε πάρα πολλά αρχεία ταυτόχρονα, προτάθηκε η συνένωση όλων των αρχείων µιας εφαρµογής. Εκτός, όµως, από τη συνένωση των αρχείων, απαιτείτο και µια σωστή οργάνωσή τους. ηµιουργήθηκαν έτσι οι Τράπεζες Πληροφοριών ή Βάσεις εδοµένων (Data Bases). Μια Βάση εδοµένων (Β ) είναι ένα σύνολο αρχείων µε υψηλό βαθµό οργάνωσης τα οποία είναι συνδεδεµένα µεταξύ τους µε λογικές σχέσεις, έτσι ώστε να µπορούν να χρησιµοποιούνται από πολλές εφαρµογές και από πολλούς χρήστες ταυτόχρονα. Υπάρχει ένα ειδικό λογισµικό το οποίο µεσολαβεί ανάµεσα στις αρχεία δεδοµένων και τις εφαρµογές που χρησιµοποιούν οι χρήστες και αποκαλείται Σύστηµα ιαχείρισης Βάσης εδοµένων (Σ Β ) ή DBMS (Data Base Management System). Το Σ Β είναι στην ουσία ένα σύνολο από προγράµµατα και υπορουτίνες που έχουν να κάνουν µε τον χειρισµό της βάσης δεδοµένων, όσον αφορά τη δηµιουργία, τροποποίηση, διαγραφή στοιχείων, µε ελέγχους ασφαλείας κ.ά. Οι χρήστες των εφαρµογών αντλούν τα στοιχεία που τους ενδιαφέρουν από τη βάση δεδοµένων χωρίς να είναι σε θέση να γνωρίζουν µε ποιο τρόπο είναι οργανωµένα τα δεδοµένα σ αυτήν. Το Σ Β παίζει τον ρόλο του µεσάζοντα ανάµεσα στον χρήστη και τη βάση δεδοµένων και µόνο µέσω του Σ Β µπορεί ο χρήστης να αντλήσει πληροφορίες από τη βάση δεδοµένων. Ένα Σ Β µπορεί να είναι εγκατεστηµένο σ έναν µόνο υπολογιστή ή και σ ένα δίκτυο υπολογιστών και µπορεί να χρησιµοποιείται από έναν χρήστη ή και από πολλούς χρήστες. 22

23 Ένα Σύστηµα Βάσης εδοµένων (ΣΒ ) ή DBS (Data Base System) αποτελείται από το υλικό, το λογισµικό, τη βάση δεδοµένων και τους χρήστες. Είναι δηλαδή ένα σύστηµα µε το οποίο µπορούµε να αποθηκεύσουµε και να αξιοποιήσουµε δεδοµένα µε τη βοήθεια ηλεκτρονικού υπολογιστή. Αναλυτικά: Το υλικό (hardware) αποτελείται όπως είναι γνωστό από τους ηλεκτρονικούς υπολογιστές, τα περιφερειακά, τους σκληρούς δίσκους, τις µαγνητικές ταινίες κ.ά., όπου είναι αποθηκευµένα τα αρχεία της βάσης δεδοµένων αλλά και τα προγράµµατα που χρησιµοποιούνται για την επεξεργασία τους. Το λογισµικό (software) είναι τα προγράµµατα που χρησιµοποιούνται για την επεξεργασία των δεδοµένων (στοιχείων) της βάσης δεδοµένων. Η βάση δεδοµένων (data base) αποτελείται από το σύνολο των αρχείων όπου είναι αποθηκευµένα τα δεδοµένα του συστήµατος. Τα στοιχεία αυτά µπορεί να βρίσκονται αποθηκευµένα σ έναν φυσικό υπολογιστή αλλά και σε περισσότερους. Όµως, στον χρήστη δίνεται η εντύπωση ότι βρίσκονται συγκεντρωµένα στον ίδιο υπολογιστή. Τα δεδοµένα των αρχείων αυτών είναι ενοποιηµένα (data integration), δηλ. δεν υπάρχει πλεονασµός (άσκοπη επανάληψη) δεδοµένων και µερισµένα (data sharing), δηλ. υπάρχει δυνατότητα ταυτόχρονης προσπέλασης των δεδοµένων από πολλούς χρήστες. Ο κάθε χρήστης έχει διαφορετικά δικαιώµατα και βλέπει διαφορετικό κοµµάτι της βάσης δεδοµένων, ανάλογα µε τον σκοπό για τον οποίο συνδέεται. Οι χρήστες (users) µιας βάσης δεδοµένων χωρίζονται στις εξής κατηγορίες : Τελικοί χρήστες (end users). Χρησιµοποιούν κάποια εφαρµογή για να παίρνουν στοιχεία από µια βάση δεδοµένων, έχουν τις λιγότερες δυνατότητες επέµβασης στα στοιχεία της βάσης δεδοµένων, χρησιµοποιούν ειδικούς κωδικούς πρόσβασης και το σύστηµα τούς επιτρέπει ανάλογα πρόσβαση σε συγκεκριµένο κοµµάτι της βάσης δεδοµένων. Προγραµµατιστές εφαρµογών (application programmers). Αναπτύσσουν τις εφαρµογές του ΣΒ σε κάποια από τις γνωστές γλώσσες προγραµµατισµού. 23

24 ιαχειριστής δεδοµένων (data administrator DA). Έχει τη διοικητική αρµοδιότητα και ευθύνη για την οργάνωση της βάσης δεδοµένων και την απόδοση δικαιωµάτων πρόσβασης στους χρήστες. ιαχειριστής βάσης δεδοµένων (database administrator DBA). Λαµβάνει οδηγίες από τον διαχειριστή δεδοµένων και είναι αυτός που διαθέτει τις τεχνικές γνώσεις και αρµοδιότητες για τη σωστή και αποδοτική λειτουργία του Σ Β Η Αρχιτεκτονική των Σ Β Όπως είδαµε νωρίτερα, ένα Σ Β (Σύστηµα ιαχείρισης Βάσης εδοµένων) έχει σαν αποστολή τη διαχείριση των δεδοµένων των αρχείων της βάσης, δηλ. την προσθήκη, διαγραφή, τροποποίηση εγγραφών, την αναζήτηση µέσα στις εγγραφές κ.ά.). Το Σ Β δέχεται αιτήσεις από τους χρήστες των εφαρµογών και επικοινωνεί µε τα αρχεία της βάσης δεδοµένων για να τις διεκπεραιώσει. Αυτή η κοινή διεπαφή (interface) των εφαρµογών µε τα αρχεία αποκαλείται λογική διεπαφή. Οι εφαρµογές που δηµιουργούµε δεν απασχολούνται µε τον τρόπο που είναι αποθηκευµένα τα δεδοµένα, πόσο χώρο καταλαµβάνουν κ.ο.κ και αυτή η ιδιότητα είναι γνωστή ως ανεξαρτησία δεδοµένων. Αυτό σηµαίνει πρακτικά ότι οποιαδήποτε αλλαγή στον τρόπο οργάνωσης των αρχείων της βάσης δεδοµένων δεν θα συνεπάγεται και αλλαγή στις εφαρµογές ένα πρόβληµα που ταλαιπωρούσε πολύ τους προγραµµατιστές παλαιοτέρων εποχών. Ακόµη, η προσθήκη, η κατάργηση ή και η τροποποίηση κάποιων εφαρµογών δεν θα έχει καµία επίπτωση στον τρόπο οργάνωσης των αρχείων της βάσης δεδοµένων. Στα Σ Β έχει επικρατήσει η λεγόµενη αρχιτεκτονική των τριών επιπέδων (βαθµίδων), όπου τα τρία επίπεδα είναι τα εξής : Εσωτερικό επίπεδο (internal level), έχει να κάνει µε την αποθήκευση των αρχείων στον σκληρό δίσκο, δηλ. την πραγµατική ή φυσική κατάστασή τους. 24

25 Εξωτερικό επίπεδο (external level), έχει να κάνει µε τους χρήστες είτε αυτοί είναι απλοί χειριστές, είτε προγραµµατιστές ή και οι διαχειριστές της βάσης δεδοµένων. Εννοιολογικό επίπεδο (conceptual level), είναι ένα ενδιάµεσο επίπεδο που διασυνδέει τα δύο άλλα επίπεδα και έχει να κάνει µε τη λογική σχεδίαση των αρχείων της βάσης δεδοµένων Οι Οντότητες (Entities) Με τον όρο οντότητα (entity) εννοούµε ένα αντικείµενο, ένα πρόσωπο, µια κατάσταση και γενικά ο,τιδήποτε µπορεί να προσδιορισθεί σαν ανεξάρτητη ύπαρξη (αυτόνοµη µονάδα του φυσικού κόσµου). Για παράδειγµα, σε µια βάση δεδοµένων µιας εµπορικής εταιρείας, οντότητες µπορεί να είναι οι εργαζόµενοι, οι πελάτες, οι προµηθευτές, οι παραγγελίες, τα είδη της αποθήκης (προϊόντα) κ.ά. Το Μοντέλο Οντοτήτων Συσχετίσεων (Entity Relationship Model, ER Model) είναι µια διαγραµµατική αναπαράσταση της δοµής µιας βάσης δεδοµένων και χρησιµοποιείται κατά τη φάση του λογικού σχεδιασµού της βάσης. ηλαδή, δεν ασχολείται µε τον τρόπο που αποθηκεύονται τα δεδοµένα της βάσης, αλλά µε την ταυτοποίηση των δεδοµένων και µε τον τρόπο µε τον οποίο αυτά συσχετίζονται µεταξύ τους. Θα δούµε ένα απλό παράδειγµα µιας εταιρείας, η οποία περιέχει δεδοµένα που αφορούν τους υπαλλήλους της (employees), τα τµήµατά της (departments) και τα έργα (projects) που έχουν αναλάβει αυτά τα τµήµατα. Ένα τµήµα της εταιρείας µπορεί να εποπτεύει ένα ή περισσότερα έργα (projects) και ένας υπάλληλος ανήκει σ ένα µόνο τµήµα της εταιρείας αλλά µπορεί να απασχολείται ταυτόχρονα σε πολλά έργα, τα οποία δεν είναι υποχρεωτικό να παρακολουθούνται από το ίδιο τµήµα. Το µοντέλο οντοτήτων συσχετίσεων σχεδιασµένο για το παραπάνω παράδειγµα, φαίνεται στο παρακάτω σχήµα (σχήµα 1.1): 25

26 ΤΜΗΜΑ ΑΝΗΚΕΙ ΕΡΓΑΖΟΜΕΝΟΣ ΕΠΟΠΤΕΥΕΙ ΕΡΓΑΖΕΤΑΙ ΕΡΓΑ Σχήµα 1.1: Μοντέλο Οντοτήτων Συσχετίσεων 2.7. Οι Ιδιότητες (Attributes) Με τον όρο ιδιότητα ή χαρακτηριστικό ή και πεδίο (attribute) µιας οντότητας, αναφερόµαστε σ ένα από τα συστατικά της στοιχεία που την περιγράφουν και την κάνουν να ξεχωρίζει από τα άλλα στοιχεία της ίδιας οντότητας. Για παράδειγµα, η οντότητα ΠΕΛΑΤΗΣ µπορεί να έχει ως ιδιότητες (χαρακτηριστικά) τον κωδικό, το επώνυµο, το όνοµα, τη διεύθυνση, το τηλέφωνο, το ΑΦΜ κ.ά., µε τη βοήθεια των οποίων µπορούµε να ξεχωρίσουµε τους πελάτες µεταξύ τους. Επίσης, η οντότητα ΠΑΡΑΓΓΕΛΙΑ µπορεί να έχει ως ιδιότητες (χαρακτηριστικά) τον κωδικό, τον αριθµό παραστατικού, την ηµεροµηνία, τον κωδικό πελάτη, το προϊόν κ.ά., µε τη βοήθεια των οποίων µπορούµε να ξεχωρίσουµε τις παραγγελίες µεταξύ τους Στο παράδειγµα της εταιρείας, µπορούµε να ορίσουµε έναν τύπο οντότητας για τους υπαλλήλους της εταιρείας (EMPLOYEE), έναν τύπο οντότητας για τα τµήµατα που έχει η εταιρεία (DEPARTMENT) και έναν τύπο οντότητας για τα έργα που έχει αναλάβει η εταιρεία (PROJECT). Καθένας από τους παραπάνω τύπους οντοτήτων περιγράφεται από ένα όνοµα και από το σύνολο των πεδίων που περιέχει. Οι πληροφορίες αυτές αποτελούν το σχήµα (schema) της οντότητας Τα Στιγµιότυπα (Snapshots) Το κάθε διαφορετικό (αυτόνοµο) στοιχείο µιας οντότητας αποκαλείται στιγµιότυπο (snapshot) ή και εµφάνιση της οντότητας. Για παράδειγµα, στην οντότητα ΠΕΛΑΤΗΣ, άλλο στιγµιότυπο είναι ο πελάτης µε επώνυµο 26

27 Παπαδόπουλος και άλλο στιγµιότυπο είναι ο πελάτης µε επώνυµο Σταυρόπουλος Το Πρωτεύον Κλειδί (Primary Key) Πρωτεύον κλειδί ή πεδίο κλειδί (primary key) µιας οντότητας καλείται εκείνη η ιδιότητα (ή ο συνδυασµός ιδιοτήτων) που έχει µοναδική τιµή για όλα τα στιγµιότυπα (εµφανίσεις) της οντότητας. Για παράδειγµα, στην οντότητα ΠΕΛΑΤΗΣ πρωτεύον κλειδί είναι ο κωδικός πελάτη, στην οντότητα ΠΑΡΑΓΓΕΛΙΑ πρωτεύον κλειδί µπορεί να είναι ο κωδικός παραγγελίας ή ο αριθµός παραστατικού κοκ. Υπάρχουν περιπτώσεις όπου το πεδίο κλειδί ενός τύπου οντότητας µπορεί να µην είναι απλό αλλά σύνθετο, να αποτελείται δηλαδή από πολλά απλά πεδία και τότε η συνθήκη της µοναδικότητας για την τιµή του κλειδιού δεν εφαρµόζεται σε κάθε πεδίο του σύνθετου κλειδιού αλλά στο σύνολο του συνδυασµού αυτών των πεδίων Οι Συσχετίσεις (Relationships) Με τον όρο συσχέτιση (relationship) αναφερόµαστε στον τρόπο σύνδεσης (επικοινωνίας) δύο ξεχωριστών οντοτήτων, ώστε να µπορούµε να αντλούµε στοιχεία (πληροφορίες) από τον συνδυασµό τους. Για παράδειγµα, η οντότητα ΓΙΑΤΡΟΣ συσχετίζεται µε την οντότητα ΑΣΘΕΝΗΣ αλλά και µε την οντότητα ΚΛΙΝΙΚΗ στη βάση δεδοµένων ενός νοσοκοµείου. Μπορούµε να δεχθούµε ότι ένας γιατρός παρακολουθεί (συσχετίζεται µε) πολλούς ασθενείς, αλλά ένας ασθενής παρακολουθείται από (συσχετίζεται µε) έναν µόνο γιατρό και επίσης ένας γιατρός συσχετίζεται µε (ανήκει σε) µία µόνο κλινική, αλλά µια κλινική συσχετίζεται µε (απασχολεί) πολλούς γιατρούς (Σχήµα 1.2). ΓΙΑΤΡΟΣ ΑΠΑΣΧΟΛΕΙ ΚΛΙΝΙΚΗ ΠΑΡΑΚΟΛΟΥΘΕΙ ΣΥΣΧΕΤΙΣΗ ΑΣΘΕΝΗΣ 27

28 Σχήµα 1.2: Συσχετίσεις Στο παράδειγµα της εταιρείας, η οντότητα EMPLOYEE συσχετίζεται µε την οντότητα DEPARTMENT και η οντότητα DEPARTMENT συσχετίζεται µε την οντότητα PROJECTS. Ένας υπάλληλος ανήκει σ ένα µόνο τµήµα και ένα τµήµα µπορεί να έχει πολλούς υπαλλήλους. Επίσης, ένα τµήµα εποπτεύει πολλά έργα αλλά ένα έργο εποπτεύεται από ένα µόνο τµήµα Το Ιεραρχικό Μοντέλο Βάσεων εδοµένων Υπάρχουν τρία βασικά µοντέλα που έχουν επικρατήσει στις βάσεις δεδοµένων, το ιεραρχικό, το δικτυωτό και το σχεσιακό, και τα οποία αναπτύχθηκαν µε βάση αντίστοιχες δοµές. Το ιεραρχικό µοντέλο (hierarchical) έχει µια ιεραρχική δοµή που θυµίζει δένδρο. Οι οντότητες µοιάζουν µε απολήξεις από κλαδιά δένδρων και τοποθετούνται σε επίπεδα ιεραρχίας. Τα κλαδιά παριστάνουν τις συσχετίσεις ανάµεσα στις οντότητες. Από µια οντότητα που βρίσκεται σ ένα ανώτερο επίπεδο εκκινούν πολλά κλαδιά, καθένα από τα οποία καταλήγει σε µια οντότητα που βρίσκεται σ ένα χαµηλότερο επίπεδο. Αλλά, σε κάθε οντότητα που βρίσκεται σ ένα χαµηλότερο επίπεδο αντιστοιχεί µία και µόνο µία οντότητα που βρίσκεται σ ένα ανώτερο επίπεδο. Το µοντέλο αυτό ήταν το πρώτο που εµφανίσθηκε αλλά σήµερα θεωρείται δύσχρηστο και ξεπερασµένο Το ικτυωτό Μοντέλο Βάσεων εδοµένων Στο δικτυωτό (network) µοντέλο οµοίως, τα στοιχεία τοποθετούνται σ ένα επίπεδο ιεραρχίας, αλλά κάθε στοιχείο µπορεί να συσχετισθεί µε πολλά στοιχεία είτε σ ένα κατώτερο ή σ ένα ανώτερο επίπεδο Το Σχεσιακό Μοντέλο Βάσεων εδοµένων Το σχεσιακό (relational) µοντέλο έχει επικρατήσει σήµερα στην αναπαράσταση των δεδοµένων καθώς διαθέτει σηµαντικά πλεονεκτήµατα ως προς τα άλλα δύο και οι βάσεις δεδοµένων που σχεδιάζονται σύµφωνα µ αυτό αποκαλούνται σχεσιακές (relational databases). Με τις σχεσιακές βάσεις δεδοµένων διαθέτουµε έναν σαφή, απλό και εύκολα κατανοητό τρόπο για να µπορέσουµε να αναπαραστήσουµε και να διαχειριστούµε τα δεδοµένα µας. Υστερούν µόνο σε ταχύτητα υπολογισµών και σε χώρο αποθήκευσης, αλλά µόνο όταν έχουµε να κάνουµε µε πολύ µεγάλες βάσεις δεδοµένων. 28

29 Στο µοντέλο αυτό οι βάσεις δεδοµένων περιγράφονται µε αυστηρές µαθηµατικές έννοιες και ο χρήστης βλέπει τις οντότητες και τις συσχετίσεις µε τη µορφή πινάκων (tables) και σχέσεων (relations) αντίστοιχα. Ένας πίνακας (table) αποτελείται από γραµµές (rows) και στήλες (columns), όπου τοποθετούµε τα στοιχεία σε οριζόντια και κάθετη µορφή. Η κάθε στήλη του πίνακα χαρακτηρίζει κάποια ιδιότητα της οντότητας και αποκαλείται χαρακτηριστικό (attribute) ή πεδίο (field), ενώ η κάθε γραµµή του πίνακα περιέχει όλες τις πληροφορίες (στήλες) που αφορούν ένα στοιχείο της οντότητας και αποκαλείται πλειάδα (tuple) ή εγγραφή (record). Κάθε πεδίο του πίνακα µπορεί να πάρει ορισµένες µόνο τιµές, οι οποίες µπορεί να καθορίζονται από τον τύπο δεδοµένων της ιδιότητας, όπως ονόµατα ή αριθµοί για παράδειγµα, ή και από αυτό που εκφράζει, όπως το ότι δεν µπορούµε να έχουµε αρνητικό βάρος ή αρνητικό ΑΦΜ, για παράδειγµα. Το σύνολο των αποδεκτών τιµών µιας οντότητας αποκαλείται πεδίο ορισµού (domain). Για να µπορέσουµε να κατανοήσουµε τις σχεσιακές βάσεις δεδοµένων, ένα πολύ χαρακτηριστικό παράδειγµα αποτελεί ένας πίνακας πελατών και ένας πίνακας παραγγελιών µιας εµπορικής εταιρείας. εξής: Τα πεδία που µπορούµε να ορίσουµε στους πίνακες αυτούς είναι τα ΠΙΝΑΚΑΣ (ΟΝΤΟΤΗΤΑ) ΠΕΛΑΤΕΣ (ΚωδικόςΠελάτη, Επώνυµο, Όνοµα, ιεύθυνση, ΤΚ, Πόλη, ΑΦΜ, Υπόλοιπο) ΠΙΝΑΚΑΣ (ΟΝΤΟΤΗΤΑ) ΠΑΡΑΓΓΕΛΙΕΣ (ΚωδικόςΠελάτη, ΚωδικόςΠαραγγελίας, Ηµεροµηνία, Είδος, Ποσότητα, Τιµή Μονάδας) Βλέπουµε ότι οι δύο πίνακες έχουν ένα κοινό πεδίο (στήλη), τον ΚωδικόςΠελάτη, και αυτό είναι απαραίτητο στις σχεσιακές βάσεις δεδοµένων για να µπορέσουµε να κάνουµε τη δουλειά µας και να συνδυάσουµε πληροφορίες και από τους δύο πίνακες. 29

30 Όπως είναι εύκολα κατανοητό, η βασικότερη εργασία που έχουµε να κάνουµε κατά τον σχεδιασµό µιας σχεσιακής βάσης δεδοµένων είναι να ορίσουµε τους πίνακες που θα χρησιµοποιήσουµε καθώς και τα πεδία που θα περιέχει ο καθένας απ αυτούς. Η διαδικασία αυτή αποκαλείται κατασκευή του σχήµατος (schema) µιας βάσης δεδοµένων. Οι κανόνες που πρέπει να ακολουθούµε πιστά κατά τον σχεδιασµό µιας σχεσιακής βάσης δεδοµένων είναι οι εξής : Η κάθε οντότητα πρέπει να παριστάνεται ως ένας ξεχωριστός πίνακας. Η κάθε στήλη του πίνακα αντιστοιχεί σε µια ιδιότητα της οντότητας. Η κάθε γραµµή του πίνακα αντιστοιχεί σε µια εµφάνιση της οντότητας. Η κάθε γραµµή πρέπει να είναι µοναδική, δηλ. αποκλείεται να υπάρχουν δύο ή και περισσότερες γραµµές που να περιέχουν τα ίδια ακριβώς στοιχεία. Η σειρά εµφάνισης των γραµµών δεν έχει καµία σηµασία. Η κάθε στήλη έχει µια δική της µοναδική ονοµασία. Οι τιµές που ανήκουν στην ίδια στήλη πρέπει να είναι του ιδίου τύπου, δηλ. ή όλες αριθµοί ή όλες αλφαριθµητικές κοκ. Η στήλη που αποτελεί το πρωτεύον κλειδί (primary key) µιας οντότητας, δεν πρέπει να είναι ποτέ κενή (null). Αποκλείεται να υπάρχουν δύο ή και περισσότερες γραµµές που να περιέχουν την ίδια τιµή στο πρωτεύον κλειδί. Το πρωτεύον κλειδί µιας οντότητας αποκαλείται ξένο κλειδί (foreign key) σε µια άλλη οντότητα, µε την οποία υπάρχει συσχετισµός. Μπορεί να υπάρχουν πολλές γραµµές που να έχουν την ίδια τιµή στο ξένο κλειδί Τα Σχεσιακά Σ Β (RDBMS) Τα Σχεσιακά Συστήµατα ιαχείρισης Βάσεων εδοµένων (ΣΣ Β ) ή RBMS (Relational DataBase Management Systems) αναπτύχθηκαν µε βάση το σχεσιακό µοντέλο και έχουν επικρατήσει πλήρως στον χώρο. Κατά τον σχεδιασµό και τη δηµιουργία µιας σχεσιακής βάσης δεδοµένων, οι πίνακες 30

31 αποτελούν το µοναδικό δοµικό και απαραίτητο στοιχείο για µπορέσουν να αναπαρασταθούν οι πληροφορίες που περιέχονται στη βάση δεδοµένων. Για να µπορέσουµε να προσθέσουµε, διαγράψουµε ή τροποποιήσουµε τα στοιχεία που περιέχονται σε µια βάση δεδοµένων, χρησιµοποιούµε ειδικές γλώσσες προγραµµατισµού που αποκαλούνται γλώσσες ερωταπαντήσεων (query languages). Η γλώσσα που αποτελεί σήµερα ένα διεθνές πρότυπο για την επικοινωνία των χρηστών µε τα Σχεσιακά Σ Β είναι η SQL (Structured Query Language) ή οµηµένη Γλώσσα Ερωτηµάτων. Μπορεί να λειτουργήσει αυτόνοµα αλλά και σε συνεργασία µ άλλες γλώσσες προγραµµατισµού. Μια άλλη, φιλική προς τον χρήστη γλώσσα προγραµµατισµού για να µπορούµε να υποβάλουµε ερωτήµατα σε σχεσιακές βάσεις δεδοµένων και να λαµβάνουµε απαντήσεις είναι η QBE (Query By Example), η οποία χρησιµοποιεί φόρµες για τη γραφική απεικόνιση των ερωτηµάτων µας. Σήµερα, υπάρχουν εξελιγµένα εργαλεία διαχείρισης σε γραφικό και φιλικό προς τον χρήστη περιβάλλον για να κάνουµε τα εξής : ηµιουργία πινάκων ηµιουργία φορµών ηµιουργία ερωτηµάτων ηµιουργία εκθέσεων (αναφορών) Τα Σχεσιακά Σ Β τα διακρίνουµε στα µεγάλα, τα οποία αφορούν κυρίως µεγάλους οργανισµούς και επιχειρήσεις, έχουν τεράστιο όγκο δεδοµένων και πολλούς χρήστες ταυτόχρονα, και τέτοια συστήµατα είναι τα Oracle, Ingres, Informix, SQL Server κ.ά. και τα µικρά, τα οποία αφορούν κυρίως απλούς χρήστες, όπως είναι η Microsoft Access, η Paradox, η FoxPro κ.ά Το Μοντέλο Οντοτήτων Συσχετίσεων Το µοντέλο που έχει επικρατήσει σήµερα για να παραστήσει τις έννοιες ή τη δοµή µιας βάσης δεδοµένων είναι το Μοντέλο Οντοτήτων Συσχετίσεων (ΟΣ), όπως έχει ήδη αναφερθεί. Οι βασικές (θεµελιώδεις) έννοιες του µοντέλου αυτού είναι οι εξής : Οντότητες 31

32 Ιδιότητες ή Χαρακτηριστικά Συσχετίσεις Για να αναπαραστήσουµε ένα Μοντέλο Οντοτήτων Συσχετίσεων χρησιµοποιούµε ειδικά διαγράµµατα, όπου τα ορθογώνια συµβολίζουν τις οντότητες, οι ρόµβοι τις συσχετίσεις και οι ελλείψεις τις ιδιότητες. Με ευθείες γραµµές συνδέουµε τις οντότητες που συσχετίζονται µε κάποιο τρόπο µεταξύ τους. Όλα τα παραπάνω αποτελούν τη λογική δοµή µιας βάσης δεδοµένων, µια εργασία που είναι απαραίτητο να γίνει πριν από την καταχώριση και την επεξεργασία των στοιχείων (πληροφοριών) της βάσης δεδοµένων. Το µοντέλο οντοτήτων συσχετίσεων αποτελεί µια γενική περιγραφή των γενικών στοιχείων που απαρτίζουν µια βάση δεδοµένων και απεικονίζει την αντίληψη που έχουµε για τα δεδοµένα (εννοιολογικό), χωρίς να υπεισέρχεται σε λεπτοµέρειες υλοποίησης Οι Οντότητες Με τον όρο οντότητα (entity) αναφερόµαστε σε κάθε αντικείµενο, έννοια, πρόσωπο ή κατάσταση που έχει µια ανεξάρτητη ύπαρξη. Είναι κάτι που ξεχωρίζει και µπορούµε να συγκεντρώσουµε πληροφορίες (στοιχεία) γι αυτό. Η οντότητα είναι αντίστοιχη µε την έννοια της εγγραφής που συναντάµε στα αρχεία και στους πίνακες αλλά και µε την έννοια του αντικειµένου στις σύγχρονες αντικειµενοστραφείς γλώσσες προγραµµατισµού. Παραδείγµατα οντοτήτων είναι τα εξής : ΠΕΛΑΤΗΣ, ΠΑΡΑΓΓΕΛΙΑ, ΠΡΟΜΗΘΕΥΤΗΣ, ΑΠΟΘΗΚΗ, ΜΑΘΗΤΗΣ, ΚΑΘΗΓΗΤΗΣ, ΑΘΛΗΤΗΣ, ΑΓΩΝΙΣΜΑ, ΧΩΡΑ, ΠΟΛΕΙΣ κ.ά. Μια βάση δεδοµένων µπορεί να περιέχει πολλές διαφορετικές οντότητες, οι οποίες απεικονίζονται µε ορθογώνια παραλληλόγραµµα και συσχετίζονται µεταξύ τους ανά δύο Οι Ιδιότητες (Χαρακτηριστικά) των Οντοτήτων Με τον όρο ιδιότητες (properties) ή χαρακτηριστικά (attributes) αναφερόµαστε στα συστατικά (δοµικά) στοιχεία που προσδιορίζουν (αποτελούν) µια οντότητα. Η ιδιότητα είναι αντίστοιχη µε την έννοια του πεδίου που συναντάµε στα αρχεία και στους πίνακες αλλά και µε την έννοια της µεταβλητής στις γλώσσες προγραµµατισµού. 32

33 Για παράδειγµα, η οντότητα ΓΙΑΤΡΟΣ µπορεί να αποτελείται από τις ιδιότητες (χαρακτηριστικά) ΑριθµόςΜητρώου, Επώνυµο, Όνοµα, Πατρώνυµο, Ειδικότητα, Βαθµός, ΈτοςΓέννησης, ιεύθυνση, ΑΦΜ, Τηλέφωνο, Κινητό κ.ά., ενώ η οντότητα ΑΘΛΗΤΗΣ µπορεί να αποτελείται από τις ιδιότητες (χαρακτηριστικά) ΚωδικόςΑθλητή, Επώνυµο, Όνοµα, Πατρώνυµο, Αγώνισµα, Επίδοση, Σύλλογος, ΈτοςΓέννησης, ιεύθυνση, Τηλέφωνο, Κινητό κ.ά. ΑΜ ΕΠΩΝΥΜΟ ΕΙ ΙΚΟΤΗΤΑ #ΑΦΜ ΓΙΑΤΡΟΣ ΠΑΤΡΩΝΥΜΟ ΟΝΟΜΑ ΙΕΥΘΥΝΣΗ ΕΤΟΣ ΓΕΝΝΗΣΗΣ Σχήµα 1.3: ιάγραµµα οντότητας µε τις ιδιότητες της Απ όλες τις ιδιότητες µιας οντότητας, υπάρχει µία µόνο ιδιότητα, και σπανιότερα ένας συνδυασµός δύο ή και περισσοτέρων ιδιοτήτων, η τιµή της οποίας είναι µοναδική και προσδιορίζει την κάθε εµφάνιση (στιγµιότυπο) της οντότητας και αποκαλείται πρωτεύον κλειδί (primary key). Το πρωτεύον κλειδί εµφανίζεται στα διαγράµµατα µε υπογράµµιση ή µε έντονη γραφή ή έχει ως πρόθεµα τον χαρακτήρα #. Στο διάγραµµα οντοτήτων συσχετίσεων οι ιδιότητες απεικονίζονται µε σχήµατα ελλειπτικής µορφής, τα οποία ενώνονται µε ευθείες γραµµές µε την οντότητα στην οποία ανήκουν (Σχήµα 1.3) Τα Κλειδιά Όπως είδαµε και νωρίτερα, µε τον όρο κλειδί (key) ή πιο σωστά πρωτεύον κλειδί (primary key) αναφερόµαστε σε µια ιδιότητα (πεδίο), ή σπανιότερα σ ένα σύνολο ιδιοτήτων (πεδίων), η τιµή της οποίας είναι µοναδική σ ολόκληρη την οντότητα (πίνακας). Στην πράξη, το πρωτεύον κλειδί έχει διαφορετική τιµή για κάθε εµφάνιση της οντότητας ή για κάθε γραµµή (εγγραφή) του πίνακα και ποτέ δεν µπορεί να έχει µηδενική (κενή) 33

34 τιµή (null). Προσοχή, άλλο πράγµα είναι ο αριθµός 0 και άλλο πράγµα είναι η κενή τιµή (null), δηλ. η µη ύπαρξη τιµής. Ο συνδυασµός δύο ή και περισσοτέρων ιδιοτήτων (πεδίων) για τη δηµιουργία ενός πρωτεύοντος κλειδιού αποκαλείται σύνθετο κλειδί. Ένα παράδειγµα σύνθετου κλειδιού θα µπορούσε να είναι ο συνδυασµός των ιδιοτήτων Επώνυµο, Όνοµα και Πατρώνυµο, εφόσον φυσικά είµαστε απολύτως βέβαιοι ότι δεν υπάρχουν δύο ή και περισσότερα άτοµα µε κοινές τιµές στις παραπάνω ιδιότητες. Ξένο κλειδί αποκαλείται µια ιδιότητα (πεδίο) που είναι πρωτεύον κλειδί σε µια οντότητα (πίνακας) αλλά που υπάρχει και σε µια άλλη οντότητα (πίνακας) σαν απλή ιδιότητα. Τα ξένα κλειδιά είναι απαραίτητα για να µπορέσουµε να κάνουµε τις συσχετίσεις (συνδέσεις, επικοινωνίες) ανάµεσα στις οντότητες (πίνακες). Για παράδειγµα, στην οντότητα ΣΥΛΛΟΓΟΣ, το πεδίο ΚωδικόςΣυλλόγου είναι πρωτεύον κλειδί, ενώ στην οντότητα ΑΘΛΗΤΗΣ, το πεδίο ΚωδικόςΣυλλόγου είναι ξένο κλειδί και είναι απαραίτητο για να µπορέσουµε να υλοποιήσουµε τη συσχέτιση ΑΝΗΚΕΙ, δηλ. να αντλήσουµε την πληροφορία ποιοι αθλητές ανήκουν σε ποιους συλλόγους. Προφανώς, στην οντότητα ΣΥΛΛΟΓΟΣ, το πεδίο Κωδικός Συλλόγου θα έχει µοναδικές τιµές, ενώ στην οντότητα ΑΘΛΗΤΗΣ, το πεδίο Κωδικός Συλλόγου θα έχει επαναλαµβανόµενες τιµές και αυτό γιατί πολλοί αθλητές θα ανήκουν στον ίδιο σύλλογο, αλλά ένας αθλητής ανήκει υποχρεωτικά σ έναν και µόνο έναν σύλλογο. Σ ένα άλλο παράδειγµα, στην οντότητα ΓΙΑΤΡΟΣ, το πεδίο ΚωδικόςΓιατρού είναι πρωτεύον κλειδί, ενώ στην οντότητα ΑΣΘΕΝΗΣ, το πεδίο ΚωδικόςΓιατρού είναι ξένο κλειδί και είναι απαραίτητο για να µπορέσουµε να υλοποιήσουµε τη συσχέτιση ΠΑΡΑΚΟΛΟΥΘΕΙΤΑΙ, δηλ. να αντλήσουµε την πληροφορία ποιοι ασθενείς παρακολουθούνται από ποιους γιατρούς. Προφανώς, στην οντότητα ΓΙΑΤΡΟΣ, το πεδίο ΚωδικόςΓιατρού θα έχει µοναδικές τιµές, ενώ στην οντότητα ΑΣΘΕΝΗΣ, το πεδίο ΚωδικόςΓιατρού θα έχει επαναλαµβανόµενες τιµές και αυτό γιατί πολλοί ασθενείς θα 34

35 παρακολουθούνται από τον ίδιο γιατρό, αλλά ένας ασθενής παρακολουθείται µόνο από έναν γιατρό (Σχήµα 1.4). ΓΙΑΤΡΟΣ 1 ΠΑΡΑΚΟΛΟΥΘΕΙΤΑΙ Μ ΑΣΘΕΝΗΣ #ΚΩ. ΓΙΑΤΡΟΥ ΠΡΩΤΕΥΩΝ ΚΛΕΙ Ι ΞΕΝΟ ΚΛΕΙ Ι #ΚΩ. ΓΙΑΤΡΟΥ Σχήµα 1.4: Συσχέτιση οντοτήτων ΓΙΑΤΡΟΣ - ΑΣΘΕΝΗΣ Αυτό αποτελεί βέβαια µια παραδοχή που κάνουµε για να µπορέσουµε να υλοποιήσουµε µια συσχέτιση σαν την παραπάνω σε µια βάση δεδοµένων ενός Νοσοκοµείου, αλλά µπορεί να θεωρήσει κάποιος ότι ένας ασθενής µπορεί να παρακολουθείται από πολλούς γιατρούς ταυτόχρονα, οπότε θα πρέπει να µεταβάλλουµε και τον τρόπο συσχέτισης των παραπάνω οντοτήτων Οι Συσχετίσεις Μεταξύ Οντοτήτων Ο σωστός σχεδιασµός και προσδιορισµός των οντοτήτων και των ιδιοτήτων τους αποτελούν τα θεµελιώδη βήµατα για τη σωστή σχεδίαση και υλοποίηση µιας βάσης δεδοµένων. Μια συσχέτιση συνδέει δύο ή και περισσότερες οντότητες µεταξύ τους και παριστάνεται στο διάγραµµα οντοτήτων συσχετίσεων µ έναν ρόµβο. Οι συσχετίσεις είναι απαραίτητες για να µπορέσουµε να αντλήσουµε πληροφορίες που αφορούν δύο ή και περισσότερες οντότητες, όπως για παράδειγµα ποιοι πελάτες έκαναν παραγγελίες κάποια συγκεκριµένη χρονική περίοδο (συσχέτιση ΠΑΡΑΓΓΕΛΝΕΙ) ή ποιοι αθλητές ανήκουν σε ποιους συλλόγους (συσχέτιση ΑΝΗΚΕΙ) ή ποιοι αθλητές έλαβαν µέρος σε αγωνίσµατα µια συγκεκριµένη χρονιά (συσχέτιση ΣΥΜΜΕΤΕΧΕΙ) κοκ. Όταν οι οντότητες που συµµετέχουν σε µια συσχέτιση είναι δύο, η συσχέτιση αποκαλείται διµελής ή δυαδική. Ο βαθµός µιας συσχέτισης είναι 35

36 ίσος µε το πλήθος των οντοτήτων που συµµετέχουν σ αυτήν. Μια συσχέτιση µπορεί και η ίδια να έχει ιδιότητες που να περιγράφουν ορισµένα χαρακτηριστικά της, όπως για παράδειγµα η συσχέτιση ΠΑΡΑΓΓΕΛΙΑ ανάµεσα στις οντότητες ΠΕΛΑΤΗΣ και ΠΡΟΪΟΝ µπορεί να περιέχει τις ιδιότητες (πεδία) ΚωδικόςΠελάτη, ΚωδικόςΠροϊόντος, ΚωδικόςΠαραγγελίας, ΗµεροµηνίαΠαραγγελίας, Ποσότητα κ.ά. Στην περίπτωση αυτή το σωστό είναι να δηµιουργήσουµε µια ακόµα οντότητα, την οντότητα ΠΑΡΑΓΓΕΛΙΑ, η οποία και θα περιέχει όλες τις παραπάνω ιδιότητες, και να µετονοµάσουµε την προηγούµενη συσχέτιση από ΠΑΡΑΓΓΕΛΙΑ σε ΣΥΝΑΛΛΑΓΗ, που δεν θα περιέχει τώρα ιδιότητες. Έτσι, η παραπάνω συσχέτιση θα µετατραπεί από διµελή σε τριµελή. Όταν σχεδιάζουµε µια βάση δεδοµένων, θα πρέπει να εκχωρούµε ιδιότητες µόνο στις οντότητες και να έχουµε τις συσχετίσεις απλά και µόνο για να κατανοούµε τις λογικές συνδέσεις ανάµεσα στις οντότητες Οι ιµελείς Συσχετίσεις Οι διµελείς συσχετίσεις µεταξύ οντοτήτων είναι αυτές που θα µας απασχολήσουν ιδιαίτερα και υπάρχουν τρία βασικά είδη συνδέσεων σ αυτές, τα εξής: Ένα-προς-ένα (1:1), όπου µια εµφάνιση της µιας οντότητας συνδέεται µε µία και µόνο µία εµφάνιση της άλλης οντότητας. Για παράδειγµα, η οντότητα ΣΥΛΛΟΓΟΣ έχει έναν µόνο προπονητή, ενώ η οντότητα ΠΡΟΠΟΝΗΤΗΣ συνδέεται µ έναν και µόνο έναν σύλλογο. Σ ένα άλλο παράδειγµα, η οντότητα ΝΟΜΟΣ έχει µία µόνο πόλη σαν πρωτεύουσα, ενώ η οντότητα ΠΡΩΤΕΥΟΥΣΑ αντιστοιχεί σ έναν και µόνο έναν νοµό. Στην περίπτωση των διµελών συσχετίσεων του τύπου ένα-προς-ένα, µπορούµε να ενώσουµε τα στοιχεία και των δύο ιδιοτήτων και να δηµιουργήσουµε µια µοναδική οντότητα (πίνακα). Ένα-προς-πολλά (1:Μ), όπου µια εµφάνιση της µιας οντότητας συνδέεται µε πολλές εµφανίσεις της άλλης οντότητας αλλά κάθε εµφάνιση της δεύτερης οντότητας συνδέεται µε µία και µόνο µία εµφάνιση της πρώτης οντότητας. Για παράδειγµα, ένας ΠΕΛΑΤΗΣ κάνει πολλές παραγγελίες, αλλά µια ΠΑΡΑΓΓΕΛΙΑ αντιστοιχεί σ έναν και µόνο έναν πελάτη. Σ ένα άλλο 36

37 παράδειγµα, ένας ΣΥΛΛΟΓΟΣ έχει πολλούς αθλητές, αλλά ένας ΑΘΛΗΤΗΣ ανήκει σ έναν και µόνο έναν σύλλογο. Οι διµελείς συσχετίσεις του τύπου έναπρος-ένα είναι οι πιο συχνά συναντώµενες και οι πιο βολικές στη διαχείριση. Πολλά-προς-πολλά (Μ:Ν), όπου σε µια εµφάνιση της µιας οντότητας αντιστοιχούν πολλές εµφανίσεις της άλλης οντότητας και σε κάθε εµφάνιση της δεύτερης οντότητας αντιστοιχούν πολλές εµφανίσεις της πρώτης οντότητας. Για παράδειγµα, ένας ΑΘΛΗΤΗΣ συµµετέχει σε πολλούς αγώνες αλλά και σ έναν ΑΓΩΝΑ λαµβάνουν µέρος πολλοί αθλητές. Σ ένα άλλο παράδειγµα, ένας ΚΑΘΗΓΗΤΗΣ διδάσκει σε πολλούς µαθητές αλλά και ένας ΜΑΘΗΤΗΣ διδάσκεται από πολλούς καθηγητές. Για να µπορέσουµε να διαχειριστούµε µια διµελή σχέση του τύπου πολλά-προς-πολλά, θα πρέπει να δηµιουργήσουµε έναν τρίτο πίνακα που θα περιέχει δύο µόνο ιδιότητες (πεδία), δηλ. τα πεδία κλειδιά των δύο οντοτήτων, οπότε ο συνδυασµός τους θα είναι και το πεδίο κλειδί (σύνθετο κλειδί) του νέου πίνακα Το ιάγραµµα Οντοτήτων Συσχετίσεων Για να µπορέσουµε να διαµορφώσουµε το διάγραµµα οντοτήτων συσχετίσεων, θα πρέπει να ακολουθήσουµε τα εξής βήµατα : Να ορίσουµε τις οντότητες (πίνακες) που θα ανήκουν στη βάση δεδοµένων που θέλουµε να δηµιουργήσουµε. Να ορίσουµε τις ιδιότητες (πεδία) και τα πρωτεύοντα κλειδιά της κάθε οντότητας (πίνακα). Να ορίσουµε τις συσχετίσεις ανάµεσα στις οντότητες. ηµιουργούµε το διάγραµµα οντοτήτων συσχετίσεων, όπου θα απεικονίσουµε τις οντότητες, τις ιδιότητές τους και τις συσχετίσεις τους. Θα δούµε το διάγραµµα οντοτήτων συσχετίσεων (Σχήµα 1.5) για µια βάση δεδοµένων µε οµάδες (συλλόγους) ποδοσφαίρου, όπου θα έχουµε τις οντότητες ΑΘΛΗΤΗΣ, ΣΥΛΛΟΓΟΣ, ΠΡΟΠΟΝΗΤΗΣ και ΑΓΩΝΑΣ. Οι συσχετίσεις ανάµεσα στις οντότητες αυτές θα είναι οι εξής : ΑΘΛΗΤΗΣ ΣΥΛΛΟΓΟΣ : ένα-προς-πολλά (1:Μ) ΣΥΛΛΟΓΟΣ ΠΡΟΠΟΝΗΤΗΣ : ένα-προς-ένα (1:1) ΑΘΛΗΤΗΣ ΑΓΩΝΑΣ : πολλά-προς-πολλά (Μ:Ν) 37

38 ΑΘΛΗΤΗΣ Κ 1 ΕΠΟΠΤΕΥΕΙ ΠΡΟΠΟΝΗΤΗΣ Μ ΠΑΙΖΕΙ 1 1 Ιδιότητες των οντοτήτων ΑΝΗΚΕΙ Ν Μ 1 ΑΓΩΝΑΣ Συσχετίσεις ΣΥΛΛΟΓΟΣ Σχήµα 1.5: ιάγραµµα οντοτήτων - συσχετίσεων Λογικός Σχεδιασµός µιας Βάσης εδοµένων Αφού έχουµε δηµιουργήσει το διάγραµµα οντοτήτων συσχετίσεων και έχουµε επιλέξει το σχεσιακό µοντέλο δεδοµένων για την υλοποίηση της βάσης δεδοµένων, ακολουθούµε τη διαδικασία της κανονικοποίησης και είµαστε έτοιµοι για την καταχώριση των στοιχείων της βάσης δεδοµένων. Ανάλογα τώρα µε το είδος της διµελούς συσχέτισης, διακρίνουµε τις εξής περιπτώσεις ως προς τον λογικό σχεδιασµό που θα πρέπει να ακολουθήσουµε : Αν η συσχέτιση των δύο πινάκων είναι ένα-προς-ένα, τότε µπορούµε είτε να συνενώσουµε τους δύο πίνακες, µε τις αντίστοιχες εγγραφές φυσικά, ή να προσθέσουµε το ένα από τα δύο πεδία κλειδιά σαν ξένο κλειδί στον άλλον πίνακα ή τέλος να δηµιουργήσουµε έναν καινούργιο πίνακα µε µόνα πεδία τα πεδία κλειδιά των δύο πινάκων (σύνθετο κλειδί). Η προτιµότερη διαδικασία είναι η πρώτη, δηλ. η συνένωση των δύο πινάκων σ έναν ενιαίο πίνακα. Αν η συσχέτιση των δύο πινάκων είναι ένα-προς-πολλά, τότε µπορούµε είτε να προσθέσουµε το ένα από τα δύο πεδία κλειδιά σαν ξένο κλειδί στον άλλον πίνακα ή να δηµιουργήσουµε έναν καινούργιο πίνακα µε µόνα πεδία τα πεδία κλειδιά των δύο πινάκων (σύνθετο κλειδί). Η 38

39 προτιµότερη διαδικασία είναι η πρώτη, δηλ. η προσθήκη του ξένου κλειδιού στην πλευρά πολλά της σχέσης. Αν η συσχέτιση των δύο πινάκων είναι πολλά-προς-πολλά, τότε το µόνο που µπορούµε και πρέπει να κάνουµε είναι να δηµιουργήσουµε έναν καινούργιο πίνακα µε µόνα πεδία τα πεδία κλειδιά των δύο πινάκων (σύνθετο κλειδί), όπου το κάθε πεδίο κλειδί από µόνο του γίνεται ξένο κλειδί. Οι δύο αρχικοί πίνακες δεν µεταβάλλονται Η Κανονικοποίηση Τα προβλήµατα που είναι πιθανό να παρουσιασθούν κατά τη διαδικασία της υλοποίησης του σχεδιασµού µιας βάσης δεδοµένων είναι η περιττή (άσκοπη) επανάληψη πληροφοριών, που είναι γνωστή µε τον όρο redundancy, καθώς και δυσκολίες στην ενηµέρωση της βάσης δεδοµένων. Τα παραπάνω προβλήµατα είναι γνωστά ως πλεονασµοί δεδοµένων και ανωµαλίες ενηµέρωσης και για να αντιµετωπιστούν µε επιτυχία, θα πρέπει να διασπάσουµε τις µεγάλες σχέσεις σε µικρότερες. Αυτό γίνεται µε τη διαδικασία της κανονικοποίησης, έτσι ώστε η βάση δεδοµένων να είναι έτοιµη για καταχώριση στοιχείων. Η κανονικοποίηση (normalization) είναι µια τεχνική που ασχολείται µε την ανάλυση των σχέσεων (συσχετίσεων) σε µια βάση δεδοµένων, όπου κάνουµε µετατροπή των αρχικών µεγάλων σχέσεων σε µικρότερες Πλεονασµός εδοµένων και Ανωµαλίες Ενηµέρωσης Με τον όρο πλεονασµός δεδοµένων (data redundancy) εννοούµε την άσκοπη επανάληψη στοιχείων (πληροφοριών). Τα προβλήµατα που προκύπτουν από τον πλεονασµό δεδοµένων είναι γνωστά µε τον όρο ανωµαλίες ενηµέρωσης (update anomalies). Για να µπορέσουµε να κατανοήσουµε τις παγίδες του πλεονασµού δεδοµένων, θα δούµε ένα παράδειγµα µε τους πίνακες ΠΕΛΑΤΗΣ και ΠΑΡΑΓΓΕΛΙΑ. Η σχέση µεταξύ τους είναι ένα-προς-πολλά, δηλ. ένας πελάτης µπορεί να κάνει πολλές παραγγελίες, αλλά µια παραγγελία γίνεται µόνο από έναν πελάτη. Αν αποφασίσουµε να δηµιουργήσουµε έναν µόνον πίνακα, όπου σε κάθε γραµµή (εγγραφή) του θα υπάρχουν όλα τα στοιχεία της παραγγελίας και δίπλα όλα τα στοιχεία του πελάτη που έχει κάνει την παραγγελία, τότε θα 39

40 έχουµε πέσει στην παγίδα του πλεονασµού δεδοµένων και αυτό γιατί τα στοιχεία του κάθε πελάτη θα επαναλαµβάνονται για κάθε παραγγελία που έχει κάνει. Ανωµαλία εισαγωγής έχουµε στην περίπτωση που θελήσουµε να καταχωρήσουµε µια καινούργια παραγγελία, οπότε θα πρέπει να καταχωρήσουµε εκ νέου κι όλα τα στοιχεία του πελάτη που έκανε τη συγκεκριµένη παραγγελία, κάτι που είναι κουραστικό, χρονοβόρο και περιέχει τον κίνδυνο λαθών. Ένα άλλο πρόβληµα µε ανωµαλία εισαγωγής έχουµε στην περίπτωση που θελήσουµε να καταχωρήσουµε ένα καινούργιο πελάτη ο οποίος δεν έχει κάνει ακόµα καµία παραγγελία, οπότε η βάση δεδοµένων δεν θα µας το επιτρέψει και αυτό γιατί δεν δέχεται κενή τιµή (null) για το πεδίο κλειδί Κωδικός Παραγγελίας. Ανωµαλία διαγραφής έχουµε στην περίπτωση που θελήσουµε να διαγράψουµε µια παραγγελία που είναι η µοναδική ενός πελάτη, οπότε θα χάσουµε και όλες τις πληροφορίες του συγκεκριµένου πελάτη. Ανωµαλία τροποποίησης έχουµε στην περίπτωση που θελήσουµε να αλλάξουµε κάποιο στοιχείο ενός πελάτη, όπως τη διεύθυνση ή το τηλέφωνό του, οπότε θα πρέπει να τροποποιήσουµε όλες τις εγγραφές του πίνακα όπου εµφανίζεται ο συγκεκριµένος πελάτης. Αν δεν κάνουµε την αλλαγή σ όλες τις εγγραφές, τότε ο πελάτης θα εµφανίζεται να έχει δύο διευθύνσεις ή δύο τηλέφωνα κοκ. Μιλάµε τότε για µη συνεπή (inconsistent) βάση δεδοµένων. Ως γνωστόν, η λύση στο παραπάνω πρόβληµα είναι να δηµιουργήσουµε έναν πίνακα µε τα στοιχεία των πελατών και έναν ξεχωριστό πίνακα µε τα στοιχεία των παραγγελιών, όπου θα υπάρχει και σαν πεδίο (ξένο κλειδί) ο ΚωδικόςΠελάτη Η ιαδικασία της Κανονικοποίησης Η µέθοδος της κανονικοποίησης βοηθάει στον λογικό σχεδιασµό µιας βάσης δεδοµένων και είναι συµπληρωµατική του µοντέλου οντοτήτων συσχετίσεων. Το κέρδος για µας είναι ότι δεν υπάρχουν προβλήµατα συνέπειας, πλεονασµού και εγκυρότητας των πληροφοριών της βάσης δεδοµένων. Ακολουθώντας τη διαδικασία της κανονικοποίησης κάνουµε 40

41 συνεχείς διασπάσεις των πινάκων σε πιο απλές και συµπαγείς µορφές, µε στόχο πάντα να αποφύγουµε τον πλεονασµό (επανάληψη) των δεδοµένων. Αφαιρούµε πεδία από τις αρχικές µεγάλες σχέσεις και τα τοποθετούµε σε νέες σχέσεις έτσι ώστε να µπορούµε να έχουµε τις ίδιες πληροφορίες και µε τις νέες σχέσεις. Μπορούµε να πούµε ότι κανονικοποίηση (normalization) είναι η διαδικασία µετατροπής των δεδοµένων κάποιων σχέσεων (πινάκων) σε πιο απλές και πιο σαφείς σχέσεις, χωρίς πλεονασµούς (επαναλήψεις) των δεδοµένων. Οι βασικές µορφές της κανονικοποίησης είναι τρεις, η πρώτη (1η NF), η δεύτερη (2η NF) και η τρίτη (3η NF) Σύνοψη Σε αυτό το κεφάλαιο έγινε µια περιγραφή των γενικών χαρακτηριστικών που διέπουν µια Βάση εδοµένων και ποια είναι τα προβλήµατα τα οποία µπορούν να δηµιουργηθούν από την επεξεργασία αυτής. Παράλληλα εισήχθησαν νέες έννοιες (όπως η έννοια Μοντέλο Οντοτήτων Συσχετίσεων), οι οποίες θα µας βοηθήσουν στις παρακάτω ενότητες να κατανοήσουµε την και να επεξεργαστούµε την πληροφορία µιας Βάσης εδοµένων. Παράλληλα η περιγραφή µιας Βάσης εδοµένων δεν αρκεί για να κατανοηθεί πλήρως το µέγεθος της πληροφορίας το οποίο µπορεί να παραχθεί και να αξιοποιηθεί κατάλληλα. Γι αυτό κρίνεται αναγκαία η εισαγωγή στην έννοια του προγραµµατισµού ιστοσελίδων (Web Sites) και του εργαλείου που λέγεται HTML. 41

42 3. ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΓΛΩΣΣΑΣ HTML Η HTML (HyperText Markup Language - γλώσσα σήµανσης υπερκειµένου) είναι η παγκόσµια γλώσσα που χρησιµοποιείται για έκδοση υπερκειµένου στον Παγκόσµιο Ιστό (WorldWide Web). Υπερ-κείµενο (hypertext) είναι γενικά πληροφορία που, κατευθείαν από την οπτική της αναπαράσταση, µπορούµε να κατευθυνθούµε σε άλλη πληροφορία σχετική µ'αυτήν. Η HTML είναι βασισµένη στην SGML (Standard Generalized Markup Language - Πρότυπη Γενικευµένη Γλώσσα Σήµανσης, µία γλώσσα για τον ορισµό της δοµής ηλεκτρονικών κειµένων σε ηλεκτρονική µορφή και τη διαχείρισή τους). Η δηµιουργία και επεξεργασία της γίνεται µε ποικιλία εργαλείων, από απλούς συντάκτες (editors) µέχρι εξειδικευµένα προγράµµατα συγγραφής. Η HTML χρησιµοποιεί tags ("ετικέτες") όπως οι <h1>, </h1> για να δοµήσει κείµενο σε επικεφαλίδες, παραγράφους, λίστες, συνδέσµους κτλ Οδηγία (Tag) Tag ονοµάζουµε µία οδηγία γραµµένη σε HTML, την οποία πρέπει να αναγνωρίσει και ερµηνεύσει ο browser. Τα tags βρίσκονται πάντοτε µεταξύ των συµβόλων < και >. Τα αρχεία της HTML είναι απλά αρχεία κειµένου στα οποία υπάρχουν ειδικοί κώδικες, οι οποίοι ονοµάζονται ετικέτες (tags), που δηλώνουν στον browser τον τρόπο µε τον οποίο θα εµφανιστούν τα αρχεία αυτά. Οι ετικέτες έχουν την παρακάτω γενική δοµή: <όνοµα_ετικέτας>κείµενο</όνοµα_ετικέτας> Με το όνοµα_ετικέτας δηλώνεται στον browser η ενέργεια που θα εκτελεστεί στο κείµενο. Για να δηλώσουµε το σηµείο που θα σταµατήσει να εκτελείτε η ενέργεια αυτή χρησιµοποιούµε την αντίστοιχη ετικέτα κλεισίµατος </όνοµα_ετικέτας>. Υπάρχουν περιπτώσεις ετικετών HTML που δεν έχουν ετικέτα κλεισίµατος, π.χ. όταν θέλουµε να εισάγουµε µία εικόνα απλά δηλώνουµε την ενέργεια αυτή µε την αντίστοιχη HTML ετικέτα η ετικέτα κλεισίµατος στην περίπτωση αυτή δεν έχει κανένα νόηµα. Αντίθετα, όταν θέλουµε να κάνουµε ένα κείµενο να έχει έντονη γραφή τότε πρέπει να συµπεριλάβουµε το κείµενο εντός της αντίστοιχης HTML ετικέτας. 42

43 Στο όνοµα ετικέτας δε γίνεται διάκριση ανάµεσα σε πεζούς και κεφαλαίους χαρακτήρες. Οποιοσδήποτε συνδιασµός είναι αποδεκτός Π.χ. οι ετικέτες <html>, <HTML> ή <HtMl> είναι ισοδύναµες Πώς κατασκευάζεται µια απλή Web σελίδα Ένα αρχείο HTML περιέχεται µέσα στην ετικέτα <HTML> </HTML> και αποτελείται από δύο ξεχωριστά µέρη: το <HEAD> </HEAD> στο οποίο περιέχονται πληροφορίες που αφορούν το ίδιο το αρχείο και όχι το τι θα εµφανιστεί στην οθόνη του browser, και το <BODY> </BODY> στο οποίο περιέχεται ότι θα εµφανιστεί στην σελίδα. Πριν δείξουµε τα παραπάνω µε ένα παράδειγµα, θα αναφερθούµε σε µία άλλη ετικέτα, την <TITLE>Τίτλος</TITLE>. Η ετικέτα αυτή εµφανίζει τον Τίτλο στην µπάρα τίτλου του browser. Η ετικέτα αυτή δεν εµφανίζει κάποιο κείµενο στην οθόνη και βρίσκεται µέσα στην <HEAD> <HEAD>. Όπως αναφέραµε και παραπάνω ένα αρχείο HTML είναι ένα αρχείο κειµένου (ASCII). Εποµένως, για να δηµιουργήσουµε το πρώτο µας παράδειγµα HTML αρκεί να ανοίξουµε έναν επεξεργαστή κειµένου, να πληκτρολογήσουµε το κείµενό µας, να το αποθηκεύσουµε σε ένα αρχείο µε κατάληξη.htm ή.html και στη συνέχεια να το εµφανίσουµε κάνοντας χρήση του browser. Παρακάτω δίνεται ο κώδικας σε HTML της πρώτης µας σελίδας. Στο παράδειγµα αυτό εµφανίζεται το κείµενο «Μέσα στην ετικέτα body γράφουµε το κείµενο που θέλουµε να εµφανίζεται στη σελίδα.» στον browser. Επίσης, στη µπάρα τίτλου εµφανίζεται το κείµενο «Τίτλος... Εµφανίζοµαι µόνο στη µπάρα τίτλου». Στην αρχή γράφουµε σε έναν επεξεργαστή κειµένου (text editor) το παρακάτω κείµενο (Σχήµα 3.1): 43

44 <html> <head> <title> Τίτλος... Εµφανίζοµαι µόνο στη µπάρα τίτλου </title> </head> <body> Μέσα στην ετικέτα body γράφουµε το κείµενο που θέλουµε να εµφανίζεται στη σελίδα. </body> </html> 3.3. Επικεφαλίδες Σχήµα 3.1: Βασικές ετικέτες της HTML Στη συνέχεια θα περιγράψουµε τη δηµιουργία επικεφαλίδων (headings), οι οποίες χρησιµοποιούνται για την µορφοποίηση του κειµένου που εµφανίζεται στην σελίδα. Για να δηµιουργήσουµε µία επικεφαλίδα χρησιµοποιούµε την ετικέτα <hn> </hn>, όπου το N είναι ένας αριθµός από το 1 έως και το 6. Η επικεφαλίδα <h1> </h1> είναι η πιο σηµαντική. Όσο αυξάνεται το N τόσο λιγότερο σηµαντική γίνεται η επικεφαλίδα. Παρακάτω δείχνουµε, µε ένα παράδειγµα (Σχήµα 3.2), τον τρόπο µε τον οποίο εµφανίζονται διάφορα επίπεδα επικεφαλίδων στον Browsers µας (πχ. Internet Explorer): <html> <head> <title>πίνακας Περιεχοµένων</title> </head> <body> <h1>κεφάλαιο 1: Τα βασικά της HTML</h1> <h2>ενότητα 1.1: Ετικέτες (tags)</h2> <h2>ενότητα 1.2: οµή ενός εγγράφου HTML</h2> <h2>ενότητα 1.3: Επικεφαλίδες</h2> <h2>ενότητα 1.4: ιαχωριστικά</h2> <h3>παράγραφος 1.4.1: Παράγραφοι</h3> <h3>παράγραφος 1.4.2: Οριζόντιες γραµµές</h3> <h3>παράγραφος 1.4.3: Αλλαγή γραµµής</h3> </body> </html> Σχήµα 3.2: Παράδειγµα µε επικεφαλίδες της HTML 44

45 3.4. ιαχωριστικά Η HTML γενικά αγνοεί τα κενά διαστήµατα ή και τις αλλαγές γραµµής. Για τη δηµιουργία τµηµάτων κειµένου, τα οποία θα είναι αυτοδύναµα, γίνεται χρήση διαχωριστικών. Ένα διαχωριστικό του κειµένου είναι οι παράγραφοι. Οι παράγραφοι διαχωρίζουν το κείµενο µέσω της εµφάνισης µίας κενής γραµµής και δηλώνονται µέσω της ετικέτας <p> </p>. Στις επικεφαλίδες δεν είναι απαραίτητη η χρήση της ετικέτας παραγράφου, αφού η επικεφαλίδα είναι από µόνη της ένα ξεχωριστό κοµµάτι κειµένου. Τέλος, αν και η ετικέτα τερµατισµού </p> είναι προαιρετική καλό είναι να χρησιµοποιείται (γιατί σε περίπτωση που χρησιµοποιείται κάποια µέθοδος στοίχισης κειµένου η παρουσία της είναι υποχρεωτική ). Ένας άλλος τρόπος διαχωρισµού του κειµένου είναι και οι οριζόντιες γραµµές (horizontal rules). Οι οριζόντιες γραµµές δηλώνονται µέσω της ετικέτας <hr>. Η ετικέτα αυτή δεν έχει αντίστοιχη ετικέτα τερµατισµού. Παρόµοια λειτουργία µε την παράγραφο έχει και η ετικέτα αλλαγής γραµµής <br>. Όµως, σε αντίθεση µε την παράγραφο, δεν αφήνουµε κενή γραµµή. Το παράδειγµα που ακολουθεί αποτελείται από δύο τµήµατα, τα οποία χωρίζονται µέσω µίας οριζόντιας γραµµής. Και τα δύο τµήµατα εµφανίζουν το ίδιο κείµενο, αλλά µε χρήση διαφορετικών ετικετών µορφοποίησης - διαχωρισµού. Στο πρώτο τµήµα γίνεται χρήση παραγράφων, ενώ στο δεύτερο αλλαγή γραµµής και επικεφαλίδων. Στον κώδικα του παραδείγµατος (Σχήµα 3.3) αυτού εισάγεται και η έννοια του σχόλιου. Ένα σχόλιο είναι ένα κείµενο το οποίο για τον browser είναι σαν να µην υπάρχει, αλλά χρησιµοποιείται από κάποιον ως διευκρίνιση για αυτόν που διαβάζει τον κώδικα. Ένα σχόλιο περιέχεται µέσα στα <!-- και -- > και µπορεί να καταλαµβάνει περισσότερες από µία γραµµές. 45

46 <html> <head> <title> ιαχωρισµός κειµένου </title> </head> <body> <!-- Πρώτο τµήµα... Το κείµενο διαχωρίζεται µέσω παραγράφων --> Η σελίδα αυτή περιέχει δύο τµήµατα. <p> Στο πρώτο τµήµα ο διαχωρισµός του κειµένου γίνεται µέσω χρήσης παραγράφων, <p> ενώ στο δεύτερο ο διαχωρισµός γίνεται µέσω της επικεφαλίδας 3 και αλλαγής γραµµής. <!-- Οριζόντια γραµµή --> <hr> <!-- εύτερο τµήµα... Το κείµενο διαχωρίζεται µέσω αλλαγών γραµµής και επικεφαλίδων --> <h3> Η σελίδα αυτή περιέχει δύο τµήµατα. </h3> Στο πρώτο τµήµα ο διαχωρισµός του κειµένου γίνεται µέσω χρήσης παραγράφων, <br> ενώ στο δεύτερο ο διαχωρισµός γίνεται µέσω της επικεφαλίδας 3 και αλλαγής γραµµής. </body> </html> 3.5. Ετικέτες στυλ Σχήµα 3.3: Η έννοια του σχόλιου στην HTML Εκτός από τις παραγράφους και τις επικεφαλίδες, όταν θέλουµε να δώσουµε έµφαση σε κάποιο κείµενο µπορούµε να χρησιµοποιήσουµε και τις ετικέτες στυλ της HTML. Οι πιο βασικές είναι οι <b> </b>, που κάνει το κείµενο να εµφανίζεται µε έντονη γραφή, η <i> </i> που κάνει το κείµενο να εµφανίζεται µε πλάγια γραφή, και η <tt> </tt> που κάνει το κείµενο να εµφανίζεται σαν κείµενο γραφοµηχανής. Στο παράδειγµα (Σχήµα 3.4) που ακολουθεί γίνεται χρήση και των τριών ετικετών στυλ, για να δοθεί έµφαση στο κείµενο. 46

47 3.6. Λίστες <html> <head> <title> Ετικέτες στυλ </title> </head> <body> Στην HTML µπορεί το κείµενο να εµφανίζεται σε <b> έντονη </b> γραφή, σε <i> πλάγια </i> γραφή, ως <tt> κείµενο γραφοµηχανής, </tt> αλλά και σε διάφορους συνδυασµούς, όπως <b> <i> έντονο και πλάγιο </i> </b> ταυτόχρονα. </body> </html> Σχήµα 3.4: Παράδειγµα µε ετικέτες στύλ στην HTML Η HTML παρέχει επίσης και διάφορες µορφές λιστών, για την κατάταξη των αντικειµένων. Η µη αριθµηµένη λίστα (unordered list) δηλώνεται µε την ετικέτα <ul> </ul>, ενώ κάθε στοιχείο της πρέπει να περικλείεται µέσα σε µία ετικέτα <li> </li>. Κάθε στοιχείο της εµφανίζεται µε µία βούλα (ή µε κάποιο άλλο κοινό σύµβολο) µπροστά του. Στις αριθµηµένες λίστες (ordered lists) εµφανίζεται ένας αριθµός µπροστά από κάθε στοιχείο της λίστας. Η µόνη διαφορά στη δηµιουργία τους, σε σχέση µε τις µη αριθµηµένες λίστες, είναι ότι χρησιµοποιείται η ετικέτα <οl> </οl> αντί της <ul> </ul>. Οι λίστες µπορούν να είναι ένθετες, δηλαδή µία λίστα µπορεί να περιέχεται εντός κάποιας άλλης. Σε περίπτωση που έχουµε ένθετες λίστες του ίδιου τύπου, το διακριτικό µπροστά από κάθε λίστα αλλάζει, ώστε να µπορεί να γίνεται διάκριση ανάµεσα στα στοιχεία της κάθε λίστας. Συγκεκριµένα, χρησιµοποιούµε µία αριθµηµένη λίστα για τις ενότητες του κεφαλαίου και µία µη αριθµηµένη λίστα για τις παραγράφους της κάθε ενότητας. Η µη αριθµηµένη λίστα είναι ένθετη εντός της αριθµηµένης λίστας (Σχήµα 3.5). 47

48 <html> <head> <title> Πίνακας Περιεχοµένων </title> </head> <body> <h2>κεφάλαιο 1: Τα βασικά της HTML</h2> <ol> <li>ετικέτες (tags)</li> <li> οµή ενός εγγράφου HTML</li> <li>επικεφαλίδες</li> <li> ιαχωριστικά</li> <ul> <li>παράγραφοι</li> <li>οριζόντιες γραµµές</li> <li>αλλαγή γραµµής</li> </ul> <li>ετικέτες στυλ</li> </ol> </body> </html> Σχήµα 3.5: Παράδειγµα µε λίστες στην HTML Εκτός από τις αριθµηµένες και τις µη αριθµηµένες λίστες, η HTML διαθέτει και µία τρίτη κατηγορία λιστών, τις λίστες ορισµών (definition lists), οι οποίες επιτρέπουν την δηµιουργία επεξηγήσεων για διάφορους ορισµούς. Στις λίστες αυτές δεν εµφανίζεται κάποιο διακριτικό σηµάδι, αλλά αντίθετα η επεξήγηση του κάθε ορισµού εµφανίζεται πιο µέσα από το υπόλοιπο κείµενο. Η λίστα ορισµών δηλώνεται µε την ετικέτα <dl> </dl>, και περιέχει ζεύγη ορισµού τίτλων, µέσω της ετικέτας <dt> </dt>, και αντίστοιχης επεξήγησης, µέσω της ετικέτας <dd> </dd>. Στο παρακάτω παράδειγµα (Σχήµα 3.6) δηµιουργούµε µία λίστα ορισµών για τρία ακρώνυµα σχετικά µε τις ιστοσελίδες: HTML, WWW και HTTP. 48

49 3.7. Εικόνες <html> <head> <title> Λίστα Ορισµών </title> </head> <body> <dl> <dt>www</dt> <dd>world Wide Web</dd> <dt>http</dt> <dd>hypertext Transfer Protocol</dd> <dt>html</dt> <dd>hypertext Markup Language</dd> </dl> </body> </html> Σχήµα 3.6: Παράδειγµα µε λίστες στην HTML Στις παραπάνω ενότητες αναφερθήκαµε σε δυνατότητες της HTML για τη µορφοποίηση του κειµένου. Στην ενότητα αυτή θα ασχοληθούµε µε την ενσωµάτωση εικόνων στις ιστοσελίδες µας. Ο browser (συνήθως) έχει τη δυνατότητα εµφάνισης εικόνων και γραφικών. Το µόνο που πρέπει να δηλώνεται στην ιστοσελίδα είναι η τοποθεσία στην οποία βρίσκεται η προς εµφάνιση εικόνα. Ιδιαίτερη προσοχή πρέπει να δοθεί στον τύπο της εικόνας (ο οποίος δηλώνεται και από την κατάληξη του αρχείου της εικόνας). Ο στάνταρ τύπος που µπορεί να εµφανίσει ο browser είναι ο GIF (Graphics Interchange Format), αλλά οι περισσότεροι browser υποστηρίζουν και τον τύπο JPEG (Joint Photographic Expert Group). Όταν γίνεται χρήση εικόνων σε ιστοσελίδες πρέπει να δίνεται ιδιαίτερη προσοχή στο συνολικό µέγεθος των αρχείων εικόνων που βρίσκονται σε µία ιστοσελίδα. Όσο µεγαλύτερο µέγεθος έχουν οι εικόνες και όσο πιο πολλά χρώµατα περιέχουν τόσο αυξάνεται το µέγεθος του αρχείου τους. Αυτό έχει ως αποτέλεσµα µία σελίδα που περιέχει πολλές εικόνες να αργεί να φορτωθεί στον browser, µε αποτέλεσµα οι χρήστες να περιµένουν µεγάλο χρονικό διάστηµα µέχρι να κατέβει η ιστοσελίδα. Μία καλή τεχνική είναι η ενσωµάτωση δεσµών υπερκειµένου προς τις εικόνες. Η σελίδα απλά µπορεί να περιέχει την εικόνα σε αρκετά µικρότερο µέγεθος - σε µικρογραφία (thumbnail). 49

50 Για την ενσωµάτωση µίας εικόνας σε µία ιστοσελίδα χρησιµοποιείται η ετικέτα <img src=όνοµα αρχείου εικόνας>. Στην ετικέτα αυτή δηλώνουµε το όνοµα του αρχείου της εικόνας, αλλά µπορούµε να δηλώσουµε και άλλα χαρακτηριστικά, όπως το ύψος και το πλάτος της. Π.χ. για την ενσωµάτωση του αρχείου contents.gif, χρησιµοποιούµε τον ακόλουθο κώδικα: <img src= contents.gif>. Στην HTML κάθε ετικέτα µπορεί να έχει διάφορα χαρακτηριστικά (attributes). Τα χαρακτηριστικά αυτά περιγράφουν µε µεγαλύτερη ακρίβεια τον τρόπο µε τον οποίο θα εµφανιστεί το αντίστοιχο κοµµάτι της ιστοσελίδας στον browser. Το χαρακτηριστικό src της ετικέτας <img> είναι ένα παράδειγµα για τον τρόπο δήλωσης των χαρακτηριστικών: τα χαρακτηριστικά κάθε ετικέτας βρίσκονται εντός των < και > της αρχικής δήλωσης της ετικέτας (και όχι της ετικέτας τερµατισµού), πρέπει να διαχωρίζονται από το όνοµα τις ετικέτας αλλά και από τα άλλα χαρακτηριστικά που τυχόν υπάρχουν στην ίδια ετικέτα, και είναι της µορφής: όνοµα_χαρακτηριστικού=τιµή_χαρακτηριστικού. Ένα από τα σηµαντικότερα χαρακτηριστικά της ετικέτας <img> είναι το alt. Με το χαρακτηριστικό αυτό δηλώνεται το κείµενο που θα εµφανιστεί στη θέση της εικόνας σε browsers που δεν υποστηρίζουν γραφικά. Στο προηγούµενο παράδειγµα, αν θέλουµε να εµφανίζεται το κείµενο «Περιεχόµενα» σε περίπτωση που ο browser δεν υποστηρίζει γραφικά, τότε προσθέτουµε το χαρακτηριστικό alt: <img src= contents.gif alt= Περιεχόµενα >. Τέλος, δύο άλλα χαρακτηριστικά της ετικέτας <img> που χρησιµοποιούνται συχνά είναι τα height και width, µε τα οποία δηλώνεται αντίστοιχα το ύψος και το πλάτος της εµφανιζόµενης εικόνας. Π.χ. αν θέλουµε στο προηγούµενο παράδειγµα η εικόνα να εµφανίζεται µε ύψος 40 pixels και πλάτος 100 pixels γράφουµε: <img src= contents.gif height=40 width=100 alt= Περιεχόµενα > 3.8. Στοίχιση κειµένου Στην HTML παρέχεται η δυνατότητα στοίχισης του κειµένου ένα κείµενο µπορεί να εµφανίζεται στο κέντρο της γραµµής, να είναι στοιχισµένο µόνο αριστερά, µόνο δεξιά ή αριστερά και δεξιά ταυτόχρονα. 50

51 Πολλές ετικέτες της HTML περιέχουν ένα χαρακτηριστικό align που µας επιτρέπει τη στοίχιση του κειµένου. Χαρακτηριστικά αναφέρουµε την ετικέτα παραγράφου <p> </p> και τις ετικέτες επικεφαλίδων <hn> </hn>. Οι τιµές που µπορεί να πάρει το χαρακτηριστικό align είναι center, left, right για τη στοίχιση του κειµένου στο κέντρο, στα αριστερά και στα δεξιά, αντίστοιχα, της γραµµής. Για τη στοίχιση κειµένου και εικόνων η ετικέτα <img> έχει επίσης ένα χαρακτηριστικό align. ίνοντας τιµές left και right στο χαρακτηριστικό align µπορούµε να έχουµε την εικόνα στοιχισµένη αριστερά ή δεξιά της σελίδας. Το κείµενο HTML που ακολουθεί την εικόνα, στην περίπτωση αυτή, γεµίζει τον περιβάλλοντα χώρο της εικόνας. Αντίθετα, αν δεν γίνει χρήση του χαρακτηριστικού align, το κείµενο συνεχίζει σε καινούργια γραµµή κάτω από την εικόνα. Εκτός από τις παραπάνω µεθόδους, η HTML µας παρέχει και µία µέθοδο για την στοίχιση ολόκληρων τµηµάτων HTML κώδικα. Για το σκοπό αυτό χρησιµοποιείται η ετικέτα <div aligh=x> </div>, όπου το x µπορεί να πάρει τιµές left, right και center. Π.χ. αν θέλουµε να κεντράρουµε όλο το περιεχόµενο µιας σελίδας τότε µπορούµε να γράψουµε (φαίνεται µόνο το κύριο σώµα του HTML κώδικα) (Σχήµα 3.7): 3.9. Πίνακες <body> <div align=center> </div> </body> Σχήµα 3.7: Στοίχιση κειµένου στην HTML Οι πίνακες στην HTML χρησιµοποιούνται για την εκπλήρωση δύο βασικών επιδιώξεων. Πρώτον, για την συγκεντρωµένη οργάνωση άλλων στοιχείων της HTML και δεύτερον, για την διαµόρφωση της εµφάνισης των ιστοσελίδων. Γενικά, στην HTML οι πίνακες αποτελούνται από γραµµές, οι οποίες αποτελούνται από κελιά. Για να δηλώσουµε τα στοιχεία ενός πίνακα ξεκινάµε δηλώνοντας την πρώτη γραµµή, µετά τη δεύτερη, την τρίτη κτλ. έως ότου 51

52 δηλώσουµε όλες τις γραµµές. Στη δήλωση της κάθε γραµµής περιέχεται η δήλωση όλων των στοιχείων κελιών που περιέχει η γραµµή. Για να δηλώσουµε έναν πίνακα χρησιµοποιούµε την ετικέτα <table> </table>. Μέσα στην ετικέτα του πίνακα δηλώνουµε τις ετικέτες της κάθε γραµµής του πίνακα <tr> </tr>, ενώ µέσα στην ετικέτα της κάθε γραµµής του πίνακα δηλώνουµε τις ετικέτες των στοιχείων - κελιών της κάθε γραµµής. Υπάρχουν δύο ετικέτες στοιχείων: η <td> </td> και η <th> </th>. Στο εσωτερικό των παραπάνω ετικετών δηλώνονται τα δεδοµένα κάθε στοιχείου-κελιού του πίνακα. Η µόνη διαφορά µεταξύ των δύο ετικετών είναι ότι τα δεδοµένα της δεύτερης εµφανίζονται κεντραρισµένα και µε έντονα γράµµατα. Τα δεδοµένα ενός κελιού του πίνακα µπορεί να είναι οποιοδήποτε τµήµα κώδικα της HTML, π.χ. µία εικόνα ή ένας δεσµός υπερκειµένου. Η HTML µας παρέχει τη δυνατότητα να ορίσουµε το µέγεθος των περιγραµµάτων του πίνακα, χρησιµοποιώντας το χαρακτηριστικό border της ετικέτας του πίνακα. Π.χ. αν θέλουµε να δηµιουργήσουµε ένα πίνακα µε πάχος περιγράµµατος 3 pixel γράφουµε: <table border=3> </table>. Ένα σηµείο που πρέπει να προσεχτεί ιδιαίτερα είναι η ύπαρξη κενών κελιών (π.χ. κελιών που δηλώνονται ως <td></td>) στον πίνακα. Όλοι οι browsers δεν συµπεριφέρονται µε τον ίδιο τρόπο στην ύπαρξη κενών κελιών. Για την σωστή αναπαράσταση των πινάκων που έχουν κενά κελιά, τα κενά κελιά πρέπει να δηλώνονται κάνοντας χρήση του ειδικού χαρακτήρα nonbreaking space (&nbsp). Εποµένως, ο σωστός τρόπος δήλωσης των κενών κελιών είναι: <td>&nbsp</td>. Στο παρακάτω παράδειγµα δηµιουργούµε (Σχήµα 3.8) έναν πίνακα 3x4. Τα στοιχεία της πρώτης γραµµής και της πρώτης στήλης του πίνακα δηλώνονται µε την ετικέτα <th> </th> για να τους δοθεί περισσότερη έµφαση σε σχέση µε τα υπόλοιπα στοιχεία του πίνακα. 52

53 3.10. Σύνοψη <html> <head> <title>στοιχεία απογραφής 2001</title> </head> <body> <h1>στοιχεία απογραφής 2001</h1> <table border=2> <tr> <!-- Πρώτη γραµµή --> <th>&nbsp</th> <th>άνδρες</th> <th>γυναίκες</th> <th>σύνολο</th> </tr> <tr> <!-- εύτερη γραµµή --> <th>σύνολο χώρας</th> <td> </td> <td> </td> <td> </td> </tr> <tr> <!-- Τρίτη γραµµή --> <th>ελλάδα</th> <td> </td> <td> </td> <td> </td> </tr> </table> </body> </html> Σχήµα 3.8: Παράδειγµα 3x4 πίνακα σε HTML κώδικα Η γνώση βασικών εννοιών της HTML, αποτελεί βασικό εργαλείο για την ανάπτυξη ιστότοπων και ιστοσελίδων. Στο κεφάλαιο αυτό παρατέθηκαν τα πιο βασικά στοιχεία τα οποία πρέπει να γνωρίζει κάποιος ώστε να υλοποίησει µια απλή ιστοσελίδα. Βέβαια, η γνώση αυτών των εργαλείων δε κάνει τον ιστότοπο λειτουργικό και διαδραστικό µε το χρήστη, διότι απλά ότι προγραµµατίζεται, αποτυπώνεται στον ιστότοπο και είναι µόνο για ανάγνωση. Για να γίνει πιο λειτουργικός ένας ιστότοπος, χρειάζονται και άλλων ειδών προγράµµατα και γλώσσες κατάλληλες να δώσουν τη δυνατότητα στο χρήστη να επικοινωνεί µε τον ιστότοπο και να παίρνει πληροφορίες και αποτελέσµατα αναλογα µε τις επιλογές τους. Τέτοια εργαλεία είναι η PHP, η MySQL, τα οποία θα αναφερθούν παρακάτω. 53

54 4. ΗΜΙΟΥΡΓΙΑ DATABASE-DRIVEN WEB SITE ΜΕ ΧΡΗΣΗ PHP ΚΑΙ MYSQL 4.1. Η Ανάγκη για ένα Database-Driven Web Site Σήµερα στο Web, το περιεχόµενο (content) είναι αυτό που κυριαρχεί. Αφού έχει γίνει η κατανόηση της HTML, µπορεί να δηµιουργήθεί ένα Web site. Πρέπει όµως η web page να γεµίσει µε πραγµατικές πληροφορίες (real information). Το πρόβληµα όµως είναι ότι συχνά, οι άνθρωποι που παρέχουν το περιεχόµενο για ένα site δεν είναι οι ίδιοι µ αυτούς που κάνουν και τη σχεδίασή του (design). Αλλά είναι σύνηθες, ο παροχέας του περιεχοµένου να µην γνωρίζει καθόλου από HTML. Πώς, όµως, µπορούµε να πάρουµε τότε το περιεχόµενο από τον παροχέα και να το εγκαταστήσουµε στο Web site; εν µπορούν φυσικά όλες οι εταιρείες να απασχολούν πλήρως έναν Webmaster και οι περισσότεροι από τους Webmasters έχουν άλλες δουλειές να κάνουν από το να αντιγράφουν αρχεία του Word µέσα σε tags της HTML. Η λύση σ αυτό το πρόβληµα είναι το database-driven site design. Πετυχαίνοντας τον πλήρη διαχωρισµό ανάµεσα στη σχεδίαση του site και το περιεχόµενο που θέλουµε να παρουσιάσουµε µέσα σ αυτό, µπορούµε να δουλέψουµε µε το ένα χωρίς να µας απασχολεί το άλλο. Αντί να δηµιουργούµε ένα HTML αρχείο για την κάθε σελίδα του site, χρειάζεται µόνο να δηµιουργήσουµε µια σελίδα για το κάθε είδος πληροφορίας που θέλουµε να παρουσιάσουµε. Αντί να επικολλάµε συνέχεια νέο περιεχόµενο στις σελίδες µας, δηµιουργούµε ένα απλό σύστηµα διαχείρισης περιεχοµένου (content management system) που δίνει τη δυνατότητα στους συγγραφείς να δηµοσιεύουν (post) το καινούργιο περιεχόµενό τους οι ίδιοι χωρίς να κάνουν καθόλου χρήση της HTML. Για να δηµιουργήσουµε ένα database-driven Web site, θα χρησιµοποιήσουµε τη γλώσσα συγγραφής σεναρίων στην πλευρά του διακοµιστή (server-side scripting language) PHP και τη σχεσιακή βάση δεδοµένων (relational database) MySQL. Θα πρέπει, όµως, ο Web host στον οποίο δηµοσιεύουµε τις σελίδες µας να υποστηρίζει τον συνδυασµό PHP/MySQL. 54

55 4.2. Η PHP και η MySQL Η PHP είναι µια γλώσσα προγραµµατισµού που σχεδιάστηκε για τη δηµιουργία δυναµικών σελίδων στο δυαδίκτυο και είναι επισήµως γνωστή ως: HyperText pre-processor. Είναι µια server-side (εκτελείτε στον διακοµιστή) scripting γλώσσα που γράφεται συνήθως πλαισιωµένη από HTML, για µορφοποίηση των αποτελεσµάτων. Αντίθετα από µια συνηθισµένη HTML σελίδα η σελίδα PHP δεν στέλνεται άµεσα σε έναν πελάτη (client), αντ' αυτού πρώτα αναλύεται και µετά αποστέλλεται το παραγόµενο αποτέλεσµα. Τα στοιχεία HTML στον πηγαίο κώδικα µένουν ως έχουν, αλλά ο PHP κώδικας ερµηνεύεται και εκτελείται. Ο κώδικας PHP µπορεί να θέσει ερωτήµατα σε βάσεις δεδοµένων, να δηµιουργήσει εικόνες, να διαβάσει και να γράψει αρχεία, να συνδεθεί µε αποµακρυσµένους υπολογιστές, κ.ο.κ. Σε γενικές γραµµές οι δυνατότητες που µας δίνει είναι απεριόριστες. Αρχικά η ονοµασία της ήταν PHP/FI από το Forms Interpreter η οποία δηµιουργήθηκε το 1995 από τον Rasmus Lerdorf ως µια συλλογή από Perl scripts που τα χρησιµοποιούσε στην προσωπική του σελίδα. εν άργησε να τα εµπλουτίσει µε λειτουργίες επεξεργασίας δεδοµένων µε SQL, αλλά τα σηµαντικά βήµατα που έφεραν και την µεγάλη αποδοχή της PHP ήταν αρχικά η µετατροπή τους σε C και µετέπειτα η δωρεάν παροχή του πηγαίου κώδικα µέσω της σελίδας του ώστε να επωφεληθούν όλοι από αυτό που είχε φτιάξει, αλλά και να τον βοηθήσουν στην περαιτέρω ανάπτυξή της. Θα δούµε όλη τη διαδικασία για τη δηµιουργία ενός database-driven Web site. Θα κάνουµε τα πρώτα µας βήµατα πέρα από την HTML και την JavaScript και από το περιβάλλον του σχεδιασµού ενός site στην πλευρά του πελάτη (client-side site design). Τα εργαλεία που θα χρησιµοποιήθουν γι αυτή τη δουλειά θα είναι τα προγράµµατα PHP και MySQL. Μπορούµε να φανταστούµε την PHP σαν ένα πρόσθετο (plug-in) για τον Web server που του δίνει τη δυνατότητα να κάνει κάτι περισσότερο από το να στέλνει απλά και µόνο απλές ιστοσελίδες (Web pages) όταν τις ζητάνε οι φυλλοµετρητές. Με εγκατεστηµένη την PHP, ο Web server θα είναι σε θέση να διαβάζει ένα νέο είδος αρχείων, το αποκαλούµενο PHP script, το οποίο µπορεί να 55

56 κάνει εργασίες όπως ανάκτηση πληροφοριών της τελευταίας στιγµής (retrieve up-to-the-minute information) από µια βάση δεδοµένων και καταχώρησή τους σε µια Web page πριν αυτή αποσταλεί στον φυλλοµετρητή που τη ζήτησε. Για να µπορέσουµε να ανακτήσουµε πληροφορίες από µια βάση δεδοµένων, θα πρέπει πρώτα φυσικά να έχουµε µια βάση δεδοµένων (database) και αυτός είναι ο λόγος της παρουσίας της MySQL. Η MySQL είναι ένα σύστηµα διαχείρισης σχεσιακών βάσεων δεδοµένων (relational database management system) ή RDBMS. Σε γενικές γραµµές είναι ένα πακέτο λογισµικού (software package) που είναι πολύ καλό στην οργάνωση και τη διαχείριση µεγάλων ποσοτήτων πληροφοριών. Με τη χρήση της MySQL είναι εύκολη η πρόσβαση σ αυτές τις πληροφορίες χρησιµοποιώντας µια γλώσσα συγγραφής σεναρίων στην πλευρά του διακοµιστή (server-side scripting languages), όπως είναι η PHP. Ο κώδικας που θα χρησιµοποιήσουµε εδώ θα µπορεί να εφαρµοσθεί σ έναν διακοµιστή που βασίζεται στα Windows ή στο Unix Αν ο Web Host Παρέχει την PHP και την MySQL Αν ο Web host που µας παρέχει τον χώρο για τις ιστοσελίδες µας (Web space) έχει ήδη εγκαταστήσει και ρυθµίσει την MySQL και την PHP, τότε δεν υπάρχει και πολλή δουλειά που πρέπει να γίνει. Πιο συγκεκριµένα, θα χρειαστούµε ένα όνοµα χρήστη (username) και έναν κωδικό ασφαλείας (password) για να µπορέσουµε να έχουµε πρόσβαση στον MySQL server που έχει στηθεί για µας. Υπάρχουν δύο τρόποι για να έχουµε πρόσβαση στον MySQL server. Ο πρώτος είναι να χρησιµοποιήσουµε το telnet για να συνδεθούµε (log) µε τον host και να χρησιµοποιήσουµε τα προγράµµατα πελάτη της MySQL, όπως είναι τα mysql, mysqladmin, mysqldump κ.ά., που είναι εγκατεστηµένα για να αλληλεπιδρούν (interact) απευθείας µε τον MySQL server. Ο δεύτερος είναι να εγκαταστήσουµε αυτά τα προγράµµατα πελάτη (client programs) στον δικό µας υπολογιστή και να τα συνδέσουµε µε τον MySQL server. Ο Web host µε τον οποίο συνεργαζόµαστε πρέπει να υποστηρίζει τη µια ή και τις δύο από τις δύο παραπάνω µεθόδους. 56

57 Αν υποστηρίζει τη σύνδεση (logging in) µε το telnet, θα χρειασθούµε ένα όνοµα χρήστη (username) και έναν κωδικό ασφαλείας (password) για τη σύνδεση (login) µε το telnet εκτός από εκείνα που θα χρησιµοποιήσουµε για να έχουµε πρόσβαση στον MySQL server και που µπορεί να είναι και διαφορετικά. Αν υποστηρίζει την αποµακρυσµένη πρόσβαση (remote access) στον MySQL server, θα πρέπει να φορτώσουµε (download) ένα πρόγραµµα για να µπορέσουµε να συνδεθούµε και να έχουµε αλληλεπίδραση µε τον server Σύνοψη Η PHP και η MySQL βοηθούν το χρήστη να επικοινωνεί µε έναν ιστότοπο και να παίρνει αποτελέσµατα που τον αφορούν µέσα από την επεξεργασία των πληροφοριών που θα δώσει αυτός. Τα συγκεκριµένα εργαλεία αποτελούν το ενδιάµεσο κρίκο µεταξύ του χρήστη και του διαδικτύου και βοηθάει εκατέρωθεν τις δυο οντότητες να καταλάβει η µια την άλλη και αντίστροφα. Βέβαια, η γνώση αυτών των εργαλείων δεν είναι αρκετή διότι κάποιος ο οποίος θέλει να προγραµµατίσει µια ιστοσελίδα θα πρέπει να έχει µελετήσει αρκετά την πληροφορία την οποία θα εισάγει µέσα σ αυτήν. Γι αυτό το λόγο η παρακάτω ενότητα, δίνει µια αρχική πληροφορία για τα θέµατα της Βοτανικής και ουσιαστικά είναι µια πρώτη εισαγωγή όσον αφορά τη Βάση εδοµένων PhytoKaryon κα τα περιεχόµενα της. 57

58 5. ΘΕΜΕΛΙΩ ΗΣ ΟΡΟΛΟΓΙΑ ΤΗΣ ΣΥΣΤΗΜΑΤΙΚΗΣ ΒΟΤΑΝΙΚΗΣ Η Συστηµατική Βοτανική είναι κλάδος της Βοτανικής ή Φυτολογιάς, δηλαδή της επιστήµης η οποία ασχολείται µε τη µελέτη των φυτικών οργανισµών. Η Βοτανική, όπως είναι γνωστό, µαζί µε τη Ζωολογία αποτελούν τις θεµελιώδεις βιολογικές επιστήµες, δηλαδή τις επιστήµες που µελετούν το φαινόµενο της ζωης. Η Βοτανική διακρίνεται παραπέρα σε τέσσερις βασικούς κλάδους τη Μορφολογία των Φυτών, τη Φυσιολογία των Φυτών, τη Συστηµατική Βοτανική, και τη Γεωβοτανική ή Φυτογεωγραφία. Γεγονός όµως είναι ότι οι κλάδοι αυτοί, ιδιαίτερα σήµερα που η επιστήµη έχει προοδεύσει πολύ, δεν είναι πάντοτε δυνατό να καθοριστούν µε αυστηρότητα. Η Συστηµατική Βοτανική έχει ως σκοπό και έργο: 1) τη µελέτη και την περιγραφή της ποικιλοµορφίας των φυτικών οργανισµών 2) τη διερεύνηση των αιτίων και των συνεπειών αυτής της ποικιλοµορφίας και 3) τη χρησιµοποίηση των δεδοµένων που προκύπτουν για την κατανόηση και ερµηνεία της εξελικτικής Πορείας και των συγγενικών σχέσεων των οργανισµών αυτών. Ένα από τα έργα της Συστηµατικής Βοτανικής είναι η ονοµατολογία, η περιγραφή και η ταξινόµηση των διαφόρων φυτικών οργανισµών, προϋπόθεση απαραίτητη για να επιτευχθούν οι σκοποί της, όπως αναφέρονται παραπάνω. Τούτο σηµαίνει ότι το έργο αυτό είναι απαραίτητο όχι µόνο για λόγους καθαρά πρακτικούς (ορθή επικοινωνία και συνεννόηση µεταξύ των επιστηµόνων), αλλά και για να επιτευχθεί ο τελικός σκοπός της Συστηµατικής Βοτανικής, δηλαδή η ανεύρεση των συγγενικών σχέσεων των φυτικών οργανισµών και η κατανόηση και η ερµηνεία της εξέλιξής τους. Η περιοχή αυτή της Συστηµατικής Βοτανικής η οποία περιλαµβάνει τη µεθοδολογία της περιγραφής, της ονοµατολογίας και της ταξινόµησης των φυτών ονοµάζεται Ταξινοµική ή Ταξινοµία των Φυτών. Όπως φαίνεται από τα προηγούµενα, ο όρος Συστηµατική είναι ευρύτερος από τον όρο Ταξινοµική αν και σε πολλές περιπτώσεις οι δύο όροι χρησιµοποιούνται σήµερα µε ταυτόσηµη έννοια και όπως αυτή καθορίστηκε παραπάνω για τον όρο Συστηµατική. 58

59 Στη Συστηµατική Βοτανική χρησιµοποιείται συχνά ο όρος κατάταξη ή συστηµατική κατάταξη, µε τον οποίο εννοούµε την πορεία που ακολουθούµε για τη δηµιουργία ενός λογικού συστήµατος κατηγοριών ή βαθµίδων, κάθε µία από ης οποίες περιλαµβάνει έναν αριθµό οργανισµών ανάλογα µε το βαθµό συγγένειάς τους και οι οποίες επιτρέπουν εύκολη αναφορά στους οργανισµούς που περιλαµβάνουν. Στη Συστηµατική Βοτανική χρησιµοποιείται επίσης πολύ συχνά ο όρος προσδιορισµός (ενός φυτικού οργανισµού), ο οποίος σηµαίνει να αναγνωρίσουµε ορισµένα χαρακτηριστικά του οργανισµού και µε βάση αυτά τα χαρακτηριστικά να ονοµάσουµε αυτόν τον οργανισµό µε αναφορά σε µια προϋπάρχουσα κατάταξη. Όπως είναι αντιληπτό ο προσδιορισµός ενός δείγµατος οργανισµού είναι δυνατός όταν είναι παρόµοιο µε ένα ήδη γνωστό οργανισµό. Σε διαφορετική περίπτωση σηµαίνει ότι πρόκειται για µια νέα ταξινοµική µονάδα, οπότε πρέπει να περιγραφεί και να ονοµαστεί µε ένα νέο όνοµα. Οι κανόνες µε τους οποίους γίνεται αυτό θα αναφερθούν στο κεφάλαιο της ονοµατολογίας (βλ. παρακάτω). Ο προσδιορισµός των διαφόρων φυτικών οργανισµών γίνεται στην πράξη µε τη χρήση των λεγόµενων «κλειδών προσδιορισµού». Με την πάροδο των χρόνων και µε την πρόοδο των ερευνών της Συστηµατικής Βοτανικής δηµιουργήθηκαν διάφορες τάσεις προσέγγισης του αντικειµένου της και του σκοπού της. Έτσι, ανάλογα µε τον τρόπο και τις µεθόδους αυτής της προσέγγισης η Συστηµατική Βοτανική σήµερα διακρίνεται σε Ορθόδοξη ή Κλασική Συστηµατική και σε Πειραµατική Συστηµατική ή Βιοσυστηµατική. Η προσέγγιση στην περίπτωση της Κλασικής Συστηµατικής γίνεται κυρίως µε τη µελέτη των µορφολογικών χαρακτήρων των οργανισµών. Η µελέτη αυτή γίνεται µε διατηρηµένο, νωπό ή και ζωντανό υλικό σε εργαστήρια και µουσεία αλλά συνήθως περιλαµβάνει και εργασία στην ύπαιθρο για επιτόπια µελέτη των φυτικών οργανισµών. Η Βιοσυστηµατική στη µεθοδολογία της περιλαµβάνει οικολογικές, κυτταρολογικές και γενετικές έρευνες καθώς και πειραµατικές έρευνες σε πληθυσµούς στην ύπαιθρο και σε ζωντανά φυτά στο εργαστήριο και σε βοτανικούς κήπους. 59

60 Όπως φαίνεται από τα παραπάνω, η Βιοσυστηµατική µελετά τους οργανισµούς όχι µόνο ως άτοµα αλλά και σε επίπεδο πληθυσµών για να διερευνήσει τις εξελικτικές διαδικασίες, οι οποίες πραγµατοποιούνται µέσα στους πληθυσµούς. Γί αυτό ο όρος Βιοσυστηµατική είναι ορθότερος από τον όρο Πειραµατική Συστηµατική και αυτός χρησιµοποιείται κυρίως. Σύµφωνα µε τα παραπάνω η Βιοσυστηµατική µπορεί να θεωρηθεί ως ο κλάδος που µελετά τη φαινοτυπική και τη γονοτυπική ποικιλότητα των οργανισµών σε σχέση µε το περιβάλλον στο οποίο ζουν. Τµήµα της Βιοσυστηµατικής είναι η Κυτοταξινοµική ή Κυτταροταξινοµική, η οποία µελετά τα χρωµατοσώµατα των οργανισµών για τη συγκέντρωση πληροφοριών, τις οποίες χρησιµοποιεί για την πραγµατοποίηση του σκοπού της. Στην περίπτωση αυτή τα χρωµατοσώµατα µελετώνται ως προς τον αριθµό, τη δοµή και τη συµπεριφορά τους. Με την πρόοδο της Βιοσυστηµατικής σε κάποια περίοδο θεωρήθηκε από µερικούς επιστήµονες ότι η Κλασική Συστηµατική είναι ξεπερασµένη. Σήµερα όµως έχει γίνει κατανοητό από όλους ότι αυτοί οι δύο τρόποι προσέγγισης και µελέτης των οργανισµών δεν είναι εντελώς ξεχωριστοί και αντίθετοι, αλλά πρέπει να είναι στενά συνεργαζόµενοι και ότι χωρίς τον έναν από αυτούς η µεθοδολογία της Συστηµατικής είναι ατελής. Εκτός από τους παραπάνω υπάρχουν και άλλοι τρόποι προσέγγισης του αντικειµένου και του σκοπού της Συστηµατικής. Αν η προσέγγιση αυτή γίνεται µε χηµικές µεθόδους, δηλαδή µε µελέτη των βιοχηµικών χαρακτηριστικών των οργανισµών, πρόκειται για τη Χηµειοταξινοµική και τη Χηµειοσυστηµατική. Τα τελευταία χρόνια έχει αρχίσει να επεκτείνεται στη Συστηµατική η µεθοδολογία των ηλεκτρονικών υπολογιστών για την επεξεργασία διαφόρων ταξινοµικών δεδοµένων. Ο τρόπος αυτός προσέγγισης του αντικειµένου της Συστηµατικής ονοµάζεται Αριθµητική Ταξινοµική ή Αριθµοταξινοµική Συστήµατα κατάταξης ή ταξινοµικά συστήµατα Η τεράστια ποικιλοµορφία των οργανισµών, οι οποίοι σύµφωνα µε τους πιο αυστηρούς υπολογισµούς ξεπερνούν τα είδη (από τους οποίους περίπου είναι οι φυτικοί οργανισµοί µε την ευρεία έννοια του 60

61 όρου), καθώς και η ανάγκη συνεννόησης των διαφόρων επιστηµόνων και τεχνικών που ασχολούνται µε αυτούς κάνει φανερή τη σηµασία ταξινόµησής τους σε ένα σύστηµα. Είναι γενικά αποδεκτό ότι το ιστορικό της κατάταξης των οργανισµών ξεκινά µε την εµφάνιση του ανθρώπου. Οι πρώτες όµως σοβαρές προσπάθειες κατάταξης έγιναν από τους αρχαίους 'Έλληνες φιλόσοφους Αριστοτέλη και Θεόφραστο, οι οποίοι θεωρούνται θεµελιωτές της Ζωολογίας και της Βοτανικής αντίστοιχα. Από τότε µέχρι σήµερα έχουν εκπονηθεί πολλά συστήµατα κατάταξης των οργανισµών, είτε στο σύνολό τους είτε διαφόρων οµάδων, από διάφορους ερευνητές. Τα σύγχρονα συστήµατα έχουν προκύψει µετά από µακρόχρονες έρευνες και χρήση ενός πολύ µεγάλου αριθµού πηγών. Στο διάστηµα αυτό διαµορφώθηκαν διάφορες κατηγορίες συστηµάτων ανάλογα µε τα κριτήρια που χρησιµοποιούν και τη βαρύτητα που δίνεται σε καθένα από αυτά για την κατάταξη των οργανισµών. Τα πρώτα συστήµατα που διαµορφώθηκαν ήταν τα λεγόµενα τεχνητά συστήµατα. Σε µερικά από αυτά επικρατεί η ωφελιµιστική θεώρηση των οργανισµών. Τα κριτήρια που χρησιµοποιούν µπορεί να είναι η σηµασία των οργανισµών για τον άνθρωπο, η µορφή, το χρώµα ή χαρακτήρες παρόµοιας φύσης. Συστήµατα στα οποία για την οµαδοποίηση των οργανισµών γίνεται χρήση ενός ή λίγων επιλεγµένων χαρακτήρων χαρακτηρίζονται από µερικούς ως µηχανικά, ενώ άλλοι δεν κάνουν διάκριση µεταξύ αυτών και των τεχνητών συστηµάτων. Η χρήση, όσο είναι δυνατόν περισσότερων φυσικών χαρακτήρων οδήγησε στη δηµιουργία των φυσικών συστηµάτων. Στην τελευταία περίπτωση, εάν χρησιµοποιείται επιπλέον και η φυλογενετική ερµηνεία των χαρακτήρων, τα συστήµατα λέγονται φυλογενετικά. Για να γίνει κατανοητή η διαφορά µεταξύ τεχνητών και φυσικών συστηµάτων πρέπει να αναφέρουµε και τα ακόλουθα: Όπως είναι γνωστό η παραγωγή ανθέων και σπερµάτων είναι ένα φυσικό και ουσιώδες χαρακτηριστικό πολλών φυτών, τα οποία έτσι µπορεί να θεωρηθεί ότι αποτελούν ένα φυσικό σύνολο ή οµάδα. Αυτό σηµαίνει ότι οργανισµοί οι οποίοι έχουν κοινούς χαρακτήρες σηµαντικής λειτουργικής αξίας αποτελούν ένα φυσικό σύνολο ή άθροισµα. Έτσι σε ένα φυσικό 61

62 σύστηµα κατάταξης λαµβάνονται υπόψη όσο το δυνατόν περισσότεροι χαρακτήρες, οι οποίοι επιδιώκεται να είναι ουσιώδεις και να έχουν κάποια φυσική σχέση. Αντίθετα µία τεχνητή κατάταξη χρησιµοποιεί µε αυθαίρετο τρόπο χαρακτήρες που δεν έχουν φυσική σχέση. Συνήθως στα τεχνητά συστήµατα λαµβάνεται υπόψη ένας µόνο αυθαίρετος χαρακτήρας. Έτσι Π.χ. όλα τα φυτά που δίνουν δρόγες, δηλαδή τµήµατά τους που χρησιµοποιούνται στη φαρµακευτική για την παρασκευή φαρµακευτικών ουσιών (χαµοµήλι, µπελαντόνα κ.ά.) µπορεί να χαρακτηριστούν ως «φαρµακευτικά φυτά». Με βάση αυτό το χαρακτηρισµό τα φυτά µπορεί να καταταγούν σε «φαρµακευτικά» και «µη φαρµακευτικά». Φυτά που παράγουν κλωστικές ίνες (βαµβάκι, λινάρι κ.ά.) µπορεί να καταταγούν στα «κλωστικά φυτά» και το σύνολο των φυτών να διαιρεθεί σε «κλωστικά» και «µη κλωστικά». Τεχνητή είναι επίσης η κατάταξη των φυτών που έχουν άνθη µε βάση µόνο τον αριθµό των στη µόνων τους ή µε βάση την ξυλώδη ή ποώδη υφή του βλαστού τους Ταξινοµικές βαθµίδες. Η έννοια του είδους. Σε όλα τα συστήµατα κατάταξης των οργανισµών το είδος (species) είναι η θεµελιώδης ταξινοµική βαθµίδα. Η έννοια του είδους είναι δύσκολο να καθοριστεί γί αυτό έχουν διατυπωθεί κατά καιρούς διάφοροι ορισµοί. Στα σύγχρονα συστήµατα ταξινόµησης των φυτών χρησιµοποιούνται όσο το δυνατόν περισσότερα κριτήρια, µορφολογικά, γενετικά, φυλογενετικά κ.ά., για τον καθορισµό της έννοιας του είδους. Σύµφωνα µε αυτά τα κριτήρια το είδος είναι «ένα περιορισµένο σύνολο ατόµων που χαρακτηρίζεται από κοινά, σταθερά και κληρονοµήσιµα γνωρίσµατα και το οποίο πετυχαίνει την κατά το δυνατόν µεγαλύτερη αναπαραγωγική αποµόνωση». Ο ορισµός αυτός του είδους είναι αποδεκτός σήµερα από τους περισσότερους συστηµατικούς βοτανικούς. 62

63 Σχήµα 5.1: Η θεµελιώδης ταξινοµική βαθµίδα Η ορθή εκτίµηση της ταξινοµικής βαθµίδας του είδους είναι µερικές φορές δύσκολη, πράγµα που έχει συχνά ως αποτέλεσµα τη δηµιουργία διαφορετικών γνωµών για τη στενότερη ή ευρύτερη έννοια ενός είδους. Αυτό οφείλεται σε διάφορα αίτια, όπως είναι η ασαφής διάκριση µορφολογικών, γενετικών και άλλων γνωρισµάτων, τα οποία χρησιµοποιούνται ως κριτήρια, η περιορισµένη ή ελλιπής γνώση αλλά µερικές φορές και ο υποκειµενικός παράγοντας. Παρ' όλα αυτά όµως το είδος θεωρείται ότι είναι η πιο βασική και αντικειµενική βαθµίδα. Μεγαλύτερες από το είδος ταξινοµικές βαθµίδες είναι: το γένος το οποίο περιλαµβάνει ένα ή περισσότερα είδη, η οικογένεια η οποία περιλαµβάνει ένα ή περισσότερα γένη, η τάξη η οποία περιλαµβάνει µία ή περισσότερες οικογένειες,η κλάση η οποία περιλαµβάνει µία ή περισσότερες τάξεις, το άθροισµα ή διαίρεση η οποία περιλαµβάνει µία ή περισσότερες κλάσεις και το βασίλειο το οποίο είναι η ανώτερη ταξινοµική βαθµίδα και περιλαµβάνει ένα ή περισσότερα αθροίσµατα. 63

64 Οι παραπάνω ταξινοµικές βαθµίδες ονοµάζονται κύριες ταξινοµικές βαθµίδες και είναι αυτές που χρησιµοποιούνται συνηθέστερα. Μερικές φορές όµως χρησιµοποιούνται και δευτερεύουσες ταξινοµικές βαθµίδες, όπως είναι το υποάθροισµα ή υποδιαίρεση, η υποκλάση, η υποτάξη, η υποοικογένεια, η οµάδα, η υποοµάδα, το υπογένος κ.ά. Στη Συστηµατική Βοτανική χρησιµοποιούνται και κατώτερες από το είδος ταξινοµικές βαθµίδες, όπως είναι το υποείδος, η ποικιλία και η µορφή. Το σύνολο των ταξινοµικών βαθµίδων που χρησιµοποιούνται στη Συστηµατική Βοτανική µε την ελληνική και τη διεθνή (λατινική) ονοµασία τους φαίνεται στον πίνακα που παρατίθεται στο τέλος του κεφαλαίου. Με έντονα στοιχεία γράφονται οι κύριες ταξινοµικές βαθµίδες, οι οποίες χρησιµοποιούνται σε κάθε ταξινόµηση. Οι υπόλοιπες είναι οι δευτερεύουσες, οι οποίες µπορεί να παραληφθούν εάν δεν είναι απαραίτητες. Στη διεθνή βοτανική ορολογία έχει καθιερωθεί εδώ και αρκετά χρόνια, για πρακτικούς λόγους, η χρήση του όρου taxon (πληθ. taxa), ο οποίος υποδηλώνει κάθε ταξινοµική βαθµίδα. Ο πολύ χρήσιµος αυτός όρος εφαρµόζεται για κάθε ταξινοµική βαθµίδα σε οποιοδήποτε επίπεδο, όπως π.χ. την ποικιλία, το υποείδος, το είδος, το γένος, την οικογένεια κλπ. ή ακόµη για µία ταξινοµική κατηγορία της οποίας το επίπεδο είναι αβέβαιο. Ο όρος αυτός θα χρησιµοποιείται και εδώ, όπου είναι απαραίτητο. ΤΑΞΙΝΟΜΙΚΕΣ ΒΑΘΜΙ ΕΣ Βασίλειο Regnum Υποβασίλειο Subregnum Άθροισµα ( ιαίρεση) Divisio Υποάθροισµα (Υποδιαίρεση) Subdivisio Κλάση Classis Υποκλάση Subclassis Τάξη Ordo Υποτάξη Subordo Οικογένεια Familia Υποοικογένεια Subfamilia Οµάδα (Οµοιογένεια) Tribus Υποοµάδα (Υφοµοιογένεια) Subtribus Γένος Genus Υπογένος Subgenus Τµήµα Sectio 64

65 Υποτµήµα Subsectio Σειρά Series Subseries Υποσειρά Species Είδος Subspecies Υποείδος Varietas Ποικιλία Υποποικιλία Subvarietas Μορφή Forma Μετά τον ορισµό του όρου taxon, ο οποίος µερικές φορές αποδίδεται στην ελληνική µε τον όρο ταξινοµική µονάδα, πρέπει να αναφέρουµε ότι στη Συστηµατική Βοτανική πολύ συχνή είναι η χρήση και των όρων περιγραφή και διάγνωση. Με τον όρο περιγραφή εννοούµε την απαρίθµηση των µορφολογικών χαρακτήρων ενός taxon, οι οποίοι καθορίζουν έτσι αυτή την ταξινοµική µονάδα. Οι χαρακτήρες οι οποίοι χρησιµοποιούνται σε µία ταξινοµική περιγραφή είναι γνωστοί ως ταξινοµικοί ή συστηµατικοί χαρακτήρες. Ο όρος διάγνωση σηµαίνει µία σύντοµη περιγραφή µίας ταξινοµικής µονάδας, στην οποία χρησιµοποιούνται µόνο εκείνοι οι χαρακτήρες, που είναι απολύτως απαραίτητοι για τη διάκρισή της από άλλες συγγενικές της οι χαρακτήρες που χρησιµοποιούνται σε µία διάγνωση ονοµάζονται διαγνωστικοί χαρακτήρες Ονοµατολογία. Με τον όρο ονοµατολογία εννοούµε το µέρος εκείνο της Ταξινοµικής και της Συστηµατικής, το οποίο ασχολείται µε την επιστηµονική ονοµασία των διαφόρων ταξινοµικών µονάδων των οργανισµών. Η ονοµασία αυτή για να είναι έγκυρη πρέπει να ακολουθεί ορισµένες αρχές και κανόνες, οι οποίοι προκειµένου για τα φυτά εµπεριέχονται στο «ιεθνή Κώδικα Βοτανικής Ονοµατολογίας». Αντίστοιχος κώδικας υπάρχει για την ονοµατολογία των ζώων και ιδιαίτερος κώδικας για την ονοµατολογία των Βακτηρίων. («ιεθνής Κώδικας Ονοµατολογίας των Βακτηρίων»). Οι κώδικες αυτοί, οι οποίοι έχουν θεσπισθεί σε διεθνή συνέδρια, αποτελούν ένα µέσο ορθής επικοινωνίας µεταξύ των ειδικών επιστηµόνων όλου του κόσµου και έχουν ως σκοπό την εξασφάλιση της σταθερότητας, της παγκοσµιότητας και της µοναδικότητας των ονοµάτων των οργανισµών. Καθένας από τους κώδικες αυτούς αποτελείται από πολλά άρθρα, τα οποία τοποθετούνται σε διάφορες ενότητες Παρακάτω θα αναφερθούν ελάχιστα βασικά στοιχεία του ιεθνούς Κώδικα 65

66 Βοτανικής Ονοµατολογίας, των οποίων η γνώση είναι απαραίτητη για την ορθή χρήση των επιστηµονικών ονοµάτων των φυτών. Το επιστηµονικό όνοµα ενός είδους είναι συνδυασµός δύο λέξεων και χαρακτηρίζεται ως διώνυµο. Οι δύο αυτές λέξεις µαζί, δηλ. το διώνυµο αποτελούν το όνοµα του είδους. Οι λέξεις αυτές γράφονται πάντοτε µε λατινικά στοιχεία και προέρχονται από τη λατινική γλώσσα ή είναι λατινικοποιηµένες. Από τις λέξεις αυτές η πρώτη είναι το όνοµα του γένους, στο οποίο ανήκει το είδος και γράφεται πάντοτε µε κεφαλαίο το αρχικό γράµµα. Η δεύτερη λέξη είναι συνήθως ένα επίθετο και αποτελεί το λεγόµενο ειδικό όνοµα ή ειδικό επίθετο του είδους. Η λέξη αυτή γράφεται πάντοτε µε µικρό το αρχικό γράµµα. Οι δύο λέξεις µαζί, δηλ. το όνοµα του γένους και το ειδικό επίθετο αποτελούν το όνοµα του είδους. Υπάρχουν δυστυχώς βιβλία, στα οποία αναφέρεται ότι η δεύτερη λέξη ενός διωνύµου αντιστοιχεί στο είδος, πράγµα το οποίο είναι λανθασµένο. Το διπλό αυτό όνοµα κάθε είδους για να είναι απόλυτα ορθό πρέπει να ακολουθείται από το όνοµα του ερευνητή, ο οποίος πρώτος δηµοσίευσε το όνοµα αυτό και έκανε την αρχική περιγραφή του είδους Το όνοµα του ερευνητή, το οποίο είναι γνωστό ως όνοµα του συγγραφέα, συνήθως αναγράφεται συντετµηµένο, αν και δεν υπάρχει κανόνας για τις συντµήσεις Συνεπώς το πλήρες επιστηµονικό όνοµα ενός είδους περιλαµβάνει τρία στοιχεία: το γένος, το ειδικό όνοµα ή επίθετο και το όνοµα του συγγραφέα. Έτσι π.χ. το επιστηµονικό όνοµα της ελιάς είναι Olea europaea L., όπου «Olea» είναι το όνοµα του γένους, «euroρaea» το ειδικό όνοµα (επίθετο) και «L.» το όνοµα του συγγραφέα, το οποίο στην περίπτωση αυτή είναι σύντµηση του ονόµατος του Λινναίου (Linnaeus). Η διπλή (διώνυµη) ονοµασία των ειδών, όπως χρησιµοποιείται σήµερα, καθιερώθηκε ουσιαστικά για πρώτη φορά µε ένα ενιαίο τρόπο από το Σουηδό Κάρολο Λινναίο (Carolus Linnaeus, ) στο έργο του «Species Plantarum» το 1753, παρόλο που η χρήση των διωνύµων ονοµάτων στα φυτά υπήρχε πάνω από ένα αιώνα ενωρίτερα. Υπάρχει περίπτωση οι συγγραφείς ενός είδους να είναι περισσότεροι από ένας. Τότε αναγράφονται τα ονόµατα όλων µετά το ειδικό επίθετο του είδους. Ακόµη υπάρχει περίπτωση ένα είδος να έχει δύο ή περισσότερους συγγραφείς µε το όνοµα του πρώτου ή των πρώτων να βρίσκεται σε 66

67 παρένθεση. Π.χ. το επιστηµονικό όνοµα της καρπουζιάς είναι Citrullus lanatus (Thunb.) Mansfeld. Η αναγραφή µε αυτό τον τρόπο των δύο συγγραφέων σηµαίνει ότι αυτό το είδος περιέγραψε αρχικά ο Thunberg, ο οποίος χρησιµοποίησε το ειδικό επίθετο lanatus. Ο Thunberg όµως τοποθέτησε την καρπουζιά όχι στο γένος CΊfrullus αλλά σε κάποιο άλλο. Αργότερα ο Mansfeld αναθεώρησε αυτή την τοποθέτηση και µετέφερε το είδος στο γένος Citrullus. Όταν µε αναθεώρηση το ταξινοµικό επίπεδο ενός taxon αλλάζει ή όταν ένα είδος µεταφέρεται από ένα γένος σε άλλο, το όνοµα του συγγραφέα, που έκανε την πρώτη περιγραφή και έδωσε το πρώτο όνοµα, µπαίνει σε παρένθεση και ακολουθεί έξω από την παρένθεση το όνοµα εκείνου που έκανε την αλλαγή. Τέτοιες αλλαγές µερικές φορές είναι απαραίτητες µετά τη συγκέντρωση νέων πληροφοριών µε την πρόοδο της ταξινοµικής έρευνας. Οι αλλαγές αυτές πρέπει να γίνονται µε πολύ προσοχή και να είναι σύµφωνες µε τους κανόνες του ιεθνούς Κώδικα Βοτανικής Ονοµατολογίας. Τα ονόµατα όλων των ταξινοµικών µονάδων γράφονται µε λατινικά στοιχεία και συνήθως είναι λέξεις που προέρχονται από τη λατινική ή την ελληνική γλώσσα. Γενικά τα επιστηµονικά ονόµατα σε οποιαδήποτε ταξινοµική βαθµίδα για να είναι διεθνώς έγκυρα πρέπει να γράφονται µε λατινικούς χαρακτήρες και να είναι λατινικές ή λατινικοποιηµένες λέξεις. Στο τέλος του ονόµατος κάθε ταξινοµικής µονάδας µπαίνει ολόκληρο ή συντετµηµένο το όνοµα εκείνου ή εκείνων που την καθιέρωσαν. Π.χ. Rosa L., Cucurbita L., Citrullus Schrader. Για την ισχύ του ονόµατος µιας νέας ταξινοµικής µονάδας, εκτός του ότι πρέπει να τηρούνται οι γενικοί κανόνες του ιεθνούς Κώδικα Βοτανικής Ονοµατολογίας, είναι απαραίτητη η δηµοσίευση της περιγραφής των µορφολογικών χαρακτηριστικών της στη λατινική γλώσσα ή τουλάχιστον η δηµοσίευση µιας διάγνωσης στη λατινική γλώσσα. Η αρχή αυτή ισχύει από το 1935 (µε εξαίρεση τα φύκη και τα απολιθωµένα φυτά ). Πολλά είδη αλλά και άλλες ταξινοµικές µονάδες έχουν περισσότερα από ένα επιστηµονικά ονόµατα από τα οποία ένα είναι το ορθό. Τέτοια ονόµατα είναι γνωστά ως συνώνυµα, αν και ο όρος αυτός ισχύει συνήθως µόνο για όλα τα άλλα ονόµατα πλην του ορθού. 67

68 Η ύπαρξη περισσότερων του ενός ονοµάτων για ένα taxon έχει προκύψει για διάφορους λόγους, όπως από άγνοια ενός επιστήµονα της ερευνητικής δραστηριότητας κάποιου άλλου, διαφορετική θεώρηση ως προς την οντότητα ενός taxon κ.ά. Σε τέτοιες περιπτώσεις για την επιλογή του ορθού ονόµατος µιας ταξινοµικής µονάδας ισχύει ο «νόµος της προτεραιότητας». Σύµφωνα µε αυτόν το ορθό όνοµα ενός taxon είναι το παλαιότερο, µε την προϋπόθεση να έχει δηµοσιευθεί σύµφωνα µε τους κανόνες του ιεθνούς Κώδικα Βοτανικής Ονοµατολογίας. Ως αφετηρία για την ισχύ της προτεραιότητας λαµβάνεται η 1 η Μαΐου 1753, η οποία θεωρείται η ηµεροµηνία δηµοσίευσης της πρώτης έκδοσης του έργου του Λινναίου «Species Plantarum». Η ηµεροµηνία αυτή ισχύει για τα αγγειόφυτα (εκτός από τα απολιθωµένα) και µερικές άλλες οµάδες φυτών, όχι όµως για όλα τα φυτά. Ο «νόµος της προτεραιότητας» εφαρµόζεται µόνο στα χαµηλότερα ταξινοµικά επίπεδα και συγκεκριµένα από την οικογένεια και κάτω. Η προτεραιότητα επίσης δεν ισχύει για ορισµένους λόγους σε µερικές περιπτώσεις ονοµάτων οικογενειών και γενών. Τέτοια ονόµατα, τα οποία διατηρούνται ως ισχύοντα αν και δεν είναι τα παλαιότερα, αναφέρονται ως διατηρητέα ονόµατα (nomina conservanda) και περιλαµβάνονται σε παραρτήµατα του Κώδικα. Οι ανώτερες από το γένος ταξινοµικές µονάδες (taxa) έχουν συνήθως ορισµένη κατάληξη, όπως φαίνεται στον παρακάτω πίνακα : ΤΑΞΙΝΟΜΙΚΕΣ ΒΑΘΜΙ ΕΣ ΚΑΤΑΛΗΞΗ ΠΑΡΑ ΕΙΓΜΑΤΑ (ΤΑΧΑ) Βασίλειο (Regnum) Plantae Άθροισµα ή ιαίρεση -phyta Spermatophyta (Divisio) Υποάθροισµα Angiospermae (Subdivisio) Κλάση (Classis) Dicotyledones Τάξη (Ordo) -aies Oleales Οικογένεια (Familia) -aceae Oleaceae Υποοικογένεια -oideae Oleoideae (Subfamilίa) Οµάδα (Tribus) -eae Oleeae Γένος (Genus) Olea Είδος ( Species) Olea europaea Υποείδος (SubSpecies) Olea europaea ssp europaea 68

69 Η ονοµατολογία των καλλιεργούµενων φυτών παρουσιάζει διαφορές από αυτή των αυτοφυών φυτών, αναφέρεται στο ιεθνή Κώδικα Βοτανικής Ονοµατολογίας αλλά λεπτοµέρειές της περιλαµβάνονται στο ιεθνή Κώδικα Ονοµατολογίας των Καλλιεργούµενων Φυτών. Φυτά τα οποία απαντούν αυτοφυή στη φύση και απαντούν αναλλοίωτα και στην καλλιέργεια διατηρούν τις ονοµασίες τους, όπως αυτές ισχύουν για τα αντίστοιχα αυτοφυή βοτανικά taxa. Στα καλλιεργούµενα φυτά, τα οποία δηµιουργούνται στην καλλιέργεια µε υβριδισµό, επιλογή ή άλλες διαδικασίες δίνονται καλλιεργητικά ονόµατα. Στην περίπτωση αυτή χρησιµοποιείται ο όρος καλλιεργητική ποικιλία (cultivar), ο οποίος δεν είναι ανάλογος µε τη βοτανική ποικιλία. Τα ονόµατα των καλλιεργητικών ποικιλιών γράφονται µε κεφαλαίο το αρχικό γράµµα και ακολουθούν τη σύντµηση cv., που σηµαίνει cultivar ή τοποθετούνται µεταξύ δύο απλών εισαγωγικών, π.χ. Citrullus lanatus cv. Crίmson Sweet, Rosa 'Crίmson Glory' Συνήθεις συντοµογραφίες της Συστηµατικής Βοτανικής. Στη Συστηµατική Βοτανική χρησιµοποιούνται πολύ συχνά διάφορες συντοµογραφίες, που είναι καθιερωµένες διεθνώς και έχουν συγκεκριµένη έννοια. Οι συνηθέστερες από αυτές φαίνονται στον παρακάτω πίνακα: sp. = species = είδος (ένα είδος) spp. = species = είδη (δύο ή περισσότερα είδη) ssp. = subspecies = υποείδος subsp. = subspecies = υποείδος var. = varietas = ποικιλία f. = forma = µορφή cv. = cultivar = καλλιεργητική ποικιλία s.l. = sensu lato = µε την πλατειά έννοια s.s. = sensu stricto = µε τη στενή έννοια 5.5. Σύνδεση των στοιχείων µε την Βάση εδοµένων PhytoKaryon Στην Βάση εδοµένων που θα παρουσιασθεί παρακάτω χρησιµοποιούνται οι συστηµατικές ονοµασίες από την Τάξη και κάτω, οπότε θα παρουσιασθούν πιο αναλυτικά οι Οικογένειες, τα Γένη και τα Είδη: Οικογένειες (Families) Στη συστηµατική ταξινόµηση η Οικογένεια (στα λατινικά Familia) βρίσκεται µεταξύ γένους και τάξης. 69

70 Οικογένεια ονοµάζεται το σύνολο των γενών που είναι συγγενείς µεταξύ τους. Το σύνολο των οικογενειών που είναι συγγενείς µεταξύ τους ονοµάζεται Τάξη. Για τη καλύτερη αποσαφήνιση των σχέσεων στη ταξινόµηση πολλές φορές χρησιµοποιούνται και οι κατηγορίες Υπεροικογένεια (Superfamilia) και Υποοικογένεια (Subfamilia). Στη Βοτανική οι οικογένειες των φυτών, φυκών, µυκήτων και βακτηρίων, έχουν καταλήξεις στα ελληνικά σε -ίδαι ή -οειδή. Η τελευταία είναι και η ακριβέστερη απόδοση της αντίστοιχης λατινικής κατάληξης -aceae. Ενώ στην λατινοποιηµένη τους µορφή τα ελληνικά ονόµατα παραµένουν άκλιτα, στην ελληνική κλίνονται όπως κάθε ουσιαστικό Γένη (Genus) Στη συστηµατική ταξινόµηση ως Γένος ονοµάζεται το σύνολο των είδων που είναι συγγενή µεταξύ τους. Για παράδειγµα η Πολική αρκούδα (Ursus maritimus) και η Καφέ αρκούδα (Ursus arctos) ανήκουν στο γένος αρκούδα Ursus. Το σύνολο των γενών που είναι συγγενή µεταξύ τους ονοµάζεται οικογένεια. Στη επιστηµονική ονοµασία το Γενος δίνει την πρώτη λέξη του ονόµατος, το είδος τη δεύτερη λέξη. Για την καλύτερη αποσαφήνιση των σχέσεων στην ταξινόµηση, πολλές φορές χρησιµοποιούνται και άλλες κατηγορίες µεταξύ της Οικογένειας και του Γένους (λ.χ. Υποοικογένεια) ή µεταξύ Γένους και Έιδους (λ.χ. Υπογένος) Είδος (Species) Στην επιστήµη της βιολογίας, είδος είναι µία από τις βασικές µονάδες βιοποικιλότητας. Στην επιστηµονική κατάταξη των ειδών, ένα είδος προσδιορίζεται µε ένα ελληνικής, η λατινικής προελεύσεως όνοµα, το οποίο αποτελείται από δύο µέρη. Το Γένος αναγράφεται πρώτο (µε το πρώτο γράµµα κεφαλαίο), ακολουθούµενο απο εναν δεύτερο όρο. Για παράδειγµα, ο άνθρωπος ανήκει στο γένος Homo και στο είδος Homo sapiens. Το όνοµα του είδους είναι ολόκληρο το διώνυµο, όχι µόνο ο δεύτερος όρος (ο οποίος ονοµάζεται "χαρακτηριστικό επίθετο", για τα φυτά, ή "χαρακτηριστικό όνοµα", για τα ζώα). Το διωνυµικό σύστηµα, το οποίο αργοτερα επισηµοποιήθηκε 70

71 στους κώδικες ονοµατολογίας της βιολογίας, είχε καθιερωθεί από τον Κάρολο Λινναίο την πρώτη δεκαετία του 18ου αιώνα, γνωστό ως "Ταξινοµία του Λινναίου". Εκείνη την εποχή, επικρατούσε η βασική βιολογική θεωρία ότι τα είδη αντιπροσώπευαν ξεχωριστά δηµιουργήµατα του Θεού, και γί αυτό θεωρούνταν σκόπιµα αυθεντικά και αµετάβλητα. Από την στιγµή που εµφανίστηκε η θεωρία της εξέλιξης, η έννοια του είδους προκάλεσε τεράστιες αλλαγές στον τοµέα της βιολογίας. Ωστόσο, δεν έχει επέλθει ακόµα οµοφωνία για τον προσδιορισµό της λέξης "είδος". Την πιο κοινά αποδεκτή διατύπωση του προσδιορισµού του "είδους" είχε εκφράσει πρώτος ο Ernst Mayr. Σύµφωνα µε τον ορισµό του, είδος είναι "οµάδες ενδεχοµένως ή στην πράξη διασταυρώµενων πληθυσµών οι οποίες είναι αναπαραγωγικά αποµονωµένες απο άλλες τέτοιες οµάδες". Ωστόσο, πολλές άλλες έννοιες χρησιµοποιούνται παράλληλα.η έννοια του είδους ας σηµειωθεί ότι δεν ταυτοποιεί όλα τα γενετικά χαρακτηριστικά εφόσον συχνά οι ενδοειδικές διαφορές ποσοστιαία υπερβαίνουν ακόµη και τον διαειδικό διαχωρισµό. Το επιστηµονικό όνοµα του είδους πρέπει να γράφεται µε πλάγιους χαρακτήρες. Όταν αναφερέται ένα άγνωστο είδος, αναγράφεται η συντοµογραφια "sp." στον ενικό ή "spp." στον πληθυντικό στο δεύτερο µέρος του ονόµατος του Σύνοψη Πριν την ανάλυση της Βάσης εδοµενών PhytoKaryon, θεωρήθηκε αναγκαίο να ορισθούν ορισµένοι όροι στην Βοτανική, επειδή αυτοί αποτελούν βασικά στοιχεία της βάσης και θα ήταν προτιµότερο κάποιος ο οποίος θα χρησιµοποίησει τη Βάση να είναι γνώστης των βασικών εννοιών της. 71

72 6. ΒΑΣΗ Ε ΟΜΕΝΩΝ PHYTOKARYON Γενικά γίνεται αποδεκτό ότι η απέραντη γνώση που έχει αποκτηθεί στην ποικιλοµορφία φυτών της ευρω-µεσογειακής περιοχής πρέπει να οργανωθεί και να µετατραπεί σε εύκαµπτο και ευρέως προσιτό εργαλείο, για να βοηθήσει την τρέχουσα έρευνα σε αυτόν τον τοµέα. Όλα τα πολυεθνικά προγράµµατα έχουν αναληφθεί σε αυτήν την κατεύθυνση και από τα πιο φιλόδοξα είναι και το «πρόγραµµα Euro+Med Plantbase». Στα πλαίσια του Euro+Med Plantbase, η ηλεκτρονική βάση δεδοµένων, PhytoKaryon, δηµιουργήθηκε, για να λειτουργήσει ως συγκεντρωµένη πηγή ως συγκεντρωµένη πηγή karyological και biosystematic δεδοµένων φυτών για ολόκληρη την ευρω-µεσογειακή περιοχή. Επιπλέον, διάφορες άλλες karyological βάσεις δεδοµένων έχουν παρασχεθεί κατά τη διάρκεια των τελευταίων ετών. Οι περισσότερες από αυτές εστιάζουν σε συγκεκριµένες γεωγραφικές περιοχές, όπως η Ιταλία (Garbari 2008), η Αγγλία και Ιρλανδία (Botanical Society of the British Isles 2008), η Καταλονία (Cromocat 2008) και η Σλοβακία (Marhold & al. 2008) ή σε συγκεκριµένες οµάδες φυτών, όπως οι οικογένειες Brassicacea (Warwick & Al-Shehbaz 2006) και Asteracea (Watanabe 2002) και η γενική οµάδα Cardamine (Kucera & al. 2005) και Hieracium (Schuhwerk 1996). Ένα παγκόσµιο φάσµα taxa φυτών καλύπτεται από το Index to Plant Chromosome Numbers του βοτανικού κήπου του Μισσούρι, το οποιο είναι ενσωµατοµένο σε µια βάση δεδοµένων, η οποία ονοµάζεται w 3 TROPICOS Περιγραφή των στοιχείων της Βάσης εδοµένων PhytoKaryon Η γενική περιγραφή της ορολογίας της Συστηµατικής Βοτανικής στο παραπάνω κεφάλαιο, µας δίνει τη δυνατότητα να περιγράψουµε τα βασικά στοιχεία, τα οποία αποτελούν και περιγράφουν τη Βάση εδοµένων PhytoKaryon. Ο όρος τάξη (Taxon), περιγράφει το σύνολο των οικογενειών (Families), που είναι συγγενείς µεταξύ τους, γι αυτό τον λόγο είναι και η ονοµασία του πίνακα που περιλαµβάνει τις οικογένειες (Families), τα γένη (Genus), τα οποία περιλαµβάνονται σε κάθε οικογένεια, και τα είδη (Species), που ανήκουν σε κάθε γένος. Επίσης ο πίνακας αυτός περιλαµβάνει τα 72

73 υποείδη (SubSiecies) κάθε έιδους (όπου υπάρχουν) αλλά και τον συντάκτη (Spieciesauthor), που έχει περιεγράψε πρώτη φορά το είδος. Τέλος στον πίνακα αυτό υπάρχει και το όνοµα του συντάκτης του υποείδους (SubSpieciesAuthor). Σχήµα 6.1: ιάγραµµα Σχέσεων µεταξύ των πινάκων της βάσης δεδοµένων Στον πίνακα TChromo, που είναι ο βάσικος πίνακας της βάσης, αφού σε αυτόν γράφονται όλα τα χαρακτηριστικά του κάθε δείγµατος και περιέχει όλα τα δευτερεύντα κλειδιά που παραπέµπουν στις πληροφορίες των υπολοίπων πινάκων. Στον πίνακα καταχωρείται ο χρωµοσωµατικός αριθµός κάθε δείγµατος, στο πεδίο chromo. Στο πεδίο karyology καταχωρείται η µορφολογία του καρυοτύπου του κάθε δείγµατος (όπου υπάρχει) ενώ στο πεδίο specimennumber ο αριθµός του δείγµατος. Στο πεδίο SpecimenDate καταχωρείται η ηµεροµηνία κατά την οποία έγινε η συλλογή του δείγµατος. Επίσης στον πίνακα αυτόν αποθηκεύονται και κάποιες γεωγρφικού τύπου πληροφορίες, όπως είναι η χώρα συλλογής (country), το γεωγραφικό µήκος και πλάτος στα πεδία Longitude και Latitude αντίστοιχα, το µέγιστο και ελάχιστο υψόµετρο συλλογής κάθε δείγµατος (Altmax, Altmin αντίστοιχα) καθώς και µια πιο λεπτοµερής περιγραφή της τοποθεσίας (Locality). Επίσης υπάρχει και ένα πεδίο για ελεύθερο κείµενο, προκειµένου να σηµειώνονται κάποιες ειδικές παρατηρήσεις για κάθε δείγµα. Τέλος στον πίνακα TChromo 73

74 υπάρχουν αναφορές για τα δευτερεύοντα κλειδιά, όπως το txid που αντιστοιχεί στον πίνακα Taxon, το ColID το οποίο παραπέµπει στον πίνακα των συλλεκτών (Collectors), το GeoCodeID που παραπέµπει στον πίνακα µε τους γεωγραφικούς κωδικούς, το πεδίο HerbariumID το οποίο παραπέµπει στον πίνακα µε τα ερµπάρια και τέλος το πεδίο papid που αντιστοιχεί στον πίνακα που περιγράφονται οι βιβλιογραφικές αναφορές. Ο πίνακας Papers περιγράφει τις βιβλιογραφικές αναφορές και δηµοσιεύσεις, οι οποίες αναφέρονται σε κάθε δείγµα. Σε αυτό τον πίνακα παραθέτονται ο τίτλος του περιοδικού βιβλίου (DocTitle) και το κεφάλαιο (PapVol) και σε ποιες σελίδες (PapPP) περιέχεται η αναφορά, το όνοµα του συγγραφέα (AutName), καθώς και τον τίτλο της αναφοράς (PapTitle). Επίσης είναι καταχωρηµένα το έτος συγγραφής (PapYear), το πρώτο γράµµα του είδους του περιοδικού βιβλίου (DocType ), που παραπέµπει στον πίνακα DocTypes που περιέχει τα πλήρη ονόµατα των ειδών. Ακόµα υπάρχει ο πίνακας Herbarium, στον οποίο υπάρχει ο κωδικός του κάθε ερµπαρίου καθώς και µια πιο αναλυτική περιγραφή της σηµασίας του κωδικού (π.χ. UPA = University of Patras, Greece). Επιπλέον, υπάρχει ο πίνακας GeoCodes στον οποίο υπάρχουν καταχωρηµένες οι γεωγραφικές πληροφορίες για κάθε περιοχή της Ευρω- Μεσογειακής ζώνης, όπως αυτοί έχουν υοθετηθεί από το EURO+Med PlantBase Project. Στο πεδίο E+M code καταχωρείται ο κωδικός κάθε περιοχής (π.χ. AE(G)), η αναλυτική περιγραφή του κωδικού (Unit) (π.χ. Greek East Aegean Islands, Excluding Imroz, Tenedo). Επίσης, αποθηκεύονται και οι κωδικοί ISO, για κάθε χώρα που ανήκουν αυτές οι περιοχές Η Microsoft Access εργαλείο σχεδιασµού της Βάσης εδοµένων PhytoKaryon Η Microsoft Access έχει όλα τα χαρακτηριστικά ενός κλασικού συστήµατος διαχείρισης σχεσιακών βάσεων δεδοµένων (RDBMS) και αρκετά παραπάνω. εν είναι µόνο ένα πανίσχυρο, ευέλικτο και εύκολο στη χρήση RDBMS, αλλά και ένα πλήρες εργαλείο ανάπτυξης εφαρµογών για βάσεις δεδοµένων. 74

75 Μπορούµε να χρησιµοποιήσουµε την Access για να κατασκευάσουµε και να εκτελέσουµε µια εφαρµογή φτιαγµένη στα δικά µας µέτρα. Μπορούµε να περιορίζουµε, να επιλέγουµε και να προσθέτουµε τα δεδοµένα σας µε τη χρήση ερωτηµάτων (Queries). Μπορούµε να δηµιουργούµε φόρµες (Forms) για την εµφάνιση και την τροποποίηση των δεδοµένων µας. Μπορούµε επίσης να δηµιουργήσουµε απλές ή πολύπλοκες αναφορές (Reports). Οι φόρµες και οι αναφορές αναφέρονται σε κάποιον πίνακα ή σε κάποιο ερώτηµα και έτσι «κληρονοµούν» τις ιδιότητες του πίνακα ή του ερωτήµατος αντίστοιχα. Αυτό σηµαίνει ότι οι µορφές (Formats) και οι κανόνες εγκυρότητας (Validation Rules) χρειάζεται να οριστούν µόνο µία φορά κατά τον σχεδιασµό ενός πίνακα. Ανάµεσα στα ισχυρότερα χαρακτηριστικά της Access είναι και οι Οδηγοί (Wizards), τους οποίους µπορούµε να χρησιµοποιούµε για την κατασκευή πινάκων και ερωτηµάτων και για τον ορισµό µιας µεγάλης ποικιλίας φορµών και αναφορών. Οι Οδηγοί αυτοί είναι έτοιµες σχεδιάσεις που έχει ενσωµατωµένες η Access για να µας βοηθάει στη σχεδίαση της βάσης δεδοµένων. Η Access περιλαµβάνει ακόµη την περιεκτική γλώσσα προγραµµατισµού Microsoft Visual Basic for Applications (VBA), που µπορούµε να χρησιµοποιήσουµε για να κατασκευάσουµε πολύ ισχυρές εφαρµογές. Επίσης, είναι ένα θαυµάσιο εργαλείο για τη διαχείριση προσωπικών στοιχείων στον δικό µας προσωπικό υπολογιστή. Θα µπορούσαµε να δηµιουργήσουµε έναν κατάλογο µε τις διευθύνσεις, τις ηµεροµηνίες γενεθλίων και τις επετείους των φίλων µας. Οι δυνατότητες της Access είναι απεριόριστες. Παράλληλα, η Access χρησιµοποιεί όλα τα γνωστά µας εύχρηστα χαρακτηριστικά των Windows, όπως τα παράθυρα, τα µενού, τις γραµµές εργαλείων και τους πτυσσόµενους καταλόγους. Μπορεί ακόµα να επικοινωνεί και να ανταλλάσσει δεδοµένα (κείµενα, λογιστικά φύλλα, γραφήµατα, σκίτσα, εικόνες και ήχους) µε τ άλλα προγράµµατα των Windows. Η Access χρησιµοποιεί τη ιασύνδεση Πολλών Εγγράφων (MDI) των Windows 95 για να µας επιτρέπει την ταυτόχρονη εργασία µε πολλά 75

76 διαφορετικά αντικείµενα. ηλαδή θα µπορούµε να δουλεύουµε µε πολλούς πίνακες, φόρµες, αναφορές, µακροεντολές ή υποµονάδες την ίδια στιγµή. Όλα τα παραπάνω ώθησαν τους συντελεστές του Τοµέα Φυτικής Βιολογίας του Τµήµατος Βιολογίας του Πανεπιστηµίου Πατρών, να υλοποιήσουν µια Κυτταρολογική Βάση εδοµένων (PhytoKaryon) χρησιµοποιώντας την Microsoft Access Περιγραφή της Βάσης εδοµένων PhytoKaryon Η PhytoKaryon δηµιουργήθηκε, χρησιµοποιώντας το Microsoft Office Access Ενηµερώνεται µέσω µιας ενιαίας κύριας φόρµας για τα καρυολογικά στοιχεία, που υποστηρίζονται από µια σειρά πινάκων, οι οποίοι παρέχουν τις δευτεροβάθµιες πληροφορίες. Για την κατασκευή της βάσης δεδοµένων, υιοθετήθηκε το πρότυπο που δηµοσιεύεται από Berendsohn & Al (1997). Η Βάση εδοµένων PhytoKaryon, ξεκινάει µε την αρχική σελίδα (Σχήµα 5.1) και οι αρχικές επιλογές είναι η επισκόπηση των πινάκων Taxonomy, Collectors, Herbaria, References, στους οποίους δίνεται η δυνατότητα εισαγωγής νέας εγγραφής. Επίσης, δίνεται η δυνατότητα επισκόπησης µιας συνολικής εγγραφής, ενηµέρωσης της καθώς και η δηµιουργία µιας νέας µέσω της βασικής σελίδας εισαγωγής στοιχείων που ανοίγει πατώντας το κουµπί Data Input, στην αρχική σελίδα. Τέλος, ενεργοποιώντας το κουµπί search δίνεται η δυνατότητα εξερεύνησης των εγγραφών της PhytoKaryon. 76

77 Σχήµα 5.1: Αρχική οθόνη της PhytoKaryon Βάσης εδοµένων Η κύρια φόρµα εισαγωγής δεδοµένων (Σχήµα 5.2) προβλέπει τα ακόλουθα σύνολα στοιχείων, για κάθε Καρυολογική εγγραφή, όπως εµφανίζεται στην δηµοσίευση: 1. Taxonomy, µε 6 πεδία, συµπεριλαµβανοµένου του ονόµατος του taxon όπως καταγράφεται και του προσωρινά αποδεκτού ονόµατος, συµπεριλαµβανοµένης και της παραποµπής των συντακτών. 2. Karyology, µε 2 πεδία: Μιτωτικούς ή Μειωτικούς αριθµούς χρωµοσωµάτων, που περιγράφονται στη µορφολογία του Καρυοτύπου. 3. Πληροφορίες για το δείγµα (Species), µε 4 πεδία: Όνοµα ή Oνόµατα συλλεκτών, αριθµός του δείγµατος, ηµεροµηνία της συλλογής του δείγµατος και ο κωδικός του ερµπαρίου, σύµφωνα µε το Holmgren & Holmgren (2007). 4. Πληροφορίες για την περιοχή περισυλλογής, µε 8 πεδία: Όνοµα χώρας, γεωγραφικός κώδικας (Geocode) και περιγραφή, συντεταγµένες τοποθεσίας, υψόµετρο και ακριβής περιγραφή της περιοχής. Οι γεωγραφικοί κωδικοί ακολουθούν τους γεωγραφικούς 77

78 διαχωρισµούς της ευρω-µεσογειακής περιοχής όπως υιοθετήθηκαν από το πρόγραµµα Euro+Med PlantBase. 5. Reference, µε 1 πεδίο: Λεπτοµέρειες της δηµοσίευσης απο την οποία έχει εισαχθεί η εγγραφή.. 6. Σηµειώσεις, µε 1 πεδίο: ελεύθερο κείµενο για οποιεσδήποτε πρόσθετες πληροφορίες (π.χ. συνώνυµα, πληροφορίες για την περιοχή, κ.λπ.). Ένα παράδειγµα µιας συµπληρωµένης φόρµας εισαγωγής δεδοµένων για την εγγραφή Bellevalia hyacinthoides δίνεται στο σχήµα Σχήµα 5.2: Η κύρια φόρµα εισαγωγής δεδοµένων της Βάσης PhytoKaryon Η Βάση εδοµένων αυτή, δίνει τη δυνατότητα να προβληθούν όλες οι εγγραφές των τάξων (σχήµα 5.3), που είναι καταχωρηµένες σε αυτή. Υπενθυµίζεται οτι είναι καταχωρηµένες περισσότερες από διαφορετικές εγγραφές. Σε κάθε εγγραφή παρουσιάζεται το όνοµα της οικογένειας, του γένους, του είδους, του υποείδους, του συγγραφέα του είδους καθώς και του συγγραφέα του υποείδους. Επίσης, δίνεται η 78

79 δυνατότητα να εισαχθεί ένα καινούργιο taxon, το οποιο θα προκύψει από νέα δηµοσίευση στο µέλλον. (Σχήµα 5.4) Σχήµα 5.3: Φόρµα προβολής εγγραφών του πίνακα Taxon Σχήµα 5.4: Φόρµα εισαγωγής νέας εγγραφής του πίνακα Taxon Η εφαρµογή δίνει επίσης τη δυνατότητα να προβληθούν τα ονόµατα των καταχωρηµένων συλλεκτών (σχήµα 5.5), καθώς και να καταχωρηθεί ένα καινουργιο, που θα προκύψει απο µια δηµοσίευση (σχήµα 5.6). Σχήµα 5.5: Προβολή καταχωρηµένων συλλεκτών 79

80 Σχήµα 5.6: Εισαγωγή νέου συλλέκτη Επιπλέον, η εφαρµογή παραθέτει στοιχεία για τα ερµπάρια στα οποία παρατίθενται τα δείγµατα που είναι καταχωρηµένα στη βάση (σχήµα 5.7), µε δυνατότητα εισαγωγής ενός καινούργιου (σχήµα 5.8). Σχήµα 5.7: Προβολή καταχωρηµένων ερµπαρίων Σχήµα 5.7: Εισαγωγή νέων ερµπαρίων Ακόµα µέσω της φόρµας Papers, η εφαρµογή παρουσιάζει όλες τις δηµοσιεύσεις και βιβλιογραφικές αναφορές (σχήµα 5.8) από τις οποίες αναφέρονται στα δείγµατα της βάσης. Παράλληλα δίνεται η δυνατότητα αλλαγής κάποιου από αυτό καθώς και νέας καταχώρησης.(σχήµα 5.9). 80

81 Σχήµα 5.8: Προβολή καταχωρηµένων Papers Σχήµα 5.9: Εισαγωγή νέου Paper Τέλος, δίνεται η δυνατότητα αναζήτησης στις εγγραφές της βάσης, µε βάση την οικογένεια ή του γένους ή του είδους ή του υποείδους ή όλων αυτών µαζί (σχήµα 5.10). Η φόρµα αποτελεσµάτων της αναζήτησης δεν είναι δυνατόν να προβληθεί, εξαιτίας προβλήµατος στην έκδοση που χρησιµοποιήθηκε. 81

82 Σχήµα 5.10: Φόρµα αναζήτησης 6.4. ιάγραµµα Μοντέλου Οντοτήτων Συσχετίσεων της PhytoKaryon Έχοντας κατά νού το διάγραµµα σχέσεων µεταξύ των πινάκων της Βάσης εδοµένων, κρίνεται απαραίτητο για την καλύτερη κατανόηση της (Βάσης εδοµένων, PhytoKaryon), η δηµιουργία του Μοντέλου Οντοτήτων και Συσχετίσεων. Γι αυτό, θα πρέπει να ακολουθηθούν τα εξής βήµατα: Να οριστούν οι οντότητες (πίνακες) που θα ανήκουν στη βάση δεδοµένων που θέλουµε να δηµιουργήσουµε. Για την PhytoKaryon, οι οντότητες είναι: Taxon, TChromo, Papers, GeoCodes, Herbarium, DocTypes, TaxonOrigin, Papers_1, Collectors και References. Να οριστούν οι ιδιότητες (πεδία) και τα πρωτεύοντα κλειδιά της κάθε οντότητας (πίνακα). Για την PhytoKaryon, οι οντότητες είναι όλα τα πεδία των προηγούµενων πινάκων της Βάσης εδοµένων. Να οριστούν οι συσχετίσεις ανάµεσα στις οντότητες. Οι συσχετίσεις ανάµεσα στις οντότητες αυτές θα είναι οι εξής : Taxon TChromo : ένα-προςπολλά (1:Μ), Taxon TaxonOrigin : ένα-προς-πολλά (1:Μ), TChromo - GeoCodes : ένα-προς-πολλά (1:Μ), TChromo Herbarium : ένα-προς-πολλά (1:Μ), TChromo Papers: ένα-προς-πολλά (1:Μ), TChromo Collectors: έναπρος-πολλά (1:Μ), Papers DocTypes: πολλά -προς-ένα (Μ:1), Papers 82

83 Papers_1: ένα-προς-πολλά (1:Μ) και Papers References: ένα-προς-πολλά (1:Μ). Έχοντας πλέον ορίσει ότι είναι αναγκαίο για να υλοποιηθεί το διάγραµµα οντοτήτων συσχετίσεων της PhytoKaryon, στο παρακάτω σχήµα 5.3, φαίνονται οι οντότητες, ιδιότητες και οι συσχετίσεις των πινάκων της Βάσης εδοµένων. id OriginID txid ColID HerbariumID PapID DocType Taxon 1 1 ΑΝΗΚΕΙ TChromo Μ 1 GeoCodeID 1 papid ΑΝΗΚΕΙ Μ Papers Μ PapID Papers_1 ΑΝΗΚΕΙ Μ TaxonOrigin GeoCodes GeoCodeID 1 Μ ΑΠΟΤΕΛΕΙΤΑΙ 1 Μ Herbarium Μ Collectors ColID doc_initial 1 Μ ΑΝΗΚΕΙ 1 Μ PapID References 1 OriginID HerbariumID DocTypes Σχήµα 5.3: Μοντέλο Οντοτήτων Συσχετίσεων της PhytoKaryon 6.5. Σύνοψη Η κυτταρολογική Βάση εδοµένων των φυτών της Ευρώπης και της Μεσογείου υλοποίηθηκε χρησιµοποιώντας την πλατφόρµα Microsoft Access. Βέβαια η εφαρµογή αυτή παρουσιάζει αρκετές αδυναµίες όπως η αδυναµία διαχείρισης από πολλούς χρήστες ταυτόχρονα, η αδυναµία αποµακρυσµένης διαχείρισης της βάσης ενώ ταυτόχρονα η αδυναµία της να παρουσίαζει στατιστικά αποτελεσµάτα, την καθιστούσε ανεπαρκή για την εκµετάλλευση της τόσο σηµαντικής πληροφορίας που περιέχει. Γι αυτό κρίθηκε αναγκαίο να βρεθεί ένας καινούριος τρόπος παρουσίασης των δεδοµένων της και µια καλύτερη δυνατότητα αξιοποίησης των αποτελεσµάτων της. Έτσι, δηµιουργήθηκε ένας ιστότοπος παρουσίασης της Βάσης για να καλύψει όλες τις προηγούµενες αδυναµίες της Microsoft Access και να δοθεί η περαιτέρω ώθηση στην εξέλιξη της Βοτανολογίας. 83

84 7. ΜΕΘΟ ΟΛΟΓΙΑ Για την υλοποίηση της βάσης δεδοµένων χρειάσθηκαν τα εξής εργαλεία προγραµµατισµού, µετατροπής και διαχείρισης βάσεων δεδοµένων, µε χρονολογική σειρά χρησιµοποίησης: Microsoft Access Access-To-Mysql Converter Wampserver o Apache Server v o PHP v o MySQL v HTML Javascript Η σειρά µε την οποία εµφανίζονται τα παραπάνω εργαλεία σκοπίµως είναι χρονολογική, προκειµένου να φανεί η µεθοδολογία και όλη η ακολουθία εργασιών που έπρεπε να γίνει προκειµένου να εµφανισθεί το τελικό αποτέλεσµα σε µια µορφή που όχι µόνο θα εξυπηρετούσε την ανάγκη για σωστή διαχείριση των δεδοµένων, αλλά και την δυνατότητα να µπορούν τα δεδοµένα αυτά να γίνουν κτήµα της παγκόσµιας επιστηµονικής κοινότητας µέσω του διαδικτύου. Παρακάτω θα παρουσιαστεί µια εισαγωγική παρουσίαση κάθε εργαλείου, του τρόπου που χρησιµοποίηθηκε, καθώς και της σκοπιµότητας της χρήσης του Microsoft Access Η PhytoKaryon η οποία δηµιουργήθηκε µε την βοήθεια της Microsoft Access ήταν πολύ χρήσιµη και λειτουργική στην εφαρµογή της σε επίπεδο τοπικής χρήσης και ιδανική προκειµένου να γίνει εισαγωγή των εγγραφών. Βέβαια υστερούσε σε επίπεδο αποµακρυσµένης χρήσης καθώς και δεν έδινε τη δυνατότητα να γίνει εισαγωγή των δεδοµένων από πολλούς υπολογιστές ταυτόχρονα. Επίσης η Βάση υστερούσε σε επίπεδο διαχείρησης και στατιστικής επεξεργασίας των δεδοµένων καθώς και σε επίπεδο παρουσίασης των δεδοµένων της. Ακόµα, η Βάση δεν είχε τη δυνατότητα να παρουσιασθεί µέσω διαδικτύου σε χρήστες που θα ήθελαν να περιηγηθούν µέσα στη Βάση. 84

85 Η βάση δεδοµένων PhytoKaryon αποτέλεσε την αφορµή και την βάση, προκειµένου να αναπτυχθεί µια εφαρµογή βάσεων δεδοµένων σε τεχνολογία διαδικτύου. Στο συγκεκριµένο project, η Microsoft Access χρησιµοποιήθηκε προκειµένου να συλλεχθούν τα δεδοµένα της νέας βάσης και να γίνει κατανοητή η δοµή της. Μελετήθηκε εφισταµένως το διάγραµµα σχέσεων των πινάκων προκειµένου να κατανοηθεί η λειτουργία και η λογική µε την οποία καταχωρούνται τα δεδοµένα. Επίσης, µελετήθηκαν τα δεδοµένα που είναι καταχωρηµένα σε κάθε πεδίο, έτσι ώστε να σχεδιαστεί µε ίδιο τρόπο η νέα βάση σε τεχνολογία MySQL. Προκειµένου να γίνει η µετάβαση από την Access στην MySQL, χρησιµοποίηθηκε το λογισµικό Access to MySQL Converter Access to MySQL Converter Το λογισµικό Access to MySQL Converter, είναι ένα πρόγραµµα που µετατρέπει Βάσεις εδοµένων που έχουν αναπτυχθεί µε την βοήθεια της Microsoft Access σε Βάσεις που µπορούν να διαχειριστούν από τον MySQL Server. Το λογισµικό αυτό επιλέχθηκε γιατί µε έναν πολύ απλό και εύκολο τρόπο, µετατρέπει τις βάσει δεδοµένων απο το ένα σύστηµα στο άλλο. Μερικά από τα πλεονεκτήµατα και τους περιορισµούς του λογισµικού αυτού, παρατίθονται παρακάτω: Μετατρέπονται όλα οι τύποι δεδοµέων και τα χαρακτηριστικά τους που ισχύουν στην Microsoft Access. Υποστηρίζει όλες τις εκδόσεις της MS Access. Υποστηρίζει όλες τις εκδόσεις του MySQL Server, τόσο για Unix, όσο και για Windows και MAC OS. Μετατρέπει µεµονοµένους πίνακες. Μετατρέπει δείκτες µε όλα τα απαραίτητα χαρακτηριστικά. Μετατρέπει Σχέσεις µεταξύ των πινάκων. Μετατρέπει προστατευόµενες από κωδικούς MS Access βάσεις δεδοµένων. Εξάγει τις Βάσεις εδοµένων σε µορφή MySQL dump file. 85

86 Περιορισµοί εν µετατρέπει τις φόρµες, τα ερωτήµατα, τις εκθέσεις και τα Visual Basic scripts, που ίσως υπάρχουν σε µια βάση δεδοµέων Access. εν µετατρέπει πίνακες κρυµµένους από το σύστηµα. Η διαδικασία που ακολουθήθηκε προκειµένου να γίνει η µετατροπή ήταν απλή και το λογισµικό Access to MySQL Converter εξήγαγε ένα SQL dump αρχείο που µπορούσε να εκτελεστεί από έναν MySQL Server και να δηµιουργήσει µια καινούρια βάση δεδοµένων µε πανοµοιότυπη δοµή µε αυτή της Access καθώς και µε όλα τα δεδοµένα που ήταν αποθηκευµένα σε αυτή. Το αρχείο αυτό περιέχει εντολές σε γλώσσα SQL, οι οποίες τρέχονταν από την γραµµή εντολών της MySQL. Τµήµα του αρχείου αυτού παρατίθεται παρακάτω (σχήµα 7.1), όπου φαίνονται τα αρχικά εισαγωγικά, η εντολή δηµιουργίας της βάσης και η δηµιουργία του πρώτου πίνακα µαζί µε τρεις καινούργιες εγγραφές: # Dump File # # Database is ported from MS Access # # Program Version CREATE DATABASE IF NOT EXISTS `chromo`; USE `chromo`; # # Table structure for table 'Chromosome number list' # DROP TABLE IF EXISTS `Chromosome number list`; CREATE TABLE `Chromosome number list` ( `Genus Field` VARCHAR(255), `Species Field` VARCHAR(255), `SubSpecies Field` VARCHAR(255), `Chromosome` VARCHAR(255), `NumberOfDups` INTEGER ) TYPE=InnoDB; # # Dumping data for table 'Chromosome number list' #INSERT INTO `Chromosome number list` (`Genus Field`, `Species Field`, `SubSpecies Field`, `Chromosome`, `NumberOfDups`) VALUES ('Aaronsohnia', 'pubescens', '2000', '2n=18', 2); 86

87 INSERT INTO `Chromosome number list` (`Genus Field`, `Species Field`, `SubSpecies Field`, `Chromosome`, `NumberOfDups`) VALUES ('Abies', 'alba', 'ssp.', '2n=24', 10); INSERT INTO `Chromosome number list` (`Genus Field`, `Species Field`, `SubSpecies Field`, `Chromosome`, `NumberOfDups`) VALUES ('Abies', 'borisii-regis', '2000', '2n=24', 3); INSERT INTO `Chromosome number list` (`Genus Field`, `Species Field`, `SubSpecies Field`, `Chromosome`, `NumberOfDups`) VALUES ('Abies', 'cephalonica', '2000', '2n=24', 3); 7.3. WampServer Σχήµα 7.1: Οι πρώτες γραµµές του κώδικα SQL Το λογισµικό WampServer (Apache, MySQL, PHP on Windows) είναι ένα περιβάλλον ανάπτυξης εφαρµογών web στα Windows. Αντίστοιχα υπάρχει το λογισµικό MampServer (χρησιµοποιήθηκε και αυτό) για λειτουργικό περιβάλλον MacOS, ενώ υπάρχει και το LampServer για λειτουργικό περιβάλλον Linux. Ένα επίσης µεγάλο πλεονέκτηµα του λογισµικού αυτού είναι το γεγονός ότι είναι ελεύθερο (freeware), τόσο στη χρήση του όσο και στον κωδικά που τον παρέχει προκειµένου κάποιος χρήστης να το εξελίξει κατά το δοκούν. Το λογισµικό Wampserver εγκαθιστά τον Apache Server v , την PHP v και τον MySQL Server v , αυτόµατα έτσι ώστε αµέσως µετά την εγκατάσταση να µπορεί ο χρήστης να τρέξει αµέσω εφαρµογές κατασκευασµένες σε αυτή την τεχνολογία. Εναλλακτικά θα έπρεπε να εγκατασταθούν ξεχωριστά κάθε εργαλείο και στην συνέχεια να γίνουν οι απαραίτητες ρυθµίσεις στα config αρχεία τους έτσι ώστε να λειτουργούν όλα µαζί. Αυτό κάνει δύσκολη την µεταφορά των εφαρµογών από υπολογιστή σε υπολογιστή, ενώ κάνει και επισφαλή την σωστή εγκατάσταση τους. Ένα επίσης µεγάλο πλεονέκτηµα του λογισµικού αυτού είναι και το γεγονός ότι παρέχει την δυνατότητα να ελέγχονται όλα τα εργαλεία από αυτό κάτι που κάνει την επισκόπηση τους απλή, ενώ δίνει την δυνατότητα να ξεκινούν όλοι οι server ταυτόχρονα απλώς ανοίγοντας τον WampServer. Το εικονίδιο που παρέχει η εφαρµογή δίνει την δυνατότητα στον χρήστη να ελέγχει ανα πάσα στιγµή την κατάσταση των Server, όπως επίσης και να διαχειριστεί τις ρυθµίσεις τους. Ένα ιδανικό εργαλείο διαχείρισης των βάσεων δεδοµένων που παρέχεται µαζί µε τον WampServer είναι το PHPMyAdmin. Πρόκειται για ένα εργαλείο 87

88 διαχείρισης των βάσεων δεδοµένων που διαχειρίζεται τις βάσεις που είναι εγκατεστηµένες στον MySQL Server. ίνει την δυνατότητα για χειρισµό δεδοµένων µέσω SQL προτάσεων σε γραφικό περιβάλλον αποφεύγοντας την γραµµή εντολών της MySQL. Βοηθάει πολύ στην επαλήθευση των αποτελεσµάτων της λειτουργίας των εφαρµογών που αναπτύσονται. Επίσης βοηθάει πολύ στην επαλήθευση της ορθότητας των SQL προτάσεων που χρησιµοποιούνται στην υπο ανάπτυξη εφαρµογή. Ακόµα δίνει την δυνατότητα στον χρήστη να αλλάξει µε πολύ ευκολο τρόπο την δοµή της βάσης, καθώς και να αλλάξει τα χαρακτηριστικά των πεδίων των πινάκων. Σχήµα 7.2: Παρουσίαση της δοµής του πίνακα TChromo 88

89 Σχήµα 7.3: Παρουσίαση των περιεχοµένων του πίνακα GeoCodes 7.4. Apache Server Κεντρικός υπολογιστής ή αλλιώς εξυπηρετητής ή διακοµιστης είναι ο υπολογιστής που ρόλος του είναι να παρέχει διάφορες υπηρεσίες σε υπολογιστές πελατών στον παγκόσµιο Ιστό. Είναι πιο αναβαθµισµένος όσον αφορά το λογισµικό και υλικό του εξοπλισµό, σε σχέση µε κοινούς υπολογιστές. Τα κύρια χαρακτηριστικά του είναι: Υποστηρίζει επεξεργαστές που χρησιµοποιούνται για την επεξεργασία των πολλαπλώ ν δεδοµένων που δέχεται. Υποστηρί ζει µεγάλης ταχύτητας σκληρούς δίσκους Υποστηρίζει ταχύτερες µνήµες. Οι κεντρικοί υπολογιστές συνήθως συνδέονται µε συστήµατα διπλής τροφοδοσίας ή παροχή αδιάλειπτης ενέργειας (UPS) για µεγαλύτερη αξιοπιστία και σιγουριά στις παρεχόµενες υπηρεσίες. Ο APACHE αναγνωρίζεται γενικά ως ο πιο δηµοφιλής Web Server. Αρχικά σχεδιάστηκε για τους κεντρικούς υπολογιστές Unix. Αργότερα 89

90 χρησιµοποιήθηκε για τα Windows και άλλα λειτουργικά συστήµατα δικτύων (NOS = network operating systems). Ο APACHE Web Server παρέχει µια πλήρη σειρά χαρακτηριστικών γνωρισµάτων των Web Server, συµπεριλαµβανοµένου του CGI, SSL, και των εικονικών περιοχών. Υποστηρίζει επίσης plug in ενότητες και είναι αξιόπιστο, ελεύθερο και σχετικά εύκολο να διαµορφωθεί. Το APACHE είναι ελεύθερο λογισµικό όπου διανέµεται από το Apache Software Foundation που προωθεί τις διάφορες ελεύθερες και προηγµένες ανοικτές πηγές τεχνολογίας Ιστού (Web technologies). Ο Apache είναι ο server που χρησιµοποίηθηκε για την ανάπτυξη της εφαρµογής και είναι απαραίτητος προκειµένου να λειτουργεί αυτή. Η εργασία που επιτελεί είναι να εξυπηρετεί τα αιτήµατα που προέρχονται από τον πελάτη- client της εφαρµογής. Όταν η εφαρµογή ήταν στο στάδιο της ανάπτυξης που σηµαίνει ότι και ο πελάτης και ο Server είναι στον ίδιο υπολογιστή τότε τον ρόλο του πελάτη τον παίζει το πρόγραµµα φυλλοµετρητή ενώ τον ρόλο του server ο εικονικός server που δηµιουργείται. Αυτό βέβαια δεν σηµαίνει πως όταν συνδεόταν ένας άλλος υπολογιστής δεν θα είχε πρόσβαση στην εφαρµογή MySQL Η MySQL είναι ένα σύστηµα διαχείρισης Σχεσιακών Βάσεων εδοµένων (RDBMS), το οποίο υπάρχει σε περισσότερους από 6 εκατοµµύρια υπολογιστές ανά τον κόσµο. Το όνοµα της MySQL προέρχεται από το "My Structured Query Language". Το Λογισµικό λειτουργεί ως ένας διακοµιστής, που επιτρέπει της πρόσβση σε πολλούς χρήστες σε πολλές βάσεις δεδοµένων ταυτόχρονα. Η MySQL χρησιµοποιείται συνήθως σε εφαρµογές ελεύθερου λογισµικού, που απαιτούν πλήρη κάλυψη από ένα σύστηµα διαχείρισης βάσεων δεδοµένων. Επίσης χρησιµοποιείται από πολύ περίπλοκες εφαρµογές του Παγκόσµιου ιστού, όπως είναι η Wikipedia, το Google and το Facebook Η δηµοφιλία της MySQL σε εφαρµογές Ιστού είναι στενά συνδεδεµένη µε αυτή της PHP, οι οποίες πολύ συχνά συνδιάζονται. 90

91 Ο συνδιασµός αυτός χρησιµοποιείται σε αυτή την εφαρµογή αφού παρέχει όλα τα εχέγγυα για αδιάληπτη λειτουργία χωρίς προβλήµατα από ταυτόχρονη χρήση από πολλούς χρήστες. Η MySQL χρησιµοποιεί σαν γλώσσα ερωτηµάτων την SQL, στο Παράρτηµα Α παρατίθενται κάποιες βασικές έννοιες και πληροφορίες για την SQL, που πρέπει να γνωρίζει κάποιος που θα µελετήσει την βάση δεδοµένων PhytoKaryon PHP H γλώσσα συγγραφής σεναρίων στην πλευρά του διακοµιστή (serverside scripting language) PHP, η οποία παρέχει πλήρη υποστήριξη για επικοινωνία µε τις βάσεις δεδοµένων της MySQL. Μια γλώσσα συγγραφής σεναρίων στην πλευρά του διακοµιστή (server-side scripting language) είναι παρόµοια µε την JavaScript καθώς και οι δύο µας δίνουν τη δυνατότητα να ενσωµατώσουµε µικρά προγράµµατα (scripts) µέσα στον κώδικα HTML µιας ιστοσελίδας (Web page). Κατά την εκτέλεση, αυτά τα scripts µάς δίνουν τη δυνατότητα να ελέγχουµε το τι θα εµφανίζεται στο παράθυρο του φυλλοµετρητή µ έναν πολύ πιο ευέλικτο τρόπο απ ό,τι µε την απλή HTML. Η ειδοποιός διαφορά ανάµεσα στην JavaScript και την PHP είναι ότι ο Web browser διερµηνεύει (interprets) την JavaScript µόλις έχει φορτωθεί η ιστοσελίδα (Web page) που περιέχει το script, ενώ οι server-side scripting languages, όπως η PHP, διερµηνεύονται από τον Web server πριν ακόµα σταλεί η σελίδα στον browser. Αφού διερµηνευθεί, ο κώδικας της PHP αντικαθίσταται στην ιστοσελίδα µε τα αποτελέσµατα του script κι έτσι αυτό που βλέπει ο φυλλοµετρητής είναι ένα κανονικό HTML αρχείο. Το script επεξεργάζεται εξ ολοκλήρου από τον server, εξ ου και ο χαρακτηρισµός server-side scripting language. Έστω, το αρχείο today.php : <HTML> <HEAD> <TITLE> Η Σηµερινή Ηµεροµηνία </TITLE> </HEAD> <BODY> <P> Η σηµερινή ηµεροµηνία, σύµφωνα µε τον Web server, είναι : <? php echo( date("l, F ds Y.") );?> </BODY> </HTML> 91

92 Ο περισσότερος κώδικας είναι καθαρή HTML, ενώ η γραµµή ανάµεσα στα <?php και?> είναι γραµµένη σε κώδικα PHP. Το <?php σηµαίνει ότι ξεκινάει ο κώδικας της PHP και το?> σηµαίνει ότι τελειώνει ο κώδικας της PHP. Ο Web server διερµηνεύει ο,τιδήποτε υπάρχει ανάµεσα σ αυτούς τους οριοθέτες (delimiters) και το µετατρέπει σε κανονικό κώδικα HTML πριν στείλει την ιστοσελίδα (Web page) στον φυλλοµετρητή (browser) που την ζήτησε. Έτσι, ο φυλλοµετρητής θα εµφανίσει κάτι σαν το εξής : <HTML> <HEAD> <TITLE> Η Σηµερινή Ηµεροµηνία </TITLE> </HEAD> <BODY> <P> Η σηµερινή ηµεροµηνία, σύµφωνα µε τον Web server, είναι : Wednesday, June 7th </BODY> </HTML> Βλέπουµε ότι έχουν χαθεί όλα τα σηµάδια του κώδικα της PHP και στη θέση τους έχει εµφανισθεί η έξοδος (το αποτέλεσµα) του script και φαίνεται σαν κανονική HTML. Απ αυτό το παράδειγµα µπορούµε να δούµε τα πολλά πλεονεκτήµατα του server-side scripting : εν υπάρχει θέµα συµβατότητας µε φυλλοµετρητές. Τα scripts της PHP διερµηνεύονται από τον Web server και τίποτα άλλο, έτσι δεν πρέπει να ανησυχούµε για το αν η γλώσσα που χρησιµοποιούµε θα υποστηρίζεται από τον φυλλοµετρητή του χρήστη (επισκέπτη) της σελίδας µας. Πρόσβαση σε πόρους (resources) στην πλευρά του server (serverside). Στο παραπάνω παράδειγµα, εµφανίσαµε στην ιστοσελίδα την ηµεροµηνία που έχει ο Web server. Αν είχαµε εισάγει την ηµεροµηνία χρησιµοποιώντας JavaScript, θα µπορούσαµε να εµφανίσουµε µόνο την ηµεροµηνία του υπολογιστή στον οποίο εκτελείται ο Web browser. Αν και αυτό δεν αποτελεί ένα εντυπωσιακό παράδειγµα της αξιοποίησης των πόρων του server, θα µπορούσαµε το ίδιο εύκολα να εισάγουµε κάποιες άλλες πληροφορίες που είναι διαθέσιµες µόνο σ 92

93 ένα script που εκτελείται στον Web server, όπως για παράδειγµα οι πληροφορίες που είναι αποθηκευµένες σε µια βάση δεδοµένων της MySQL η οποία εκτελείται στον υπολογιστή του Web server. Μειωµένος φόρτος στην πλευρά του πελάτη (client). Η JavaScript µπορεί να επιβραδύνει πολύ την εµφάνιση µιας ιστοσελίδας σε πιο αργούς υπολογιστές καθώς ο φυλλοµετρητής θα πρέπει να εκτελέσει το script πριν µπορέσει να εµφανίσει την ιστοσελίδα (Web page). Με το server-side scripting, αυτό το φορτίο µεταφέρεται στο µηχάνηµα του Web server Βασική Σύνταξη και Εντολές της PHP Η σύνταξη της PHP είναι πολύ κοντά στις εξής γλώσσες : C, C++, Java, JavaScript και Perl. Ένα script της PHP αποτελείται από µια σειρά εντολών (commands ή statements), η καθεµία από τις οποίες είναι µια οδηγία (instruction) που πρέπει να ακολουθήσει ο Web server πριν προχωρήσει στην επόµενη. Οι εντολές της PHP τερµατίζονται πάντα µε τον χαρακτήρα semicolon (;). Για παράδειγµα, η παρακάτω αποτελεί µια τυπική εντολή της PHP : echo( "This is a <B>test</B>!" ); Αυτή η εντολή καλεί µια ενσωµατωµένη συνάρτηση µε όνοµα echo() και της µεταβιβάζει το εξής string : This is a <B>test</B>! Η PHP διαθέτει πολλές ενσωµατωµένες συναρτήσεις µε τις οποίες µπορούµε να κάνουµε πολλά πράγµατα από το να στείλουµε µέχρι να επεξεργαστούµε πληροφορίες που είναι αποθηκευµένες σε διάφορα είδη βάσεων δεδοµένων. Η συνάρτηση echo() απλά λαµβάνει το κείµενο που της µεταβιβάζεται και το τοποθετεί στον HTML κώδικα της σελίδας στην τρέχουσα τοποθεσία. Ας δούµε το εξής : <HTML> <HEAD> <TITLE> Ένα Απλό Παράδειγµα PHP </TITLE> </HEAD> <BODY> <P><?php echo("πρόκειται για ένα <B>test</B>!");?></P> </BODY> </HTML> 93

94 Αν αποθηκεύσουµε αυτόν τον κώδικα σ ένα αρχείο µε όνοµα test.php, ή test.php3 αν ο Web host δεν έχει ρυθµίσει τα αρχεία.php ώστε να αναγνωρίζονται σαν scripts της PHP, και το τοποθετήσουµε στον Web server, ένας φυλλοµετρητής που φορτώνει αυτή τη σελίδα, στην ουσία θα φορτώσει το εξής κείµενο : <HTML> <HEAD> <TITLE> Ένα Απλό Παράδειγµα PHP </TITLE> </HEAD> <BODY> <P> Πρόκειται για ένα <B>test</B>!</P> </BODY> </HTML> Τα εισαγωγικά που χρησιµοποιήσαµε στη συνάρτηση echo() σηµαδεύουν την αρχή και το τέλος των strings κειµένου στην PHP Μεταβλητές και Τελεστές Οι µεταβλητές (variables) της PHP είναι ολόιδιες µε τις µεταβλητές που υπάρχουν στις περισσότερες γλώσσες προγραµµατισµού. Η επόµενη εντολή δηµιουργεί µια µεταβλητή µε όνοµα $testvariable και της εκχωρεί την τιµή 3 : $testvariable = 3; Πρέπει να έχουµε υπόψη µας ότι όλα τα ονόµατα µεταβλητών στην PHP ξεκινούν µε το σύµβολο του δολαρίου ($). Η PHP αντιµετωπίζει τους τύπους δεδοµένων κάπως χαλαρά ("loosely typed" language), το οποίο σηµαίνει ότι µια µόνο µεταβλητή µπορεί να περιέχει οποιονδήποτε τύπο δεδοµένων, είτε αριθµό (number), είτε string κειµένου ή κάτι άλλο, και ακόµη µπορεί να αλλάζει τύπους δεδοµένων σ όλη τη διάρκειά της. Έτσι, αν γράψουµε την επόµενη εντολή µετά από την εντολή που γράψαµε παραπάνω, θα εκχωρήσουµε µια νέα τιµή στη µεταβλητή $testvariable και το περιεχόµενο της µεταβλητής θα αλλάξει από αριθµό σ ένα string κειµένου : $testvariable = "Three"; 94

95 Το σύµβολο = (equals sign) που χρησιµοποιήσαµε στις δύο τελευταίες εντολές αποκαλείται τελεστής εκχώρησης (assignment operator) γιατί χρησιµοποιείται για να εκχωρήσουµε τιµές σε µεταβλητές. Μπορούµε να χρησιµοποιήσουµε και τους γνωστούς µας αριθµητικούς τελεστές για να κάνουµε µαθηµατικές πράξεις σε τιµές, ως εξής : $testvariable = 1 + 1; // Εκχωρεί την τιµή 2 $testvariable = 1 1; // Εκχωρεί την τιµή 0 $testvariable = 2 * 2; // Εκχωρεί την τιµή 4 $testvariable = 2 / 2; // Εκχωρεί την τιµή 1 Οι παραπάνω γραµµές τελειώνουν µ ένα σχόλιο (comment) η καθεµία. Τα σχόλια (comments) αποτελούν έναν τρόπο για να περιγράψουµε το τι κάνει ο κώδικάς µας, εισάγοντας ένα επεξηγηµατικό κείµενο στον κώδικά µας και λέγοντας στον διερµηνευτή (interpreter) της PHP να το αγνοήσει. Τα σχόλια αρχίζουν µε τους χαρακτήρες // και τελειώνουν στο τέλος της ίδιας γραµµής. Η PHP χρησιµοποιεί επίσης και το στυλ σχολιασµού /* κείµενο σχολίου */ που µας είναι γνωστό από άλλες γλώσσες προγραµµατισµού. Η PHP διαθέτει και έναν τελεστή (operator) για να µπορούµε να ενώσουµε strings κειµένου µαζί : // Εκχωρεί το κείµενο "Hi there!". $testvariable = "Hi ". "there!"; Οι µεταβλητές µπορούν να χρησιµοποιηθούν οπουδήποτε στη θέση µιας τιµής, όπως φαίνεται και από τα παρακάτω παραδείγµατα : $var1 = "PHP"; $var2 = 5; $var3 = $var2 + 1; $var2 = $var1; echo($var1); echo($var2); // Εκχωρεί το κείµενο "PHP" στην $var1 // Εκχωρεί την τιµή 5 στην $var2 // Εκχωρεί την τιµή 6 στην $var3 // Εκχωρεί το κείµενο "PHP" στην $var2 // Εµφανίζει "PHP" // Εµφανίζει "PHP" echo($var3); // Εµφανίζει 6 95

96 echo($var1. " rules!"); echo("$var1 rules!"); echo('$var1 rules!'); // Εµφανίζει "PHP rules!" // Εµφανίζει "PHP rules!" // Εµφανίζει '$var1 rules!' Ας προσέξουµε ιδιαίτερα τις δύο τελευταίες γραµµές. Μπορούµε να συµπεριλάβουµε το όνοµα µιας µεταβλητής απευθείας µέσα στο κείµενο ενός string και να αντικατασταθεί το όνοµα της µεταβλητής µε την τιµή της αν περικλείσουµε το string µε διπλά εισαγωγικά (double quotes). Όπως φαίνεται από την τελευταία γραµµή, όµως, ένα string που περικλείεται µε µονά εισαγωγικά (single quotes) δεν αντικαθιστά τα ονόµατα µεταβλητών µε τις τιµές τους Η Αλληλεπίδραση µε τον Χρήστη και οι Φόρµες Για πολλές από τις ενδιαφέρουσες εφαρµογές της PHP, το να µπορούµε να αλληλεπιδρούµε (interact) µε τον χρήστη που βλέπει την ιστοσελίδα µας είναι κάτι πολύ βασικό. Οι χρήστες της JavaScript θα είναι συνηθισµένοι να αναφέρονται στα χειριστήρια συµβάντων (event handlers), τα οποία µας δίνουν τη δυνατότητα να αντιδρούµε απευθείας σε πολλές ενέργειες (actions) του χρήστη, όπως η µετακίνηση του ποντικιού πάνω από έναν σύνδεσµο (link) της σελίδας. Οι server-side scripting languages, όπως είναι η PHP, έχουν µια πιο περιορισµένη εµβέλεια όσον αφορά την αλληλεπίδραση µε τον χρήστη (user interaction). Εφόσον η µόνη περίπτωση που εκτελείται ο κώδικας της PHP είναι όταν ζητείται µια σελίδα από τον server, η αλληλεπίδραση µε τον χρήστη µπορεί να λάβει χώρα µ έναν τρόπο back-and-forth, µε τον χρήστη να στέλνει αιτήσεις (requests) στον server και τον server να απαντάει (response) µε δυναµικά παραγόµενες ιστοσελίδες. Το κλειδί στην αλληλεπίδραση µε τον χρήστη στην PHP είναι να κατανοήσουµε τις τεχνικές που υπάρχουν για την αποστολή πληροφοριών µαζί µε την αίτηση του χρήστη για µια νέα ιστοσελίδα (Web page). Η PHP µπορεί να το κάνει αυτό πολύ εύκολα. Η απλούστερη µέθοδος για να στείλουµε πληροφορίες µαζί µε µια αίτηση για σελίδα (page request) είναι να χρησιµοποιήσουµε το "URL query string". 96

97 Θα δούµε ένα απλό παράδειγµα. ηµιουργούµε ένα κανονικό HTML αρχείο, χωρίς επέκταση αρχείου.php εφόσον δεν θα υπάρχει καθόλου PHP κώδικας σ αυτό το αρχείο, και καταχωρούµε τον εξής σύνδεσµο (link) : <A HREF="welcome.php?name=Kevin"> Γεια σας, είµαι ο Kevin! </A> Αυτός είναι ένας σύνδεσµος (link) προς το αρχείο welcome.php, αλλά εκτός από τη σύνδεση µε το αρχείο, περνάµε (µεταβιβάζουµε) επίσης το όνοµα και την τιµή µιας µεταβλητής µαζί µε την αίτηση για τη σελίδα (page request). Η µεταβλητή µεταβιβάζεται σαν µέρος του "query string", το οποίο είναι το τµήµα του URL που βρίσκεται µετά το?. Η µεταβλητή ονοµάζεται name και η τιµή της είναι Kevin. Για να συνοψίσουµε, έχουµε δηµιουργήσει έναν σύνδεσµο (link) που φορτώνει το αρχείο welcome.php και ενηµερώνει τον κώδικα της PHP που περιέχεται σ αυτό το αρχείο ότι η µεταβλητή name είναι ίση µε Kevin. Το δηµιουργούµε σαν ένα καινούργιο HTML αρχείο, αλλά µε την επέκταση.php, η οποία ενηµερώνει τον Web server να είναι έτοιµος να διερµηνεύσει κάποιον κώδικα της PHP που υπάρχει στο αρχείο αυτό. Αν ο Web server δεν έχει ρυθµισθεί για να δέχεται το.php σαν µια επέκταση αρχείου για τα αρχεία PHP, θα πρέπει να το ονοµάσουµε welcome.php3. Στο κυρίως σώµα αυτού του καινούργιου αρχείου γράφουµε τα εξής : <?php echo( "Καλώς ήρθατε στο Web site µας, $name!" );?> Τώρα, αν χρησιµοποιήσουµε τον σύνδεσµο (link) που υπάρχει στο πρώτο αρχείο για να φορτώσουµε το δεύτερο αρχείο, θα δούµε ότι η σελίδα εµφανίζει το µήνυµα "Καλώς ήρθατε στο Web site µας, Kevin!". ηλαδή, η τιµή της µεταβλητής που υπήρχε στο query string του URL τοποθετήθηκε αυτόµατα σε µια µεταβλητή της PHP µε όνοµα $name, την οποία χρησιµοποιήσαµε για να εµφανίσουµε την µεταβιβαζόµενη τιµή σαν µέρος ενός string κειµένου. Μπορούµε να µεταβιβάσουµε και περισσότερες από µία τιµές στο query string, αν το επιθυµούµε. Θα δούµε µια λίγο πιο πολύπλοκη παραλλαγή 97

98 του ίδιου παραδείγµατος. Αλλάζουµε τον σύνδεσµο (link) στο HTML αρχείο για να είναι ως εξής : <A HREF="welcome.php?firstname=Kevin&lastname=Yank"> Γεια σας, είµαι ο Kevin Yank! </A> Αυτή τη φορά µεταβιβάζουµε τις εξής δύο µεταβλητές : firstname και lastname, οι οποίες ξεχωρίζουν µέσα στο query string µε τον χαρακτήρα & (ampersand). Μπορούµε να µεταβιβάσουµε κι άλλες µεταβλητές αν χρειασθεί, ξεχωρίζοντας το κάθε ζευγάρι name=value από το κείµενο µε τον χαρακτήρα &. Όπως και πριν, µπορούµε να χρησιµοποιήσουµε τις τιµές των δύο µεταβλητών στο αρχείο welcome.php, ως εξής : <?php echo( "Καλώς ήρθατε στο Web site µας, $firstname $lastname!" );?> Μέχρι εδώ όλα καλά, αλλά έχουµε δρόµο ακόµη για να πετύχουµε τον στόχο µας για πραγµατική αλληλεπίδραση µε τον χρήστη (true user interaction), όπου ο χρήστης θα µπορεί πράγµατι να καταχωρήσει δικές του τιµές και να τις επεξεργαστεί η PHP. Συνεχίζοντας µε το προηγούµενο παράδειγµα, θα θέλαµε να επιτρέψουµε στον χρήστη να καταχωρήσει το όνοµά του και να το βλέπει να εµφανίζεται στο µήνυµα. Για να µπορεί ο χρήστης να καταχωρήσει µια τιµή, θα πρέπει να χρησιµοποιήσουµε µια φόρµα και ο κώδικας είναι ο εξής : <FORM ACTION="welcome.php" METHOD=GET> First Name : <INPUT TYPE=TEXT NAME="firstname"><BR> Last Name : <INPUT TYPE=TEXT NAME="lastname"> <INPUT TYPE=SUBMIT VALUE="Submit"> </FORM> Αυτή η φόρµα έχει το ίδιο ακριβώς αποτέλεσµα µε τον δεύτερο σύνδεσµο που είδαµε προηγουµένως, ο οποίος περιείχε το firstname=kevin& 98

99 lastname=yank στο query string, µε τη διαφορά ότι µπορούµε να γράψουµε ό,τι ονόµατα θέλουµε. Όταν κάνουµε κλικ στο πλήκτρο υποβολής (submit button), το οποίο περιέχει την ετικέτα Submit, ο φυλλοµετρητής θα φορτώσει το αρχείο welcome. php και θα προσθέσει αυτόµατα τις µεταβλητές και τις τιµές τους στο query string για µας. Παίρνει τα ονόµατα των µεταβλητών από τις ιδιότητες (attributes) NAME των tags INPUT TYPE=TEXT και παίρνει τις τιµές που έχει καταχωρήσει ο χρήστης στα πεδία κειµένου (text fields). Η ιδιότητα METHOD του tag FORM χρησιµοποιείται για να γνωρίζει ο φυλλοµετρητής πώς να στείλει τις µεταβλητές και τις τιµές τους µαζί µε την αίτηση (request). Η τιµή GET, όπως την χρησιµοποιήσαµε παραπάνω, τις κάνει να µεταβιβάζονται στο query string, αλλά υπάρχει και µια άλλη εναλλακτική λύση. εν είναι πάντα επιθυµητό, ή και τεχνικά εφικτό, να εµφανισθούν οι τιµές στο query string. Τι θα συνέβαινε αν είχαµε ένα tag TEXTAREA στη φόρµα για να µπορεί ο χρήστης να καταχωρήσει µια µεγάλη ποσότητα κειµένου; Ένα URL που περιέχει πολλές παραγράφους κειµένου στο query string θα είναι άσχηµα µεγάλο και θα ξεπερνάει κατά πολύ το µέγιστο µήκος του URL στους σηµερινούς φυλλοµετρητές. Η εναλλακτική λύση είναι για τον φυλλοµετρητή να µεταβιβάσει τις πληροφορίες αόρατα, στο παρασκήνιο. Ο κώδικας γι αυτό είναι ακριβώς ο ίδιος, αλλά αντί να θέσουµε την ιδιότητα METHOD της φόρµας ίση µε GET, την ορίζουµε ίση µε POST : <FORM ACTION="welcome.php" METHOD=POST> First Name : <INPUT TYPE=TEXT NAME="firstname"><BR> Last Name : <INPUT TYPE=TEXT NAME="lastname"> <INPUT TYPE=SUBMIT VALUE="Submit"> </FORM> 99

100 Αυτή η φόρµα είναι λειτουργικά ισοδύναµη µε την προηγούµενη και η µόνη διαφορά είναι ότι το URL της σελίδας που φορτώνεται όταν ο χρήστης κάνει κλικ στο πλήκτρο Submit δεν θα περιέχει ένα query string. Από την άλλη πλευρά, µπορούµε έτσι να συµπεριλάβουµε µεγάλες ή ευαίσθητες τιµές (όπως κωδικούς εισόδου passwords) στα δεδοµένα που υποβάλλονται από τη φόρµα, χωρίς να εµφανίζονται αυτά στο query string. Από την άλλη, αν ο χρήστης µαρκάρει (bookmarks) τη σελίδα που προέρχεται από την υποβολή της φόρµας, το bookmark θα είναι άχρηστο, εφόσον δεν θα περιέχει τις τιµές που υποβλήθηκαν. Αυτός, παρεµπιπτόντως, είναι και ο κύριος λόγος που µηχανές αναζήτησης (search engines), όπως η AltaVista, χρησιµοποιούν το query string για να υποβάλλουν στοιχεία για αναζήτηση (search terms). Αν µαρκάρουµε (bookmark) µια σελίδα που προέκυψε από µια αναζήτηση στην AltaVista, θα µπορούµε να χρησιµοποιήσουµε αυτό το bookmark για να ξανακάνουµε την ίδια αναζήτηση αργότερα, εφόσον τα στοιχεία της αναζήτησης (search terms) περιέχονται στο URL Σελίδες Πολλαπλού Σκοπού (Multi-Purpose Pages) Ας υποθέσουµε ότι θέλουµε να φτιάξουµε ένα site ώστε να εµφανίζει το όνοµα του επισκέπτη (χρήστη) στην κορυφή της κάθε σελίδας. Για να µπορέσουµε να επεκτείνουµε το παράδειγµα σ αυτό που θέλουµε να πετύχουµε, θα πρέπει να ξεπεράσουµε τα εξής προβλήµατα : Θα πρέπει να εµφανίσουµε το όνοµα σε κάθε σελίδα του site και όχι µόνο σε µία. εν µπορούµε να ελέγξουµε ποια σελίδα του site βλέπει πρώτα ένας χρήστης. Το πρώτο πρόβληµα δεν είναι πολύ δύσκολο να ξεπεραστεί. Εφόσον έχουµε το όνοµα του χρήστη σε µια µεταβλητή σε κάποια σελίδα, µπορούµε να το µεταβιβάσουµε σε µια άλλη σελίδα προσθέτοντας το όνοµα στο query string όλων των συνδέσµων (links), ως εξής : <A HREF="newpage.php?name=<?php echo(urlencode($name));?>"> A link </A> 100

101 Έχουµε ενσωµατώσει τον κώδικα της PHP στη µέση ενός tag της HTML. Αυτό είναι νόµιµο και δουλεύει κανονικά. Η συνάρτηση echo() είναι γνωστή, αλλά η συνάρτηση urlencode() είναι καινούργια και η δουλειά της είναι να λάβει σαν είσοδο κάποιους ειδικούς χαρακτήρες του string, όπως τα κενά για παράδειγµα, και να τους µετατρέψει σε ειδικούς κωδικούς για να µπορέσουν να εµφανισθούν στο query string. Για παράδειγµα, αν η µεταβλητή $name έχει την τιµή "Kevin Yank", τότε εφόσον δεν επιτρέπονται τα κενά στο query string, η έξοδος της συνάρτησης urlencode() θα είναι "Kevin+Yank", το οποίο θα µετατραπεί πάλι πίσω στο κανονικό όταν θα δηµιουργηθεί η µεταβλητή $name στο αρχείο newpage. php. Μέχρι εδώ έχουµε κατορθώσει να µεταβιβάσουµε το όνοµα του χρήστη σ όλους τους συνδέσµους (links) του site. Τώρα αυτό που πρέπει να κάνουµε είναι να ζητάµε πρώτα απ όλα αυτό το όνοµα. Στο παράδειγµα µε το µήνυµα καλωσορίσµατος, είχαµε µια ειδική HTML σελίδα µε µια φόρµα που προέτρεπε τον χρήστη να καταχωρήσει το όνοµά του. Το πρόβληµα είναι, όµως, ότι δεν µπορούµε να αναγκάσουµε τον χρήστη να µπαίνει στο Web site από εκείνη τη σελίδα κάθε φορά που επισκέπτεται το site µας. Η λύση είναι να κάνουµε έναν έλεγχο σε κάθε σελίδα του site για να διαπιστώσουµε αν έχει καταχωρηθεί ένα όνοµα και να ζητάµε ένα όνοµα από τον χρήστη αν χρειασθεί. Αυτό σηµαίνει ότι όλες οι σελίδες του site είτε θα εµφανίζουν το περιεχόµενό τους ή µια προτροπή για να καταχωρηθεί ένα όνοµα ανάλογα µε το αν έχει µια τιµή η µεταβλητή $name. Θα αναφερθούµε σε σελίδες που είναι ικανές να εµφανίσουν εντελώς διαφορετικό περιεχόµενο ανάλογα µε κάποιες υπό συνθήκη σελίδες πολλαπλού σκοπού. Ο κώδικας για µια σελίδα πολλαπλού σκοπού (multipurpose page) είναι ως εξής : <HTML> <HEAD> <TITLE> Σελίδα Πολλαπλο Σκοπού (Mύulti-Purpose Page) </TITLE> </HEAD> <BODY> 101

102 <?php if (<συνθήκη>) {?> <!-- HTML περιεχόµενο που θα εµφανισθεί αν η <συνθήκη> είναι αληθής (true) --> <?php } else {?> <!-- HTML περιεχόµενο που θα εµφανισθεί αν η <συνθήκη> είναι ψευδής (false) --> <?php }?> </BODY> </HTML> Ο παραπάνω κώδικας µπορεί να µας µπερδεύει λίγο, αλλά πρόκειται για µια κανονική εντολή if-else µε τµήµατα HTML κώδικα, που θα εµφανισθούν ανάλογα µε την τιµής µιας συνθήκης, αντί για εντολές της PHP. Αυτό το παράδειγµα δείχνει ένα από τα µεγάλα πλεονεκτήµατα της PHP, δηλ. το ότι µπορούµε να βγούµε από και να µπούµε σε PHP mode οποτεδήποτε θέλουµε. Μπορούµε να φανταστούµε το <?php σαν την εντολή για να µπούµε σε PHP mode και το?> σαν την εντολή για να ξαναγυρίσουµε σε κανονικό HTML mode. Υπάρχει µια εναλλακτική µορφή της εντολής if-else που µπορεί να κάνει τον κώδικα πιο ευανάγνωστο σε περιπτώσεις όπως η παραπάνω. Ακολουθεί ένα παράδειγµα : <HTML> <HEAD> <TITLE> Σελίδα Πολλαπλο Σκοπού (Mύulti-Purpose Page) </TITLE> </HEAD> <BODY> <?php if (<συνθήκη>):?> <!-- HTML περιεχόµενο που θα εµφανισθεί αν η <συνθήκη> είναι αληθής (true) --> <?php else:?> <!-- HTML περιεχόµενο που θα εµφανισθεί αν η <συνθήκη> είναι ψευδής (true) --> <?php endif;?> </BODY> </HTML> Ας δούµε τώρα µια δειγµατική σελίδα (sample page) του site µας : <HTML> <HEAD> <TITLE> Σελίδα - είγµα </TITLE> </HEAD> <BODY> <?php if ( isset($name) ):?> 102

103 <P> Όνοµα : <?php echo($name);?></p> <P> Αυτή η παράγραφος περιέχει ένα <A HREF="newpage.php?name=<?php echo(urlencode($name));?>"> link </A> που µεταβιβάζει τη µεταβλητή name στο επόµενο έγγραφο (document) </P> <?php else:?> <!-- εν έχει δοθεί κάποιο όνοµα και το ζητάµε από τον χρήστη --> <FORM ACTION=<?php echo($php_self);?> METHOD=GET> ώστε το όνοµά σας : <INPUT TYPE=TEXT NAME="name"> <INPUT TYPE=SUBMIT VALUE="Submit"> </FORM> <?php endif;?> </BODY> </HTML> Πρώτα απ όλα, χρησιµοποιούµε µια νέα συνάρτηση µε όνοµα isset() µέσα στη συνθήκη. Αυτή η συνάρτηση επιστρέφει την τιµή true αν στη µεταβλητή που της έχει δοθεί σαν όρισµα έχει εκχωρηθεί µια τιµή, δηλ. στη συγκεκριµένη περίπτωση αν έχει δοθεί ένα όνοµα, και την τιµή false αν η µεταβλητή δεν υπάρχει, δηλ. στη συγκεκριµένη περίπτωση αν δεν έχει δοθεί ένα όνοµα. Ενώ επίσης χρησιµοποιείται και η µεταβλητή $PHP_ SELF για να καθορίσουµε την ιδιότητα (attribute) ACTION του tag FORM. Αυτή η µεταβλητή είναι µια από τις πολλές στις οποίες δίνει πάντα αυτόµατα τιµή η PHP. Πιο συγκεκριµένα, η $PHP_SELF θα είναι πάντα ίση µε το URL της τρέχουσας σελίδας. Αυτό µας δίνει τη δυνατότητα να δηµιουργήσουµε µια φόρµα, η οποία όταν υποβληθεί θα φορτώσει την ίδια σελίδα, αλλά αυτή τη φορά µε καθορισµένη τη µεταβλητή $name. ηµιουργώντας όλες τις σελίδες του site µ αυτόν τον τρόπο, θα ζητηθεί από τους επισκέπτες να καταχωρήσουν το όνοµά τους στην πρώτη σελίδα που θα επισκεφθούν, όποια κι αν είναι αυτή. Μόλις καταχωρήσουν το όνοµα και κάνουν κλικ στο πλήκτρο υποβολής Submit, θα παρουσιαστούν µε την ακριβή σελίδα που ζήτησαν. Το όνοµα που καταχώρησαν θα µεταβιβασθεί µετά στο query string του κάθε συνδέσµου (link) από δω και πέρα ηµοσίευση εδοµένων της MySQL στο Web Θα δούµε τώρα πώς µπορούµε να πάρουµε τις πληροφορίες που είναι αποθηκευµένες σε µια βάση δεδοµένων (database) και να τις εµφανίσουµε σε 103

104 µια ιστοσελίδα (Web page) για να µπορεί να τις δει κάποιος. Μέχρι τώρα έχουµε µάθει τα βασικά για την MySQL, που είναι µια µηχανή σχεσιακών βάσεων δεδοµένων (relational database engine) και την PHP, που είναι µια γλώσσα συγγραφής σεναρίων στην πλευρά του server (server-side scripting language). Θα δούµε τώρα πώς µπορούµε να χρησιµοποιήσουµε αυτά τα εργαλεία µαζί για να δηµιουργήσουµε ένα πραγµατικό database-driven Web site. Έχουµε τα εξής δύο πανίσχυρα εργαλεία στη διάθεσή µας : τη γλώσσα συγγραφής σεναρίων (scripting language) PHP και τη µηχανή βάσεων δεδοµένων (database engine) MySQL. Είναι σηµαντικό να καταλάβουµε το πώς αυτά τα δύο εργαλεία θα µπορέσουν να συνεργαστούν µεταξύ τους. Η όλη ιδέα πίσω από ένα database-driven Web site είναι να βρίσκεται (εµφανίζεται) το περιεχόµενο (content) του site σε µια βάση δεδοµένων και απ αυτό το περιεχόµενο της βάσης δεδοµένων να εξάγουµε δυναµικά πληροφορίες για να µπορέσουµε να δηµιουργήσουµε ιστοσελίδες (Web pages) που να αλλάζουν δυναµικά χωρίς να κάνουµε συνέχεια αλλαγές σ αυτές και δηµοσίευσή τους (publish). Έτσι, στο ένα άκρο του συστήµατος έχουµε έναν επισκέπτη (visitor) ή χρήστη (user) ή και πελάτη (client) στο site µας, ο οποίος χρησιµοποιεί έναν φυλλοµετρητή (Web browser), φορτώνει το και περιµένει να δει µια συνηθισµένη ιστοσελίδα της HTML (HTML Web page). Στο άλλο άκρο έχουµε το περιεχόµενο (content) του site µας που βρίσκεται σ έναν ή περισσότερους πίνακες (tables) σε µια βάση δεδοµένων της MySQL και το οποίο το µόνο που γνωρίζει είναι πώς να απαντάει σε ερωτήµατα (queries) ή εντολές (commands) της SQL. Η γλώσσα συγγραφής (scripting language) PHP είναι ο ενδιάµεσος που µιλάει και τις δύο γλώσσες. Χρησιµοποιώντας την PHP, µπορούµε να δηµιουργήσουµε την παρουσίαση (όψη) του site, δηλ. τα ωραία γραφικά και τις διατάξεις σελίδας (page layouts) σαν υποδείγµατα (templates) στην κανονική HTML. Χρησιµοποιούµε τον κώδικα της PHP για να συνδεθούµε στη βάση δεδοµένων της MySQL και δηµιουργούµε ερωτήµατα (queries) της SQL 104

105 για να µπορέσουµε να ανακτήσουµε και να εµφανίσουµε κάποιο περιεχόµενο της βάσης δεδοµένων µέσα σε µια ιστοσελίδα. Όταν κάποιος επισκεφθεί µια σελίδα σ ένα database-driven Web site θα συµβούν τα εξής : Ο φυλλοµετρητής του επισκέπτη θα ζητήσει τη Web page χρησιµοποιώντας ένα στάνταρτ URL. Το λογισµικό του Web server (Apache, IIS ή άλλο) αναγνωρίζει ότι το ζητούµενο αρχείο είναι ένα script της PHP και το διερµηνεύει (interprets) χρησιµοποιώντας το πρόσθετο (plug-in) που διαθέτει για την PHP πριν απαντήσει στην αίτηση για τη σελίδα (page request). Μερικές εντολές της PHP, που θα δούµε αργότερα, συνδέονται στη βάση δεδοµένων της MySQL και ζητούν το περιεχόµενο (content) που ανήκει στην ιστοσελίδα (Web page). Η βάση δεδοµένων MySQL απαντάει στέλνοντας το ζητούµενο περιεχόµενο στο script της PHP. Το script της PHP αποθηκεύει το περιεχόµενο σε µια ή περισσότερες µεταβλητές της PHP και µετά χρησιµοποιεί τη γνωστή µας συνάρτηση echo() για να το εµφανίσει σαν µέρος της ιστοσελίδας. Το plug-in της PHP τελειώνει, παραδίδοντας στον Web server ένα αντίγραφο του κώδικα της HTML που έχει δηµιουργήσει. Ο Web server στέλνει τον κώδικα της HTML στον φυλλοµετρητή (Web browser) όπως θα έκανε και µ ένα κανονικό (απλό) αρχείο HTML, µε τη διαφορά ότι αντί να προέλθει απευθείας από ένα αποθηκευµένο αρχείο HTML, η σελίδα αυτή είναι το αποτέλεσµα (έξοδος) που παρέχεται από το πρόσθετο (plug-in) της PHP ηµιουργία Σύνδεσης της MySQL µε την PHP Πριν µπορέσουµε να πάρουµε το περιεχόµενο µιας βάσης δεδοµένων της MySQL για να το εισάγουµε σε µια ιστοσελίδα, πρέπει πρώτα να δούµε πώς θα καθιερώσουµε µια σύνδεση (connection) µε την MySQL. Η κλήση στην ακόλουθη συνάρτηση της PHP δηµιουργεί αυτή τη σύνδεση : mysql_connect(<address>, <username>, <password>); 105

106 Όπου το <address> είναι η IP διεύθυνση ή το hostname του υπολογιστή στον οποίο εκτελείται το λογισµικό του MySQL server, που είναι το localhost αν εκτελείται στον ίδιο υπολογιστή µε το λογισµικό του Web server, και τα <username> και <password> είναι τα ίδια µε τα user name και password της MySQL που χρησιµοποιήσαµε για να συνδεθούµε στον MySQL server. Η συνάρτηση mysql_connect() επιστρέφει έναν αριθµό για να µπορούµε να αναγνωρίσουµε (ξεχωρίσουµε) τη σύνδεση (connection). Μπορούµε να κρατήσουµε αυτή την τιµή σε µια µεταβλητή, ως εξής : $dbcnx = mysql_connect("localhost", "root", "mypasswd"); Η τιµή που επιστρέφει η συνάρτηση mysql_connect(), που θα την αποκαλούµε connection identifier (αναγνωριστικό σύνδεσης), αποθηκεύεται σε µια µεταβλητή µε όνοµα $dbcnx. Εφόσον ο MySQL server αποτελεί ένα εντελώς ξεχωριστό κοµµάτι λογισµικού, πρέπει να δούµε και την πιθανότητα να µην είναι διαθέσιµος ο server ή να µην είναι προσβάσιµος εξαιτίας µιας βλάβης στο δίκτυο ή επειδή ο συνδυασµός username/password που δώσαµε δεν γίνεται αποδεκτός από τον server. Σ αυτές τις περιπτώσεις, η συνάρτηση mysql_connect() δεν επιστρέφει έναν connection identifier εφόσον δεν γίνεται κάποια σύνδεση και αντί γι αυτόν επιστρέφει την τιµή false. Έχουµε έτσι τη δυνατότητα να αντιδράσουµε σε τέτοιες καταστάσεις χρησιµοποιώντας µια εντολή if, ως εξής : $dbcnx "root", "mypasswd"); if (!$dbcnx) { echo("<p>η σύνδεση µε τον "."database server είναι αδύνατη</p>"); exit(); } Πρώτα, έχουµε τοποθετήσει το µπροστά από τη συνάρτηση mysql_connect(). Πολλές συναρτήσεις, όπως και η mysql_connect(), εµφανίζουν αυτόµατα άσχηµα µηνύµατα λάθους όταν κάτι πάει στραβά. Η τοποθέτηση του µπροστά από το όνοµα της 106

107 συνάρτησης µάς δίνει τη δυνατότητα να εµφανίσουµε το δικό µας µήνυµα λάθους, που θα είναι πιο φιλικό. εύτερο, τοποθετήσαµε ένα θαυµαστικό! µπροστά από τη µεταβλητή $dbcnx µέσα στη συνθήκη της εντολής if. Το! είναι ο τελεστής άρνησης (negation operator) της PHP, ο οποίος στην ουσία µετατρέπει µια τιµή false σε true και µια τιµή true σε false. Έτσι, αν η σύνδεση αποτύχει και η συνάρτηση mysql_connect() επιστρέψει false, η µεταβλητή!$dbcnx θα γίνει ίση µε true και θα εκτελεσθούν οι εντολές που βρίσκονται µέσα στο σώµα της εντολής if. Αντίθετα, αν γίνει η σύνδεση, ο connection identifier που είναι αποθηκευµένος στη µεταβλητή $dbcnx θα γίνει ίσος µε true, καθώς κάθε αριθµός που είναι διαφορετικός από το 0 θεωρείται ότι είναι true στην PHP, και έτσι η!$dbcnx θα αποτιµηθεί σε false και δεν εκτελεσθούν οι εντολές που βρίσκονται µέσα στο σώµα της συνάρτησης if. Η συνάρτηση exit(), η οποία δεν δέχεται παραµέτρους και αναγκάζει την PHP να σταµατήσει να διαβάζει τη σελίδα σ αυτό το σηµείο. Αυτή είναι σωστή απόκριση σε µια αποτυχηµένη σύνδεση µε µια βάση δεδοµένων, εφόσον στις περισσότερες περιπτώσεις η σελίδα δεν θα είναι σε θέση να εµφανίσει κάποιες χρήσιµες πληροφορίες χωρίς αυτή τη σύνδεση. Το επόµενο βήµα αφότου έχουµε καθιερώσει µια σύνδεση είναι να επιλέξουµε τη βάση δεδοµένων µε την οποία θέλουµε να δουλέψουµε. Προς τον σκοπό αυτό χρησιµοποιούµε µια άλλη συνάρτηση, ως εξής : mysql_select_db("jokes", $dbcnx); Χρησιµοποιούµε τη µεταβλητή $dbcnx που περιέχει το αναγνωριστικό σύνδεσης της βάσης δεδοµένων (database connection identifier) για να ενηµερώσουµε τη συνάρτηση ποια σύνδεση βάσης δεδοµένων να χρησιµοποιήσει. Αυτή είναι µια προαιρετική παράµετρος και όταν παραλείπεται, η συνάρτηση θα χρησιµοποιήσει αυτόµατα το αναγνωριστικό σύνδεσης (link identifier) της τελευταίας σύνδεσης που έχει ανοιχθεί. Αυτή η συνάρτηση επιστρέφει true όταν είναι επιτυχής και false αν συµβεί κάποιο λάθος. Και πάλι, είναι σωστή τακτική η χρήση µιας εντολής if για τον χειρισµό των λαθών : 107

108 if ) { echo( "<P>Αδύνατος ο εντοπισµός της "."database joke</p>" ); exit(); } Εφόσον έχουµε καθιερώσει µια σύνδεση (connection) και έχουµε επιλέξει µια βάση δεδοµένων, είµαστε έτοιµοι να αρχίσουµε να χρησιµοποιούµε τα δεδοµένα που βρίσκονται αποθηκευµένα στη βάση δεδοµένων Εκτέλεση SQL Ερωτηµάτων (Queries) µε την PHP Στα προηγούµενα, είδαµε πώς µπορούµε να συνδεθούµε σ έναν database server της MySQL µε το πρόγραµµα mysql για να µπορέσουµε να γράψουµε ερωτήµατα (queries) ή εντολές (commands) της SQL και να δούµε αµέσως τα αποτελέσµατα των ερωτηµάτων. Στην PHP υπάρχει ένας παρόµοιος µηχανισµός, η συνάρτηση mysql_query(). mysql_query(<query>, <connection id>); Όπου το <query> είναι ένα string που περιέχει τις εντολές της SQL που θα εκτελεσθούν. Όπως και µε τη συνάρτηση mysql_select_db(), η παράµετρος connection identifier (αναγνωριστικό σύνδεσης) είναι προαιρετική. Η τιµή επιστροφής αυτής της συνάρτησης εξαρτάται από το είδος του ερωτήµατος που στέλνεται. Για τις περισσότερες εντολές της SQL, η συνάρτηση mysql_query() επιστρέφει true ή false για να δείξει την επιτυχία ή την αποτυχία της αντίστοιχα. Για τα ερωτήµατα DELETE, INSERT και UPDATE, µε τα οποία µπορούµε να τροποποιήσουµε τα αποθηκευµένα δεδοµένα, η MySQL κατάγράφει επίσης τον αριθµό των γραµµών του πίνακα (καταχωρήσεων) που επηρεάστηκαν από το ερώτηµα (query). Τα ερωτήµατα SELECT αντιµετωπίζονται λίγο διαφορετικά, εφόσον µπορούν να ανακτήσουν πολλές πληροφορίες και η PHP πρέπει να παράσχει τρόπους αντιµετώπισης αυτών των πληροφοριών. 108

109 7.7. Χειρισµός των Αποτελεσµάτων της Εντολής SELECT Για τα περισσότερα ερωτήµατα της SQL, η συνάρτηση mysql_query() επιστρέφει είτε true για επιτυχία ή false για αποτυχία. Για τα ερωτήµατα SELECT αυτό δεν είναι αρκετό. Και αυτό γιατί εκτός από την ένδειξη αν το ερώτηµα πέτυχε ή απέτυχε, η PHP πρέπει επίσης να λάβει υπόψη και τα αποτελέσµατα του ερωτήµατος. Έτσι, όταν επεξεργαζόµαστε ένα ερώτηµα SELECT, η συνάρτηση mysql_query() επιστρέφει έναν αριθµό που δείχνει ένα σύνολο αποτελεσµάτων (result set), που περιέχει µια λίστα όλων των γραµµών (rows) ή καταχωρήσεων (entries) που επιστρέφονται από το ερώτηµα. $result = mysql_query("select JokeText FROM Jokes"); if (!$result) { echo("<p> Λάθος στην εκτέλεση του ερωτήµατος (query) : ". mysql_error(). "</P>"); exit(); } Αν δεν συµβεί κάποιο λάθος στην επεξεργασία του ερωτήµατος, ο παραπάνω κώδικας θα τοποθετήσει στη µεταβλητή $result ένα σύνολο αποτελεσµάτων (result set) που θα περιέχει το κείµενο όλων των jokes που είναι αποθηκευµένα στον πίνακα Jokes. Για να επεξεργαστούµε τις γραµµές (rows) του συνόλου αυτού µία κάθε φορά, µπορούµε να χρησιµοποιήσουµε τον βρόχο while, ως εξής : while ( $row = mysql_fetch_array($result) ) { // επεξεργασία της γραµµής (row) } Θα µελετήσουµε την παρακάτω εντολή που περιέχει η συνθήκη : $row = mysql_fetch_array($result); Η συνάρτηση mysql_fetch_array() δέχεται ένα σύνολο αποτελεσµάτων (result set) σαν παράµετρο, που είναι αποθηκευµένο στη µεταβλητή $result στη συγκεκριµένη περίπτωση, και επιστρέφει την επόµενη γραµµή του result set σαν έναν πίνακα (array). Όταν δεν υπάρχουν άλλες γραµµές στο result set, η συνάρτηση mysql_fetch_array() επιστρέφει την τιµή false. Η παραπάνω εντολή εκχωρεί µια τιµή στη µεταβλητή $row, αλλά ταυτόχρονα η ίδια η εντολή αποκτά την ίδια τιµή. Αυτός είναι ο λόγος που 109

110 µπορούµε να χρησιµοποιήσουµε την εντολή για τη συνθήκη του βρόχου while. Εφόσον οι βρόχοι while συνεχίζουν να εκτελούνται µέχρις ότου η συνθήκη τους γίνει ίση µε false, ο βρόχος θα επαναληφθεί για όσο υπάρχουν γραµµές στο result set, µε τη µεταβλητή $row να αποκτά κάθε φορά την τιµή της επόµενης γραµµής. Αυτό που έµεινε είναι να δούµε πώς µπορούµε κάθε φορά να παίρνουµε τις τιµές της µεταβλητής $row. Οι γραµµές ενός result set παριστάνονται σαν πίνακες (arrays), οι θέσεις του οποίου ονοµάζονται σύµφωνα µε τις στήλες του πίνακα του result set. Έτσι, αν το $row είναι µια γραµµή στο result set, τότε το $row["joke- Text"] είναι η τιµή της στήλης JokeText αυτής της γραµµής. Η PHP στην PhytoKaryon Η PHP είναι το βασικό εργαλείο που χρησιµοποιήθηκε προκειµένου να δηµιουργηθούν οι δυναµικές HTML σελίδες. Ο κώδικας της HTML αποστέλλεται στον πελάτη, όπως ακριβώς περιγράφεται παραπάνω και κάθε φορά είναι διαφορετικός ανάλογα µε τις επιλογές του χρήστη. Επίσης η PHP επιτελεί και τον συνδετικό κρίκο ανάµεσα στην βάση MySQL και τις επιλογές του χρήστη. Παρακάτω θα παρουσιασθούν κοµµάτια του κώδικα PHP όπως είναι στην εφαρµογή µαζί µε κάποιες εξηγήσεις για την λειτουργία τους και τον σκοπό που επιτελούν Βασικές Λειτουργικές έννοιες Στην εφαρµογή PhytoKaryon χρησιµοποίηθηκαν κάποιες βασικές λειτουργικές έννοιες που παρέχει η PHP και οι οποίες πρέπει να εξηγηθούν πριν γίνει η αναλυτική περιγραφή του κώδικα SESSION Η Session στην PHP παρέχει την δυνατότητα να προσεγγίζονται κύρια δεδοµένα της εφαρµογής από διαφορετικές σελίδες της εφαρµογής. Κάθε χρήστης που συνδέεται στην εφαρµογή παίρνει ένα µοναδικό id, το οποίο καλείται session id. Αυτό αναγράφεται στο URL κάθε σελίδας έτσι ώστε να αναγνωρίζεται ότι ο χρήστης έχει συνδεθεί. Το Session δηµιουργείται κάθε φορά που γίνεται login στην εφαρµογή και δηµιουργείται το µοναδικό 110

111 session id, όταν ο χρήστης αποσυνδεθεί τότε το συγκεκριµένο session παύει να υφίσταται µαζί µε όλα τα δεδοµένα που τυχόν έχουν φορτωθεί σε αυτό. Την επόµενη φορά που θα εισαχθεί στην εφαρµογή ο χρήστης θα πάρει ένα άλλο µοναδικό session id και όλα τα δεδοµένα του θα εισαχθούν από την αρχή. Στην πραγµατικότητα το session δεν είναι τίποτα παραπάνω από έναν πίνακα που δηµιουργεί η PHP στον Server για κάθε χρήστη που είναι την συγκεκριµένη στιγµή συνδεδεµένοι. Ο πίνακας αυτός µπορεί να πάρει συγκεκριµένα indexes και σε κάθε ένα από αυτά να αποθηκεύονται συγκεκριµένες πληροφορίες. Για παράδειγµα όταν ένας χρήστης συνδέεται σαν διαχειριστής της εφαρµογής τότε το Session[ admin ] παίρνει την τιµή 1, δηλαδή στον πίνακας για τον συγκεκριµένο χρήστη στο κελί µε το όνοµα admin καταχωρείται η τιµή 1. Το πλεονέκτηµα που µας παρέχει αυτή η δυνατότητα είναι ότι ο πίνακας αυτός µπορεί να ειδωθεί από όλες τις ιστοσελίδες της εφαρµογής, αρκεί ο χρήστης να έχει κάνει login, και τα δεδοµένα του ανήκουν µόνο στον συγκεκριµένο χρήστη. Όταν κάθε σελίδα που απαιτεί να έχει γίνει σύνδεση από τον χρήστη ανοίγει ελέγχει εάν υπάρχει στο URL το session id και στην συνέχεια επιτρέπει την πρόσβαση εφόσον αυτό είναι έγκυρο GET Η GET είναι µια από τις µεθόδους που παρέχει η PHP προκειµένου να µεταφέρονται δεδοµένα από την µια σελίδα της εφαρµογής στην άλλη. Με την µέθοδο αυτή ο προγραµµατιστής µπορεί να στέλνει δεδοµένα µέσω του URL στην επόµενη σελίδα που θα ανοιχτεί. Ο προγραµµατιστής της εφαρµογής µπορεί να συνδέσει τα links µιας σελίδας µε ένα URL που θα περιέχει και δεδοµένα για την επόµενη σελίδα. Για παράδειγµα το URL που παραπέµπει ο υπερσύνδεσµος Β στην σελίδα επιλογής του γράµµατος από το οποίο θα αρχίζει το όνοµα του είδους που θα παρουσιασθεί είναι το εξής: 4d9bdbd5fe9b835f4bdb3a&alph=B 111

112 Στο URL αυτό βλέπουµε εκτός από το όνοµα της σελίδας που θα ανοίξει, το οποίο είναι species_index.php και κάποιες άλλες τιµές που ακολουθούν. Αµέσως µετά το όνοµα ακολουθεί ο διαχωριστικός χαρακτήρας?, τον οποίο όταν η PHP αναγνωρίσει τότε καταλαβαίνει ότι ακολουθεί και το όνοµα κάποιας µεταβλητής µε την τιµή της. Στην συγκεκριµένη περίπτωση η µεταβλητή είναι η sid η οποία µαταφέρει τον µοναδικό κωδικό session κάθε χρήστη. Αµέσως µετα από την τιµή της ακολουθεί ο διαχωριστικός χαρακτήρας &, µετά τον οποίο θα πρέπει να ακολουθεί και δεύτερη µεταβλητή µε την τιµή της, πυ στην συγκεκριµένη περίπτωση είναι η alph και έχει την τιµή Β, που αντιπροσωπεύει το γράµµα το οποίο επέλεξε ο χρήστης. Αντίστοιχα η σελίδα species_index.php αναγνωρίζει την προεγκατεστηµένη $_GET[ alph ] και έτσι καταλαβαίνει πιο γράµµα έχει επιλέξει ο χρήστης από την προηγούµενη σελίδα και ανάλογα τρέχει το ερώτηµα που θα εµφανίσει τα είδη που αρχίζουν από Β. Αν δεν υπήρχε η µέθοδος αυτή η εφαρµογή θα ήταν χαοτική, αφού θα έπρεπε για παράδειγµα να δηµιουργήσουµε ξεχωριστή ιστοσελίδα για κάθε γράµµα που θα είχε την δυνατότητα να επιλέξει ο χρήστης. Με την πληθώρα των επιλογών που υπάρχουν θα έπρεπε να δηµιουργηθούν χιλιάδες ιστοσελίδες. Η µέθοδος GET χρησιµοποιείται πολύ συχνά στην συγκεκριµένη εφαρµογή αφού κρίθηκε ως µια πολύ καλή µέθοδος προκειµένου να µεταφέρονται οι επιλογές του χρήστη στην εφαρµογή POST H POST είναι η άλλη µέθοδος που παρέχει η PHP προκειµένου να περνούν δεδοµένα από την µια σελίδα µιας εφαρµογής στην άλλη. Η µέθοδος αυτή χρησιµοποιείται συνήθως όταν υπάρχουν δεδοµένα σε µια φόρµα εισαγωγής στοιχείων κι πρέπει να σταλούν σε µια άλλη σελίδα για να αποθηκευθούν στην βάση. 112

113 Στην συγκεκριµένη εφαρµογή η µέθοδος αυτή δεν χρησιµοποιήθηκε όσο η µέθοδος GET αφού δεν είναι τόσο λειτουργική στην απλή µεταφορά επιλογών του χρήστη, αλλά χρησιµοποιήθηκε κατα κόρον στις περιπτώσεις που έπρεπε να σταλούν δεδοµένα από µια φόρµα στην βάση δεδοµένων. Στην περίπτωση του login κάθε χρήστη για παράδειγµα µε το που πατιέται το κουµπί ΟΚ τότε στέλνονται τα δεδοµένα και ανοίγει η σελίδα login.php (είναι µια σελίδα που ο χρήστης δεν την βλέπει καθόλου αφού περιέχει κώδικα που απλώς εκτελείται στον server και ανάλογα µε την ακολουθία και τα στοιχεία που θα πάρει παραπέµπει σε άλλη σελίδα) που αναγνωρίζει τις µεταβλητές $_POST[ username ] και $_POST[ pass1 ] που περιέχουν τις τιµές των πεδίων µε τα συγκεκριµένα ονόµατα στην φόρµα από την οποία πατήθηκε το κουµπί ΟΚ. Αµέσως αναζητεί στην Βάση δεδοµένων το συγκεκριµένο UserName και PassWord και αν αυτά βρεθούν τότε ανοίγει την σελίδα έχοντας ξεκινήσει ένα καινούργιο Session για τον χρήστη που µόλις εισήλθε στην εφαρµογή. Στην περίπτωση που δεν βρεθούν τα στοιχεία αυτά ή τα πεδία είναι κενά τότε παραπέµπεται σε άλλη ιστοσελίδα που αναφέρει στον χρήστη ότι δεν έγινε login και τον προτρέπει να προσπαθήσει ξανά Σύνδεση µε την Βάση Η σύνδεση µε την βάση της MySQL γίνεται στην αρχή κάθε ιστοσελίδας που το απαιτεί. Γίνεται µέσω της συνάρτησης της PHP mysql_connect() στην οποία πρέπει να εισαχθούν σαν ορίσµατα το όνοµα του Server (localhost) το username (root) του server και το password (root) του. Στον παρακάτω κώδικα φαίνεται η σύνδεση που γίνεται στην αρχή των ιστοσελίδων: 113

114 Όπως βλέπουµε άν η σύνδεση δεν είναι επιτυχής τότε αναφέρεται το σφάλµα µέσω της εντολής echo και γίνεται έξοδος από την εφαρµογή Μενού Το µενού επιλογών βρίσκεται σε όλες τις σελίδες του site και παρέχει όλες τις βασικές επιλογές που µπορεί να ακολουθήσει ο χρήστης. Έχει δηµιουργηθεί ένα αρχείο menu.php το οποίο σαν κώδικας συµπεριλαµβάνεται σε όλες τις άλλες σελίδες µε την εντολή include. Το πλεονέκτηµα αυτού του τρόπου προγραµµατισµού είναι το γεγονός ότι αλλαγές που τυχόν θα έπρεπε να γίνουν στο µενού, γίνονταν αµέσως σε όλες τις σελίδες της εφαρµογής, αλλάζοντας απλώς το αρχείο menu.php. Σχήµα 7.4: Το αρχείο Menu.php Όπως φαίνεται από τα παραπάνω το µενού είναι διαφορετικό ανάλογα µε το αν ο χρήστης είναι administrator της εφαρµογής ή απλός χρήστης. Αυτό γίνεται µε τις γραµµές κώδικα: Στις οποίες ελέγχεται αν υπάρχει η καθολική µεταβλητη (παρακάτω θα εξηγηθεί η σηµασία της) $_SESSION[ admin ] και αν η τιµή της είναι

115 Επάνω Τµήµα Ιστοσελίδων Ένα ακόµη κοινό σηµείο σε όλες τις ιστοσελίδες της εφαρµογής είναι το επάνω µέρος της το οποίο όπως και το µενού έχει δηµιουργηθεί σε ένα αρχείο top.php, το οποίο συµπεριλαµβάνεται σε όλες τις σελίδες. Σχήµα 7.5: Κορυφαίο τµήµα όλων των σελίδων του Ιστότοπου Το κορυφαίο τµήµα της σελίδας εκτός από τα λογότυπα έχει και ένα πεδίο αναζήτησης στην βάση, το οποίο παραπέµπει στην σελίδα αποτελεσµάτων αναζήτησης του site. Θεωρήθηκε απαραίτητο λειτουργικά ένα τέτοιο πεδίο στο πάντα κοινό επάνω τµήµα των σελίδων έτσι ώστε ανά πάσα στιγµή ο χρήστης να έχει την δυνατότητα να επιτελέσει την αναζήτηση που επιθυµεί. Επίσης στο σηµείο αυτό θα πρέπει να γίνει µνεία στην επιλογή Sign Out (αποσύνδεση), που παραπέµπει στο αρχείο signout.php (Σχήµα 7.8.2), που αποσυνδέει τον συνδεδεµένο χρήστη από την εφαρµογή. 115

116 Σχήµα 7.6: Κώδικας Signout.php Στον παραπάνω κώδικα φαίνεται η διαδικασία που ακολουθείται προκειµένου να γίνει η αποσύνδεση του χρήστη, κατά την οποία λαµβάνεται το sssion id του και στην συνέχεια ενηµερώνεται η βάση µέσω του πεδίου Signed_In του πίνακα R_User ότι ο χρήστης αποσυνδέθηκε και στην συνέχεια εφόσον η ενηµέρωση ολοκληρωθεί καταστρέφεται το session µε το id που µόλις αναγνωρίστηκε. Αφού ολοκληρωθεί η διαδικασία τότε η εφαρµογή εµφανίζει την αρχική σελίδα µε την φόρµα εισαγωγής στοιχείων χρήστη ενεργοποιηµένη. Να σηµειωθεί ότι αποσύνδεση ενός χρήστη γίνεται επίσης όταν η σύνδεση διακοπεί από τον χρήστη, δηλαδή όταν αυτός κλείσει τον φυλλοµετρητή του ή όταν κλείσει τον υπολογιστή του. 116

117 εξιό τµήµα ιστοσελίδων Κοινό σηµείο σε όλες τις ιστοσελίδες της εφαρµογής είναι επίσης και το δεξιό τµήµα το οποίο όπως και το µενού έχει δηµιουργηθεί σε ένα αρχείο right.php, το οποίο συµπεριλαµβάνεται στις περισσότερες από τις σελίδες. Σχήµα 7.7: Κώδικας right.php Στον παραπάνω κώδικα φαίνεται ότι το συγκεκριµένο σηµείο της σελίδας εµφανίζονται τα στοιχεία όνοµα και επώνυµο του χρήστη εαν υπάρχει session δηλαδή έχει γίνει login και όταν δεν υπάρχει session εµφανίζεται η φόρµα εισαγωγής των στοιχείων του χρήστη προκειµένου να τα εισάγει και στην συνέχεια να πατήσει το κουµπί «Submit» οπότε να παραπεµφθεί στην σελίδα login.php που θα εξετάσει το αν είναι εξουσιοδοτηµένος για να εισέλθει στην εφαρµογή. Ειδική µνεία πρέπει να γίνει στην γραµµή: '<input type="hidden" name="page" value="'.$_server["php_self"].'">' στην οποία µε ένα κρυµµένο (hidden) πεδίο κειµένου γίνεται η αποστολή του URL της σελίδας από την οποία ο χρήστης προσπαθεί να κάνει login. Αυτό 117

118 δίνει την δυνατότητα στον χρήστη να εισέλθει απευθείας σε οποιαδήποτε σελίδα της εφαρµογής. Σχήµα 7.8: Κώδικας login.php Στον παραπάνω κώδικα γίνεται ο έλεγχος για την ορθότητα των στοιχείων του χρήστη, αφού µέσω της µεθόδου POST λαµβάνονται τα στοιχεία του (username, password) στην συνέχεια γίνεται έλεγχος στην βάση µε το ερώτηµα SQL $query="select *, users_data.surname, users_data.name from R_User, users_data where nickname='$user' and password='$password' and R_User.User_data_ID=users_data.user_data_ID"; προκειµένου να αναζητηθεί στον πίνακα R_User αν υπάρχει το username και password, καθώς και τα στοιχεία του χρήστη στον πίνακα users_data, στον οποίο αποθηκεύονται όλα τα απαραίτητα στοιχεία, από τα οποία όµως στο συγκεκριµένο ερώτηµα θέλουµε µόνο το όνοµα και το επώνυµο. 118

119 Στην συνέχεια εφόσον υπάρχουν τα στοιχεία του χρήστη και εφόσον το πεδίο registered του πίνακα R_User είναι 1 τότε γίνεται login την σελίδα που έχει λάβει από την φόρµα εισαγωγή των στοιχείων. Να σηµειωθεί ότι ένας χρήστης µπορεί να είναι εγγεγραµµένος στον πίνακα αλλά να µην είναι ενεργοποιηµένο το πεδίο registered οπότε να µην µπορεί να εισαχθεί στην εφαρµογή. Αυτό έγινε προκειµένου να γίνεται έλεγχος αυτών που επιθυµούν να εγγραφούν στην εφαρµογή από τον διαχειριστή της, οπότε αυτός δεν έχει παρά να ενεργοποιήσει το πεδίο registered, όπως θα δούµε παρακάτω από την φόρµα ελέγχου των χρηστών. Επίσης στην γραµµή κώδικα $_SESSION['admin']=$row['admin']; βλέπουµε ότι στην index admin του $_SESSION φορτώνεται το πεδίο admin από τον πίνακα R_User το οποίο όταν είναι 1 τότε σηµαίνει ότι ο συγκεκριµένος χρήστης είναι διαχειριστής της εφαρµογής. Στην συνέχεια καταγράφεται στον πίνακα R_User το IP του χρήστη και ενηµερώνεται το πεδίο που καταγράφει αν κάποιος είναι συνδεδεµένος και εφόσον γίνει επιτυχώς η εγγραφή τότε µεταφέρεται στην σελίδα που έχει ζητηθεί, ως εγγεγραµµένος χρήστης. Τέλος βλέπουµε ότι ο χρήστης µεταφέρεται στην ιστοσελίδα not_loged_in.php όταν δεν καταφέρει να εισέλθει στην εφαρµογή επιτυχώς Επίπεδα Χρηστών Η εφαρµογή περιέχει δύο επίπεδα χρηστών το ένα είναι το επίπεδο απλού χρήστη και το άλλο το επίπεδο διαχειριστή. Στο τελευταίο επίπεδο θα είναι µόνο πολύ λίγοι χρήστες που θα έχουν και δικαιώµατα αλλαγής της βάσης, σε αντίθεση µε τους απλούς χρήστες που µπορούν απλώς να δουν τα δεδοµένα της βάσης χωρίς να έχουν το δικαίµα παρέµβασης σε αυτά. Όπως περιγράφτηκε παραπάνω όταν γίνεται login τότε διαχωρίζεται αν το session που δηµιουργείται είναι διαχειριστή ή είναι απλού χρήστη. Το µενού που εµφανίζεται στον διαχειριστή της βάσης είναι διαφορετικό από αυτό του απλού χρήστη, έτσι ώστε αυτός να µπορεί να κάνει Users Administration ( ιαχείριση Χρηστών) και Edit Database (Επεξεργασία της βάσης). 119

120 ιαχείριση Χρηστών (Edit Database) Οι χρήστες εγγράφονται σε δύο πίνακες συνδεδεµένους µε µια σχέση ένα προς ένα. Ο πρώτος είναι ο πίνακας R_user (Σχήµα 7.8.4) στον οποίο καταγράφονται όλα τα απαραίτητα για την σύνδεση στοιχεία, όπως είναι το nickname, password καθώς και τα δικαιώµατα του χρήστη, που βρίσκονται στο πεδίο admin και registered. Επίσης στο πεδίο Signed In καταχωρείται το αν ο χρήστης είναι συνδεδεµένος ή όχι, καθώς και στο πεδίο user_ip καταχωρείται η διεύθυνση IP του χρήστη. Τέλος το πεδίο User_data_ID παραπέµπει στον πίνακα user_data, στον οποίο είναι καταχωρηµένα τα στοιχεία του κάθε χρήστη, όπως είναι το όνοµα το επώνυµο, επάγγελµα, διεύθυνση κτλ. Σχήµα 7.9: Πίνακας R_User 120

121 Σχήµα 7.10: Πίνακας user_data Ο διαχειριστής της βάσης δεδοµένων έχει το δικαίωµα να κάνει διαχείριση των χρηστών της εφαρµογής στην σελίδα users_linfo.php. Στην σελίδα αυτή γίνονται οι απαραίτητες ενέργειες προκειµένου να γίνει η σύνδεση µε την βάση παίρνονται τα στοιχεία των χρηστών και παρουσιάζονται στην οθόνη. Η σελίδα για να εµφανιστεί θα πρέπει το index admin της Session να είναι 1, αλλιώς εµφανίζει µήνυµα ότι θα πρέπει να είσαι διαχειριστής προκειµένου να δεις αυτή την σελίδα. Αξίζει να αναφερθεί ότι τα πεδία admin και registered διαβάζονται από την βάση και στην περίπτωση που είναι 0 φορτώνεται στην µεταβλητή που θα εµφανιστεί στην οθόνη το κείµενο NO, ενώ σε περίπτωση που είναι 1 το κείµενο YES. 121

122 Σχήµα 7.11: Κώδικας users_linfo.php Ο υπερσύνδεσµος παραπέµπει στην επόµενη σελίδα users_info.php και ο οποίος µεταφέρει µε την µέθοδο GET το user id του χρήστη που επιλέχθηκε. Στην σελίδα αυτή που αναφέρονται οι αναλυτικές πληροφορίες για τα στοιχεία του κάθε χρήστη ο server αναµένει να διαβάσει µε την µέθοδο 122

123 GET µια εκ των µεταβλητων usid, edit και new. Στην περίπτωση που διαβάσει την πρώτη και όχι κάποια άλλη τότε εµφανίζονται απλώς τα στοιχεία του χρήστη, ενώ στην περίπτωση που διαβάσει τις δύο πρώτες τότε εµφανίζει την σελίδα ενηµέρωσης των στοιχείων του χρήστη µε id αυτό που διαβάζεται από την usid. Τέλος αν υπάρχει η GET[ new ] τότε εµφανίζονται πεδία κειµένου για να εισαχθεί ένας καινούργιος χρήστης. Αυτό που αξίζει να αναφερθεί είναι τα ερωτήµατα που τρέχουν προκειµένου να µπορούµε να βρούµε την επόµενη εγγραφή χρήστη τα οποία βρίσκουν την εγγραφή µε το αµέσως µεγαλύτερο usid, όπως φαίνεται στο σχήµα Οι υπερσύνδεσµοι που καλούν την επόµενη εγγραφή παραπέµπουν στην ίδια ιστοσελίδα αλλά µε άλλο usid. Σχήµα 7.12: Τµήµα του Κώδικα users_info.php Τέλος ο υπερσύνδεσµος που κάνει διαγραφή ενός χρήστη καλέι την σύναρτηση της Javascript verify_del() (Σχήµα 7.8.7), η οποία επιστρέφει true µόνο όταν ο χρήστης πατήσει «ΟΚ» στο παράθυρο διαλόγου που εµφανίζεται και µόνο τότε καλείται η σελίδα do_delete.php (Σχήµα 7.8.8), η οποία διαγράφει τον χρήστη από τους πίνακες που είναι καταχωρηµένη Σχήµα 7.13: Συνάρτηση Javascript verify_del() του Κώδικα users_info.php 123

124 Σχήµα 7.14: Κώδικας do_delete.php Οικογένειες Και Γένη δειγµάτων Στην συνέχεια θα αναφερθούν κάποια βασικά σηµεία στην υλοποίηση των σελίδων των Στατιστικών για τις Οικογένειες και τα Γένη, που προσοµοιάζουν σε δοµή και σε λειτουργία. Στο αριστερό τµήµα του κεντρικού τµήµατος της σελίδας φαίνεται ένας πίνακας µε επιλογές, που ο χρήστης µπορεί να διαλέξει προκειµένου να του εµφανίσει τα στατιστικά που επιθυµεί. Κάθε υπερσύνδεσµος αυτού του πίνακα παραπέµπει στην ίδια σελίδα family_info.php, αλλά κάθε φορά δίνι διαφορετικά δεδοµένα µέσω του URL της σελίδας, και εφαρµόζοντας την µέθοδο GET της PHP έχουµε διαφορετικό περιεχόµενο κάθε φορά. Αυτή η τακτική ακολουθήθηκε κατά κόρον στην εφαρµογή αφού µε αυτόν τον τρόπο δεν χρειαζόταν να δηµιουργηθούν πολλές καινούργιες ιστοσελίδες. 124

125 Στο παρακάτω σχήµα φαίνεται για παράδειγµα ότι για να εµφανισθούν τα γένη καλείται η ιστοσελίδα family_info.php?sid='.session_id().'&fam='.$family.'&genus, όπου δίνεται το όρισµα &genus, το οποίο όταν ανιχνεύεται εµφανίζει τα γένη της οικογένειας που δίνεται στο όρισµα fam. Σχήµα 7.15: Πίνακας επιλογών στην σελίδα των Οικογενειών Εδώ πρέπει να γίνει αναφορά στον τρόπο µε τον οποίο δηµιουργούνται τα γραφήµατα πιτών που παρουσιάζουν τα στατιστικά για τον χρωµοσωµατικό αριθµό, τους συλλέκτες ή την κατανοµή των δειγµάτων ανά χώρα. Αρχικά εκτελείται το ερώτηµα στην βάση δεδοµένων που εµφανίζει πόσα δείγµατα έχουν κάθε χρωµοσωµατικό αριθµό. Το ερώτηµα αυτό είναι: $q_chromo= 'select TChromo.chromo as chromo1, Count(TChromo.txID) as c_stat from TChromo,Taxon where Taxon.Family="'.$family.'" and Taxon.id=TChromo.txID group by chromo1 order by c_stat desc'; Όπου η οικογένεια που θα εµφανισθεί δίνεται µέσω της µεταβλητής $family. Στην συνέχεια αφού επιστραφούν τα αποτελέσµατα από την βάση εµφανίζεται ο πίνακας µε τους χρωµοσωµατικούς αριθµούς και µε τον αριθµό των δειγµάτων. Αν η τιµή τους είναι κενή τότε εµφανίζεται η έκφραση Not 125

126 Specified. Στην συνέχεια για να δηµιουργηθεί το γράφηµα πίτας δηµιουργείται ένας νέος δισδιάστατος πίνακας στον οποίο φορτώνεται κάθε φορά ο χρωµοσωµατικός αριθµός και τα δείγµατα που του αντιστοιχούν, δηλ για τον 2n=16 είναι 636 δείγµατα. Στην συνέχεια αυτός ο πίνακας µε ειδική µέθοδο, φορτώνεται σε µια µεταβλητή SESSION του χρήστη, έτσι ώστε να µπορεί να ειδωθεί από µία άλλη σελίδα, που στην συγκεκριµένη περίπτωση είναι η σελίδα που δηµιουργεί την εικόνα και είναι το chromo_stat.php. Στην συνέχεια καλείται να δηµιουργηθεί η εικόνα που έχει σαν πηγή τον κώδικα chromo_stat.php και σαν ορίσµατα session_id και τον αριθµό των διαφορετικών εγγραφών που περιέχει ο πίνακας. echo'<img src="chromo_stat.php?sid='.session_id().'&rnum='.$cnt_chr.'">'; Στην συνέχεια ο κώδικας του γραφήµατος αναλαµβάνει να δηµιουργήσει το γράφηµα. Αρχικά παίρνει τα δεδοµένα του πίνακα από την µεταβλητή SESSION που είχαν φορτωθεί. Στην συνέχεια µε την βοήθεια µαθηµατικών υπολογισµών και την συνάρτηση ImageFilledArc δηµιουργείται 126

127 η πίτα και µε την βοήθεια της συνάρτησης Imagestring δηµιουργείται το υπόµνηµα στα αριστερά. Σχήµα 7.16: Κώδικας δηµιουργίας Γραφήµατος Πίτας Με ένα παρόµοιο τρόπο δηµιουργούνται και οι χάρτες για κάθε οικογένεια. Αφού εκτελεσθεί το ερώτηµα και στην συνέχεια επιστραφούν τα αποτελέσµατα, τότε γίνεται ένας µαθηµατικός υπολογισµός που υπολογίζει το pixel στο οποίο θα εµφανισθεί κάθε κουκίδα. Ο υπολογισµός αυτός εκµεταλλεύεται τα γεωγραφικά µήκη και πλάτη που επιστρέφει η βάση. Προκειµένου όµως να υπολογισθεί το ακριβές pixel που θα εµφανισθεί κάθε κουκίδα γίνεται ο παρακάτω υπολογισµός, $x_pos= (($Long- $odeslong)*( )/ ($seclong -$odeslong)) +568; $y_pos= (($Lat- $odeslat)*( )/ ($seclat- $odeslat))+132; 127

128 όπου έχουν ληφθεί τα γεωγραφικά µήκη και πλάτη δύο πόλεων του χάρτη, που γνωρίζουµε που βρίσκονται πάνω στην εικόνα και γίνεται υπολογισµός του κάθε άλλου σηµείου µέσω των δύο σταθερών αυτών σηµείων Σχήµα 7.17: Κώδικας Υπολογισµού θέσης κάθε σηµείου στον χάρτη. Στην συνέχεια και αφού υπολογισθεί το ακριβές σηµείο κάθε στίγµατος στον χάρτη φορτώνεται σε πίνακα η τιµή Χ και Υ κάθε σηµείου. Έπειτα καλείται να δηµιουργηθεί η εικόνα µέσω του κώδικα map.php, όπου επάνω σε µία εικόνα ενός έτοιµου χάρτη δηµιουργούνται τα στίγµατα κάθε σηµείου που έχει σταλεί. Όπως φαίνεται στο παρακάτω σχήµα φορτώνονται οι τιµές του πίνακα που περιέχει τα σηµεία που θα τυπωθούν και στην συνέχεια δηµιουργούνται δύο κύκλοι (εσωτερικός και εξωτερικός) µε κέντρο το σηµείο που έδωσε ο πίνακας και διαφορετικές ακτίνες. Στο τέλος η εικόνα προβάλλεται και αµέσως µετά καταστρέφεται, έτσι ώστε να µην δηµιουργείται πρόβληµα στην µνήµη του Server. 128

129 Σχήµα 7.18: Κώδικας ηµιουργίας Χάρτη Είδη ειγµάτων Στην σελίδα αυτή παρουσιάζονται αναλυτικά τα στοιχεία των δειγµάτων που είναι περασµένα στην βάση δεδοµένων. Η διαδικασία είναι παρόµοια µε όλες τις άλλες στις οποίες εµφανίζονται στοιχεία από την βάση, δηλ εκτελείται το ακόλουθο ερώτηµα: SELECT TChromo.chromo, TChromo.karyology, TChromo.SpecimenNumber, TChromo.SpecimenDate, TChromo.country, TChromo.Latitude, TChromo.Longitude, TChromo.AltitudeMin, TChromo.AltitudeMax, TChromo.Locality, TChromo.notes, Taxon.Family, Taxon.Genus, Taxon.Species, Taxon.SubSpecies, Taxon.SpeciesAuthor, Taxon.SubSpeciesAuthor, Collectors.Collector, Herbarium.Herbarium, Herbarium.HerbariumDescription, Papers.PapTitle, Papers.PapVol, Papers.PapIssue, Papers.PapPP, Papers.PapYear, Papers.DocTitle, DocTypes.DocType, Papers.AutName, GeoCodes.EMcode, GeoCodes.Unit, GeoCodes.TDWG, GeoCodes.ISO FROM TChromo, Taxon, Collectors, Herbarium, Papers, DocTypes, GeoCodes WHERE TChromo.ID = 129

130 "'.$tcid.'"and TChromo.txID = Taxon.ID AND TChromo.ColID = Collectors.ColID AND TChromo.GeoCodeID = GeoCodes.GeoCodeID AND Papers.papID = TChromo.papID AND DocTypes.doc_initial = Papers.DocType AND TChromo.HerbariumID = Herbarium.HerbariumID Στην συνέχεια λαµβάνονται τα αποτελέσµατα και παρουσιάζονται στη σελίδα. Στην σελίδα αυτή το περιεχόµενο αλλάζει όταν έχει πατηθεί η επιλογή [Edit] (λειτουργεί µόνο όταν ο χρήστης είναι administrator) οπότε εκτελείται πάλι το ίδιο ερώτηµα αλλά τα αποτελέσµατα καταχωρούνται σε πεδία κειµένου τα οποία ο χρήστης µπορεί να επεξεργαστεί. Στην συνέχεια αφού είναι έτοιµος µπορεί να πατήσει το κουµπί «Save» και να εκτελεστεί ο κώδικας do_update.php ο οποίος θέτει τα κείµενα που θα πάρει στα κατάλληλα πεδία. Το ερώτηµα Update που εκτελεί ο κώδικας είναι το ακόλουθο. update TChromo, Taxon, Collectors, Herbarium, Papers, DocTypes, GeoCodes set TChromo.chromo= '$chromo', TChromo.karyology='$kar', TChromo.SpecimenNumber='$specnum', TChromo.SpecimenDate='$specdate', TChromo.country='$country', TChromo.Latitude='$lat', TChromo.Longitude='$long', TChromo.AltitudeMin='$altmin', TChromo.AltitudeMax='$altmax', TChromo.Locality='$locality', TChromo.notes='$notes', Taxon.Family='$family', Taxon.Genus='$genus', Taxon.Species='$spec', Taxon.SubSpecies='$sub_spec', Taxon.SpeciesAuthor='$spec_auth', Taxon.SubSpeciesAuthor='$ssp_auth', Collectors.Collector='$col', Herbarium.Herbarium='$herb', Herbarium.HerbariumDescription='$herbDesc', Papers.PapTitle='$paptitle', Papers.PapVol='$papvol', Papers.PapIssue='$papIssue', Papers.PapPP='$papPP', Papers.PapYear='$papy', Papers.DocTitle='$doctitle', DocTypes.DocType='$doctype', Papers.AutName='$autname', GeoCodes.EMcode='$emcode', GeoCodes.Unit='$unit', GeoCodes.TDWG='$TDWG', GeoCodes.ISO='$iso' where TChromo.ID = '$tcid'and TChromo.txID = Taxon.ID AND TChromo.ColID = Collectors.ColID AND TChromo.GeoCodeID = GeoCodes.GeoCodeID AND Papers.papID = TChromo.papID AND DocTypes.doc_initial = Papers.DocType AND TChromo.HerbariumID = Herbarium.HerbariumID"; 130

131 Σχήµα 7.19: Κώδικας Συλλογής τιµών µε µέθοδο POST Εισαγωγή νέας εγγραφής Προκειµένου να εισαχθεί µια νέα εγγραφή γίνεται µια διαδικασία που ακολουθεί 6 βήµατα. Κάθε φορά που τελειώνει ένα βήµα τα δεδοµένα στέλνονται και αποθηκεύονται σε µεταβλητές SESSION έτσι ώστε στο τελικό βήµα που θα εκτελεστεί ο κώδικας do_insert_db.php να µπορεί να έχει πρόσβαση στις τιµές αυτές. Στον τελευταίο κώδικα γίνεται η εισαγωγή των νέων εγγραφών σε κάθε πίνακα αφού πρώτα ελεγχθεί αν υπάρχει η εγγραφή. Στον µόνο πίνακα που γίνεται απευθείας εγγραφή καινούργιας χωρίς έλεγχο είναι ο TChromo, δηλαδή ο πίνακας που συνδέει όλους τους άλλους πίνακες. select * from Papers where PapId='$pap_id'"; 131

132 insert INTO Papers(PapTitle, PapVol, PapIssue, PapPP, PapYear, DocTitle, DocType, AutName) Values('$paptitle', '$papvol', '$papissue', '$pappp', '$papy', '$doctitle', '$doctype', '$autname')"; Στα παραπάνω ερωτήµατα που γίνεται εισαγωγή στον πίνακα Papers φαίνεται ότι πρώτα γίνεται έλεγχος αν υπάρχει η εγγραφή και αν δεν υπάρχει τότε γίνεται νέα µε το ερώτηµα insert. Παρακάτω φαίνεται το ερώτηµα εγγραφής στο βασικό πίνακα TChromo: insert INTO TChromo(txID, chromo, karyology, ColID, SpecimenNumber, SpecimenDate, HerbariumID, country, GeoCodeID, Latitude, Longitude, AltitudeMin, AltitudeMax, Locality, papid, notes) Values('$taxon_id', '$chromo', '$kar', '$col_id', '$specnum', '$specdate', '$herb_id', '$country', '$geo_id', '$lat', '$long', '$altmin', '$altmax', '$locality', '$pap_id', '$notes') 7.8. Σύνοψη Παραπάνω αναφέρθηκαν κάποια βασικά σηµεία για την υλοποίηση της εφαρµογής. Τα σηµεία αυτά είναι ένα µικρό µέρος του κώδικα που έχει εγγραφεί και επισηµάνθηκαν επειδή κρίθηκε ότι είναι τα πιο αντιπροσωπευτικά της εφαρµογής. Οι δυσκολίες που αντιµετωπίστηκαν ήταν πολλές και επιλύθηκαν ύστερα από µελέτη και πολλές φορές επανασχεδιασµό της εφαρµογής. Εξάλλου αυτή είναι και η πρωτοτυπία της δηµιουργίας ενός λογισµικού, αφού κατά την διάρκεια της κατασκευής µπορεί να αλλάξουν πολλές φορές οι προδιαγραφές και ο σχεδιασµός της εφαρµογής, ανάλογα µε τις απαιτήσεις και τις δυσκολίες. Ο Κώδικας εγγραφόταν σε εφαρµογές επεξεργασίας απλού κειµένου και στην συνέχεια αφού αποθηκευόταν στον κατάλληλο φάκελο τότε εκτελούνταν και παρακολουθούνταν τα αποτελέσµατα µέσω του Φυλλοµετρητή του υπολογιστή. Η αποσφαλµάτωση του κώδικα ήταν συνεχής και η εφαρµογή εκτελούνταν από διαφόρους φυλλοµετρητές (Internet Explorer, Mozilla FireFox, Safari) έτσι ώστε να φανούν ελλείψεις και λάθη που µπορεί σε κάποιον άλλο φυλλοµετρητή να µην φαινόταν. 132

133 8. ΑΞΙΟΠΟΙΗΣΗ ΤΗΣ ΒΑΣΗΣ Ε ΟΜΕΝΩΝ PHYTOKARYON Η βοήθεια των εργαλείων προγραµµατισµού, µετατροπής και διαχείρισης βάσεων δεδοµένων, οδήγησε στη δηµιουργία µιας ιστοσελίδας µέσω της οποίας παρατίθονται όλα εκείνα τα αποτελέσµατα που χρειάζεται κάποιος για να κατανοήσει τη σηµασία της Βάσης εδοµένων PhytoKaryon. Στο κεφάλαιο αυτό θα παρατεθούν όλες εκείνες οι εικόνες της ιστοσελίδας, οι οποίες κρίνεται αναγκαίο οτι θα πρέπει να δειχτούν στους µελλοντικούς χρήστες τόσο για την καλύτερη κατανόηση της, όσο και για να διαχειριστούν µε το πιο βέλτιστο τρόπο τα στατιστικά αποτελέσµατα που µπορούν να παραχθούν. Έχει καταβληθεί µια πρόσθετη προσπάθεια ώστε να συµπεριληθούν όλες οι καταγραµµένες συντεταγµένες της τοποθεσίας συλλογής, έτσι ώστε οι χάρτες, οι οποιοι παρουσιάζουν τη διανοµή των ταξινοµηµένων καρυολογικών εγγραφών, να µπορούν να παραχθούν. Εντούτοις, µόνο περίπου το 20% των εγγραφών αναφέρουν τις συντεταγµένες, το οποίο έχει δυσµενείς επιπτώσεις στη χρησιµότητα τέτοιων χαρτών, δεδοµένου ότι είναι πολύ ελλιπείς. Για την δηµιουργία της Βάσης εδοµένων PhytoKaryon χρησιµοποιήθηκαν ποικίλες δηµοσιευµένες πηγές στοιχείων, όπως οι όµοιοαναθεωρηµένες δηµοσιεύσεις, πρόσθετες στήλες περιοδικών που εκθέτουν τα karyological στοιχεία ( για παράδειγµα, Mediterranean Chromosome Number Reports in Flora Mediterranea ), και έρευνες αρίθµησης χρωµοσωµάτων (για παράδειγµα, Goldblatt 1981). Κατά συνέπεια, η PhytoKaryon είναι αυτή την περίοδο βασισµένη σε βιβλιογραφικές αναφορές και περιέχει περίπου αρχεία που αντιστοιχούν περίπου σε taxa φυτών της ευρω- µεσογειακής περιοχής Αρχική Σελίδα Ιστοσελίδας Για να περιηγηθεί κάποιος µέσα σε µια ιστοσελίδα, όπως έχει ήδη λεχθεί, χρησιµοποιεί έναν browser (φυλλοµετρητής, π.χ. Internet Explorer, Mozilla Firefox, κ.α). Αυτό το εργαλείο είναι αναγκαίο για να συνδεθεί κάποιος στο ιαδίκτυο και αποτελεί την πλατφόρµα εκείνη, πάνω στην οποία εκθέτονται τα αποτελέσµατα ενός προγράµµατος PHP MySQL HTML. Έχοντας κατα νού το πρόγραµµα index.php, το οποίο έχει αναφερθεί στο προηγούµενο κεφάλαιο, και χρησιµοποιώντας τον Mozilla Firefox, στο 133

134 παρακάτω σχήµα 8.1 φαίνεται η αρχική σελίδα της ιστότοπου για την Βάση εδοµένων PhytoKaryon. Σχήµα 8.1: Αρχική σελίδα του ιστότοπου Όπως φαίνεται στην αρχική σελίδα, υπάρχει η διεύθυνση URL του ιστότοπου µε κατάληξη /index.php, πράγµα το οποίο δείχνει οτι για να προγραµµατιστεί και να προβληθεί η συγκεριµένη εικόνα της ιστοσελίδας, χρησιµοποιήθηκε o κώδικας index.php. Ταυτόχρονα, στα αριστερά της ιστοσελίδας φαίνεται το Μενού Επιλογών µε όλες τις ενέργειες που µπορεί να κάνει ένας χρήστης, µε την προϋπόθεση οτι έχει ένα όνοµα χρήστη (username) και ένα κωδικό (password) για να συνδεθεί (sign in) µε το κεντρικό υπολογιστή (server) εγκατάστασης της βάσης PhytoKaryon και να του δώσει άδεια για να περιηγηθεί στα περιεχόµενα της βάσης. Αυτή η διαδικασία φαίνεται στα δεξιά της αρχικής σελίδας. Επίσης, βασικά στοιχεία για τη βάση δεδοµένων φαίνεται στο κέντρο της ιστοσελίδας, έτσι ώστε όταν ο χρήστης θα συνδεθεί µε την αρχική σελίδα να ενηµερώνεται για κάποιες γενικές πληροφορίες για τα στοιχεία της PhytoKaryon και το τι θα συναντήσει, όταν θα συνδεθεί µε το σύστηµα διαχείρισης της PhytoKaryon. 134

135 Τέλος, η αρχική σελίδα διαθέτει τις επιλογές απενεργοποίησης εγγραφής (Sign Out - Sign Up). Η µεν πρώτη απενεργοποιεί ένα συνδεδεµένο χρήστη ενώ η δεύτερη επιλογή οδηγεί το χρήστη στο να δηµιουργήσει ένα καινούριο λογαριασµό, δίνοντας τα προσωπικά στοιχεία του Μενού Επιλογών Μια πρώτη πληροφορία της ιστοσελίδας και της Βάσης εδοµένων, που µπορεί να πάρει ένας χρήστης, ακόµα και αν δεν είναι συνδεδεµένος σε αυτήν, είναι από την επιλογή Πληροφορίες (Information) του Βασικού Μενού Επιλογών (σχήµα 8.2), µέσα στην οποία δίνονται γενικές πληροφορίες για τη Βάση εδοµένων PhytoKaryon. Επίσης υπάρχει η επιλογή Σύνδεσµοι (Links, σχήµα 8.3), οι οποίοι αναφέρονται σε άλλες ιστοσελίδες, παρεµφερών µε την ιστοσελίδα της Βάσης PhytoKaryon και αναφέρονται σε οργανισµούς, βιβλιοθήκες και δηµοσιεύσεις. Σχήµα 8.3: Η ιστοσελίδα µε όλα τα Link Τέλος, υπάρχει και η επιλογή Επικοινωνία (Contact, σχήµα 8.4), η οποία αναφέρεται στα ονόµατα των υπεύθυνων για τη βάση και τον ιστότοπο µαζί µε κάποιες προσωπικές πληροφορίες. 135

136 Σχήµα 8.4: Η επιλογή Contact Σχήµα 8.46: Η Σελίδα γενικών Πληροφοριών 8.3. ιαδικασίες Εγγραφής και Αποσύνδεσης χρήστη Μια άλλη λειτουργία της αρχικής ιστοσελίδας, όπως επισηµάνθηκε στα παραπάνω κεφάλαια είναι και η απενεργοποίηση εγγραφή ενός χρήστη. Για 136

137 να συνδεθεί ένας χρήστης στο σύστηµα διαχείρισης της Βάσης εδοµένων PhytoKaryon, προϋποθέτει να έχει ένα όνοµα χρήστη και ένα κωδικό. Έστω λοιπόν οτι υπάρχει ένας καινούριος χρήστης, ο οποίος θέλει να εγγραφεί για να µπορεί να έχει πρόσβαση στον ιστότοπο και στα περιεχόµενα της Βάσης PhytoKaryon. Για να πάρει άδεια χρήσης της ιστοσελίδας, πρέπει να πατήσει την επιλογή της αρχικής σελίδας Εγγραφή (Sign Up). Η σελίδα η οποία εµφανίζεται φαίνεται στο σχήµα 8.5. Σχήµα 8.5: Σελίδα εγγραφής νέου χρήστη Σύµφωνα µε το παραπάνω σχήµα, το οποίο πρόερχεται από το αρχείο προγραµµατισµού signup.php, υπάρχει η φόρµα εισαγωγής των προσωπικών στοιχείων του νέου χρήστη, στην οποία καλείται να συµπληρώσει στοιχεία όπως όνοµα (ΝΑΜΕ), επίθετο (SURNAME), επάγγελµα (PROFESSION), πανεπιστήµιο (UNIVERSITY), τµήµα (DEPARTMENT), ινστιτούτο- οργανισµό στο οποίο τυχόν να ανήκει (INSTITUTE- ORGANIZATION), διεύθυνση-πόληχώρα ΤΚ (STREET, CITY, COUNTRY, POSTAL/ ZIP CODE) και βέβαια τηλέφωνο φάξ (TELEPHONE, FAX) ή ακόµα και κάποιο σχόλιο το οποίο θέλει να κάνει (COMMENTS). Σηµαντικό στοιχείο αποτελεί το γεγονός οτι τα πεδία µε το χαρακτηριστικό *, είναι υποχρεωτικά να συµπληρωθούν από τον εκάστοτε νέο χρήστη. 137

138 Παράλληλα, για να έχει πρόσβαση στην ιστοσελίδα πρέπει να δώσει ένα όνοµα χρήστη (USERNAME) και ένα κωδικό πρόσβασης (PASSWORD), όπως και την επιβεβαίωση του κωδικού του (CONFIRM PASSWORD) και µια διεύθυνση ηλεκτρονικού ταχυδροµείου ( ). Όταν όλα τα στοιχεία του νέου χρήστη συµπληρωθούν στα σωστά πεδία, επιλέγουµε υποβολή (Submit) και εµφανίζεται το µήνυµα του σχήµατος 8.6, το οποίο ενηµερώνει το νέο χρήστη οτι το αίτηµα του για εγγραφή έχει καταχωρηθεί και θα του σταλεί ένα µήνυµα ( ) για την επιβεβαίωση καταχώρησης. Σχήµα 8.6: Μήνυµα επιτυχούς εγγραφής στοιχείων του νέου χρήστη Η αίτηση καταχώρησης του νέου χρήστη παραλαµβάνεται από τον διαχειριστή (administrator) του ιστότοπου και του συστήµατος διαχείρισης της Βάσης εδοµένων, ο οποίος έχει περισσότερα δικαιώµατα στην ιστοσελίδα από τον απλό χρήστη και δίνει δικαιώµα πρόσβασης, περιήγησης της ιστοσελίδας στο χρήστη.(σχήµα 8.7) 138

139 Σχήµα 8.12: Αποσύνδεση χρήστη 8.4. Περιήγηση ενός χρήστη στην ιστοσελίδα της PhytoKaryon Ο ιστότοπος, πάνω στον οποίο στηρίζεται η Βάση εδοµένων PhytoKaryon για να προβληθεί, αναφέρεται σε δυο είδη χρηστών. Στους απλούς χρήστες, οι οποίοι µπορούν να περιηγηθούν µέσα στην ιστοσελίδα και να πάρουν πληροφορίες, στατιστικά γύρω από τα στοιχεία της βάσης και στον διαχειριστή της ιστοσελίδας, ο οποίος εκτός από τα δικαιώµατα του απλού χρήστη έχει και δικαιώµατα ασφάλειας και ενηµέρωσης της βάσης µέσω της ιστοσελίδας Ο απλός χρήστης Με τον όρο απλό χρήστη, εννοούµε όλους εκείνους τους χρήστες οι οποίοι θέλουν να εξερευνήσουν τη βάση δεδοµένων και να ενηµερωθούν για τα στατιστικά αποτελέσµατα όσον αφορά στοιχεία όπως τις οικογένειες, τα γένη, τα είδη που περιγράφονται από τη βάση Περίηγηση του απλού χρήστη στη βάση (Database) Για να εξερευνήσει ένας απλός χρήστης τη βάση δεδοµένων, βασική προϋπόθεση αποτελεί να έχει πρόσβαση στην βάση, όπως λέχθηκε παραπάνω, διότι στην αντίθετη περίπτωση εάν επιλεχθεί η επιλογή Database από το Μενού Επιλογών, η ιστοσελίδα θα του αρνηθεί την πρόσβαση σε αυτήν. (Σχήµα 8.13) 139

140 Σχήµα 8.13: Μήνυµα ιστοσελίδας σε χρήστη που δεν έχει πρόσβαση Έχοντας, λοιπόν αναφερθεί παραπάνω για το πως αποκτά ένας απλός χρήστης πρόσβαση στην ιστοσελίδα, προχωράµε στην επιλογή Database και στην ιστοσελίδα του σχήµατος 8.14, στην οποία φαίνονται οι επιλογές που έχει ο χρήστης. Σχήµα 8.14: Μενού περιήγησης του απλού χρήστη Επιλογή Family Index Η επιλογή Family Index αναφέρεται σε όλες τις οικογένειες (Families) των είδων τα οποία έχουν καταγραφεί µέσα στην βάση και όταν επιλεχθεί από τον χρήστη, ενεργοποιείται το αρχείο της PHP, family_index.php το οποίο 140

141 δίνει το σχήµα Στην εικόνα αυτή, φαίνονται όλες οι οικογένειες των ειδών ταξινοµηµένες αλφαβητικά και ανάλογα µε το ποία οικογένεια θα επιλέξει ο χρήστης οδηγείται σε µια άλλη σελίδα στην οποία φαίνονται όλα εκείνα τα χαρακτηριστικά τα οποία έχουν συλλεχθεί και καταγραφεί στη Βάση εδοµένων για τη συγκεκριµένη οικογένεια. Σαν παράδειγµα περιγράφεται η οικογένεια Liliaceae (Σχήµα 8.16). Αξιοσηµείωτο στη φάση αυτή, είναι το γεγονός οτι κάθε φορά που ο χρήστης έχει µια επιλογή, εµφανίζεται πάνω αριστερά στην ιστοσελίδα η διαδροµή (path) την οποία έχει ακολουθήσει για να πάρει τα αντίστοιχα αποτελέσµατα και απλά µπορεί να γυρίσει πίσω επιλέγοντας ένα από τα στοιχεία της διαδροµής. Αυτή η διαδροµή έχει δηµιουργηθεί για όλες τις ιστοσελίδες της επιλογής Database. Σχήµα 8.15: Ιστοσελίδα της επιλογής Family 141

142 Σχήµα 8.16: Επιλογή της family Liliaceae Όπως φαίνεται και από το παραπάνω σχήµα, η επιλογή της οικογένειας Liliaceae µας οδηγεί σε µια άλλη ιστοσελίδα στην οποία φαίνεται ένα µενού από επιλογές όσον αφορά τους χρωµοσώµατικούς αριθµούς (Chromosomes) και των δειγµάτων τους που έχουν καταγραφεί στη Βάση εδοµένων PhytoKaryon, τους τύπους των καρυοτύπων (Karyology) και των αριθµό των δειγµάτων τους, τα γένη (Genera) της οικογένειας, τα είδη (Species) της οικογένειας και τα υποείδη (Subspecies) της. Ταυτόχρονα, σηµαντικές πληροφορίες για την οικογένεια αποτελούν τα ερµπάρια (Herbaria) στα οποία είναι αποθηκευµένη η οικογένεια Liliaceae, οι χάρτες και τα γεωµετρικά δεδοµένα (Map and Geographic Data) στα οποία απαντάται η συγκεκριµένη οικογένεια, τα σχετικά έγγραφα (Papers) τα οποία έχουν αναφερθεί στην οικογένεια, τα ονόµατα των συλλεκτών (Collectors) που έχουν βρεί την οικογένεια και τέλος τα γεωγραφικά στατιστικά (Geographic Statistics) τα οποία µας δίνουν στατιστικά στοιχεία όσον αφορά την τοποθεσία εύρεσης του κάθε δείγµατος της οικογένειας. Αν λοιπόν ο χρήστης επιλέξει το Chromosomes, θα εµφανιστεί η σελίδα τους σχήµατος 8.17, στην οποία φαίνεται η λίστα µε τους χρωµοσωµατικούς αριθµούς και δίπλα οι αριθµοί των δειγµάτων τους ταξινοµηµένοι κατά φθίνουσα σειρά για την οικογένεια Liliaceae, ενώ 142

143 ταυτόχρονα φαίνεται και ένα στατιστικό αποτέλεσµα για τα 10 πρώτα δείγµατα µε τους περισσότερους αριθµούς δειγµάτων χρωµοσωµατικών αριθµών. Σχήµα 8.17: Η επιλογή Chromosomes για τη family Liliaceae Στην περίπτωση που ο χρήστης επιλέξει το Karyology, θα εµφανιστεί η σελίδα τους σχήµατος 8.18, στην οποία φαίνεται η λίστα µε τους τύπους των καρυ&om