ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ Συστήματα Διαχείρισης Βάσεων Δεδομένων Νικόλαος Ζ. Ζάχαρης
Τι είναι μια Βάση Δεδομένων Είναι μία συλλογή από συσχετιζόμενα δεδομένα τα οποία είναι οργανωμένα με τέτοιο τρόπο ώστε να είναι εύκολη η αναζήτηση και ανάκτηση της πληροφορίας. Μία βάση δεδομένων μπορεί να είναι σε πολλές μορφές, όπως : φυσικά αντικείμενα, για παράδειγμα, μια συλλογή από μηχανολογικά εξαρτήματα/ανταλλακτικά οργανωμένα ανά συσκευή που θα χρησιμοποιηθούν ή μέγεθος ή διάμετρο κ.λπ. έντυπη, για παράδειγμα ένας τηλεφωνικός κατάλογος που συσχετίζει ονόματα και τηλέφωνα και είναι οργανωμένος αλφαβητικά ώστε να είναι εύκολη η αναζήτηση των ονομάτων. ηλεκτρονική μορφή, όπως είναι όλες οι σύγχρονες βάσεις δεδομένων που υλοποιούνται σε υπολογιστή και ελέγχονται από λογισμικό που ονομάζεται Σύστημα Διαχείρισης Βάσεων Δεδομένων (DataBase Management System - DBMS)
Τι είναι ένα DBMS Είναι ένα λογισμικό με το οποίο δημιουργούμε και να ελέγχουμε μια ή περισσότερες βάσεις δεδομένων, και στη κάθε μια από αυτές μπορούμε : να τη διαχειριστούμε και να ορίσουμε τη φυσική θέση αποθήκευσης των πληροφοριών στον υπολογιστή καθώς και τις παραμέτρους της δικτυακής πρόσβασης, τη δημιουργία και την επαναφορά ενός αντιγράφου ασφαλείας, να κάνουμε μαζική εισαγωγή ή εξαγωγή των δεδομένων σε συγκεκριμένη μορφή. να εκτελέσουμε ενέργειες όπως είναι η προσθήκη, η διαγραφή, η τροποποίηση, η επιλογή πληροφοριών βάσει κριτηρίων να ελέγχουμε τη πρόσβαση δημιουργώντας χρήστες οι οποίοι είναι εξουσιοδοτημένοι να μπορούν να κάνουν συγκεκριμένες ενέργειες στα δεδομένα. να καταγράφουμε τις ενέργειες των χρηστών αλλά και τις εντολές που απευθύνονται στα δεδομένα. να καταγράφουμε την απόδοση του συστήματος
Ενδεικτικά παραδείγματα DBMS Εταιρία ΙΒΜ DB2 Microsoft SQL Server Oracle MySQL PostgreSQL Ingress Microsoft Access FilemakerPro Διεύθυνση http://www.ibm.com/analytics/us/en/technology/db2/ https://www.microsoft.com/en-us/sql-server https://www.oracle.com/database/index.html https://www.mysql.com/ https://www.postgresql.org/ http://esd.actian.com/product/ingres/ https://products.office.com/en/access http://www.filemaker.com/
Πλεονεκτήματα από τη χρήση DBMS Επιτρέπουν τη λογική και δομημένη οργάνωση και συσχέτιση των δεδομένων της εταιρίας/οργανισμού. Προσφέρουν ένα αφαιρετικό επίπεδο ανάμεσα στο εννοιολογικό επίπεδο, το οποίο ορίζει τη λογική οργάνωση των δεδομένων, και στο φυσικό επίπεδο, που καθορίζει τη φυσική οργάνωση και αποθήκευση των δεδομένων και των ευρετηρίων, σε αρχεία στο δίσκο. Έχουν αποδοτικούς μηχανισμούς για να ισορροπούν τη χρήση των δεδομένων σε πολλές εφαρμογές. Παρέχουν σύνθετους μηχανισμούς που κλειδώνουν αυτόματα τα δεδομένα και παρέχουν ταυτόχρονη πρόσβαση σε πολλούς χρήστες. Παρέχουν ένα κεντρικό σημείο πρόσβασης όπου σε αυτό αποθηκεύονται τα δεδομένα και μπορούν να έχουν ελεγχόμενη πρόσβαση, στην ανάγνωση και τροποποίηση των πληροφοριών, πολλοί χρήστες. Προσφέρουν προγραμματιστική διεπαφή με σκοπό την ανάπτυξη εφαρμογών λογισμικού που θα κάνουν πρόσβαση στα δεδομένα.
Πλεονεκτήματα από τη χρήση DBMS (συν) Έχουν μηχανισμούς για τον έλεγχο της ακεραιότητας των δεδομένων. Έχουν μηχανισμούς επαναφοράς της λειτουργίας σε περίπτωση βλάβης ή σφάλματος, με δυνατότητα επανεκκίνησης και αποκατάστασης.
Πρόσβαση στα δεδομένα Εφαρμογές Γλώσσες Προγραμματισμού Εφαρμογές Οπτικοποίησης και Ανάλυσης Βάση Δεδομένων Εξυπηρετητής Διαδικτύου Ιστοσελίδες Εργαλεία του κατασκευαστή
Πρόσβαση στα δεδομένα Εντολές/Ενέργειες Διεπαφή Χρήστη Αμορφοποίητα Δεδομένα Εντολές SQL Εμφάνιση Πληροφορίας Μορφοποιημένα Δεδομένα Συγκεντρωτικά Στοιχεία Γραφήματα Δεδομένα Βάση Δεδομένων Η διεπαφή μετατρέπει τις ενέργειες του χρήστη σε εντολές SQL (Structured Query Language) και τις αποστέλλει στη Βάση Δεδομένων και αφού παραλάβει τα δεδομένα εν συνεχεία τα μετατρέπει σε πληροφορία για το χρήστη.
Structured Query Language (SQL) H SQL είναι η μια γλώσσα που έχει σαφώς ορισμένη σύνταξη και σχεδιάστηκε για την διαχείριση των δεδομένων σε μια σχεσιακή βάση δεδομένων, με σκοπό να : Ορίσουμε τη δομή, το είδος, το μέγεθος, τις συσχετίσεις καθώς και τους κανόνες για την ακεραιότητα των δεδομένων Να κάνουμε ερωτήσεις και να πάρουμε αποτελέσματα. Να τροποποιήσουμε τα δεδομένα κάνοντας εισαγωγή, διαγραφή, αλλαγή των τιμών Να ελέγξουμε την ασφάλεια των δεδομένων, ορίζοντας τους χρήστες και τις ενέργειες που μπορούν να κάνουν πάνω στα δεδομένα. Σήμερα η SQL είναι πρότυπο (ANSI SQL 2011 και ISO/IEC 9075:2011) και είναι η πιο ευρέως χρησιμοποιούμενη γλώσσα για τις σχεσιακές βάσεις δεδομένων που αποτελούν το πυρήνα του πληροφοριακού συστήματος μιας επιχείρησης. https://en.wikipedia.org/wiki/sql
Βασικές έννοιες Πίνακας (Table) είναι μία συλλογή από δεδομένα τα οποία είναι σε μορφή στηλών και γραμμών και έχουν σχέση μεταξύ τους, για αυτό και πίνακας ορίζει τη Σχέση (Relation) Πεδίο (Field) είναι μια στήλη του πίνακα και έχει όνομα (π.χ. age), τύπο δεδομένων (π.χ. ακέραιος αριθμός), μέγεθος (από 0 έως 255) και πιθανόν άλλα χαρακτηριστικά, όπως για παράδειγμα, ο περιορισμός ότι κάθε κελί της στήλης να περιέχει διαφορετική τιμή, αν επιτρέπεται ή όχι να λάβει σαν τιμή το NULL, να λάβει μια προκαθορισμένη τιμή. Όλα τα κελία τις στήλης έχουν ακριβώς τα ίδια χαρακτηριστικά. Εγγραφή (Record) είναι μία γραμμή στον πίνακα και αποτελείται από πεδία. Πρωτεύον κλειδί (Primary key ) ονομάζεται το πεδίο που είναι μοναδικό αναγνωριστικό για την κάθε μία εγγραφή του πίνακα. Για παράδειγμα το αμκα είναι μοναδικός κωδικός για τον κάθε πολίτη ή ο αριθμός ταυτότητας ή ο σειριακός αριθμός μιας συσκευής κ.λπ. Μερικές φορές μπορεί να χρησιμοποιήσουμε μια αυτοματοποιημένη λειτουργία των Βάσεων Δεδομένων, ώστε σε κάθε εισαγωγή νέας εγγραφής να δημιουργείται ένας αυξανόμενος αριθμό (auto increment number) ώστε το πεδίο να έχει πάντα διαφορετικές τιμές. Μερικές φορές μπορεί και ο συνδυασμός των τιμών δύο ή περισσοτέρων πεδίων να αποτελεί το πρωτεύον κλειδί για το πίνακα (π.χ. αίθουσα, ημέρα, ώρα) Ένας πίνακας μπορεί να περιέχει πολλά μοναδικά πεδία αλλά μόνο ένα πρωτεύον κλειδί Ξένο κλειδί (Foreign key) είναι το πεδίο που η τιμή του είναι πρωτεύον κλειδί σε άλλο πίνακα.
Βασικές έννοιες Ευρετήριο (Index) είναι ένας εσωτερικός μηχανισμός της Βάσης Δεδομένων για την γρήγορη εύρεση εγγραφών βάση της τιμής ενός πεδίου του πίνακα. Για την δημιουργία ενός πεδίου με ένδειξη πρωτεύον κλειδί, μοναδιαία τιμή ή ξένο κλειδί είναι απαραίτητη η δημιουργία ενός ευρετηρίου. Σε ένα πίνακα μπορούμε να φτιάξουμε ένα ευρετήριο για κάθε πεδίο του, με ένα από τα παρακάτω χαρακτηριστικά : Index ένα ευρετήριο το οποίο διευκολύνει την αναζήτηση και μία τιμή μπορεί να εμφανίζεται πάρα πολλές φορές στη στήλη ενός πεδίου. Unique ένα ευρετήριο το οποίο έχει μοναδικές τιμές. Επιτρέπεται η σήμανση NULL να εμφανίζεται σαν τιμή του πεδίου σε πολλές εγγραφές. Primary ένα ευρετήριο το οποίο έχει μοναδικές τιμές και επιπλέον απαγορεύεται η ένδειξη NULL στις τιμές του πεδίου. Η δημιουργία των ευρετηρίων θα πρέπει να γίνεται με προσοχή και κατόπιν μελέτης γιατί ενώ επιταχύνουν σημαντικά την αναζήτηση από την άλλη καθυστερούν τις εργασίες της εισαγωγής, της τροποποίησης, της διαγραφής των εγγράφων. Υποστηρίζονται και δύο ειδικού τύπου ευρετήρια το FULLTEXT που χρησιμοποιείται σε αναζήτηση κειμένου που ομοιάζει στη φυσική γλώσσα π.χ. emai, κείμενα από εφημερίδες κ.λπ. και το SPATIAL που χρησιμοποιείται σε αναζήτηση χωρικής πληροφορίας.
Πως είναι αποθηκευμένα τα δεδομένα Πίνακας Citizens Πεδία Εγγραφές Στιγμιότυπα της σχέσης Citizens Πίνακας Jobs Σχέσεις με άλλους πίνακες Ξένο Κλειδί Πρωτεύον Κλειδί Πρωτεύον Κλειδί
Τα είδη των τιμών των πεδίων Στα πεδία ενός πίνακα μπορούμε να αποθηκεύσουμε πληροφορίες οι οποίες είναι σε μία από τις παρακάτω μορφές : Αριθμοί : Οι αριθμοί χωρίζονται σε δύο μεγάλες κατηγορίες τους ακέραιους και τους δεκαδικούς αριθμούς οι οποίες με τη σειρά τους χωρίζονται σε διαφορετικά εύρη τιμών ώστε να καλύψουν κάθε ανάγκη κατά την υλοποίηση μιας βάσης δεδομένων. Κείμενο: Η πληροφορία είναι σε μορφή αναγνώσιμων χαρακτήρων και μπορούμε να αποθηκεύσουμε δεδομένα όπως μια διεύθυνση, το όνομα και το επώνυμο ενός πελάτη, το κείμενο ενός sms κ.λπ. Δυαδικά Δεδομένα: Η πληροφορία είναι σε μορφή μη αναγνώσιμων χαρακτήρων και μπορούμε να αποθηκεύσουμε μια εικόνα, ένα video, ένα αρχείο τύπου pdf κ.λπ. Χρονικά δεδομένα : Η πληροφορία είναι σε ημερομηνίας ή/και ώρας και μπορούμε να αποθηκεύσουμε δεδομένα όπως την ημερομηνία και την ώρα μιας παραγγελίας. Τα τελευταία χρόνια λόγω της διάδοσης των Γεωγραφικών Πληροφοριακών Συστημάτων (GIS) αλλά και υπηρεσιών όπως το Google Map, όλο και περισσότερες Βάσεις Δεδομένων ενσωματώνουν νέους τύπους δεδομένων, όπως είναι το σημείο POINT, η γραμμή LINESTR, το πολύγωνο POLYGON κ.λπ. με σκοπό να περιγράψουν χωρικά δεδομένα και το σημαντικότερο να επιτελέσουν ερωτήματα πάνω σε αυτά, με χρήση συναρτήσεων όπως την εύρεση του εμβαδού, του μήκους, την απόσταση των σχημάτων.
Ακέραιοι και πραγματικοί αριθμοί Τύπος Bytes Ελάχιστη Τιμή Μέγιστη Τιμή TINYINT 1-128 127 SMALLINT 2-32768 32767 MEDIUMINT 3-8388608 8388607 INT 4-2147483648 2147483647 BIGINT 8-9223372036854775808 9223372036854775807 Τύπος Bytes Ελάχιστη Τιμή Μέγιστη Τιμή Float 4-3.402823466E+38 3.402823466E+38 H ακρίβεια των πράξεων είναι περίπου 7 δεκαδικά ψηφία Double 8-1.7976931348623157E+308 1.7976931348623157E+308 H ακρίβεια των πράξεων είναι περίπου 15 δεκαδικά ψηφία DECIMAL (M,D) Το μέγιστο Μ μπορεί να είναι 65 ενώ το D μέχρι 30 ψηφία https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
Χαρακτηριστικά των αριθμών UNSIGNED : Οι αριθμοί έχουν ένα εύρος τιμών, από μια αρνητική τιμή ως μια θετική τιμή και αν δηλωθεί ότι δεν έχουν πρόσημο, τότε η μικρότερη τιμή είναι το 0 και η μεγαλύτερη τιμή είναι αυξημένη κατά το εύρος των αρνητικών αριθμών. Για παράδειγμα ο TINYINT μπορεί να αποθηκεύσει τιμές από -128 έως 127 και αν δηλωθεί σαν UNSIGNED τότε μπορεί να αποθηκεύσει έναν ακέραιο αριθμό από 0..255 (δηλαδή 127 που είναι η μεγαλύτερη τιμή αυξημένη κατά 128 που είναι το εύρος των αρνητικών τιμών) UNSIGNED ZEROFILL : Οι αριθμοί χωρίς πρόσημο μπορεί επιπλέον να εμφανίζονται με τη προσθήκη 0 μπροστά από τη τιμή τους. Για παράδειγμα αν ένα πεδίο είναι τύπου ΙΝΤ και έχει τη τιμή 8, τότε αν το χαρακτηρίσουμε σαν UNSIGNED ZEROFILL η τιμή θα εμφανίζεται σαν 00000000008. Ο χαρακτηρισμός δεν έχει κανένα αντίκτυπο στις πράξεις που θα γίνονται παρά μόνο στην εμφάνιση.
Δήλωση Χαρακτήρες και κείμενο Περιγραφή CHAR (M) όπου M το πλήθος των χαρακτήρων με μέγιστη τιμή το 255. Ανεξαρτήτως του πλήθους των χαρακτήρων του πεδίου πάντα αποθηκεύονται Μ χαρακτήρες. VARCHAR (M) όπου M το πλήθος των χαρακτήρων με μέγιστη τιμή το 65535. Αποθηκεύεται μόνο το πλήθος των χαρακτήρων του πεδίου. Το Char είναι σταθερού μήκους και έχει μεγαλύτερες απαιτήσεις σε αποθηκευτικό χώρο αλλά εκτελείται πιο γρήγορα σε σχέση με το VarChar που είναι μεταβλητού μήκους. Οι τύποι δεδομένων ΤΙΝΥTEXT, ΤΕΧΤ, MEDIUMTEXT, LONGTEXT είναι μεταβλητού μήκους αλφαριθμητικά που μπορούν να αποθηκεύσουν από 255 έως 4294967295 χαρακτήρες.
Δήλωση BINARY(M) Δυαδικά δεδομένα Περιγραφή όπου M το πλήθος των bytes με μέγιστη τιμή το 255 και ανεξαρτήτως του περιεχομένου, πάντα αποθηκεύονται Μ bytes. VARBINARY (M) όπου M το πλήθος των bytes με μέγιστη τιμή το 65535. Αποθηκεύεται μόνο το πλήθος των bytes του πεδίου. Το BINARY έχει μεγαλύτερες απαιτήσεις σε αποθηκευτικό χώρο αλλά εκτελείται πιο γρήγορα σε σχέση με το VARBINARY Οι τύποι δεδομένων ΤΙΝΥBLOB, BLOB, MEDIUMBLOB, LONGBLOB είναι μεταβλητού μήκους και μπορούν να αποθηκεύσουν από 255 έως 4294967295 bytes.
Ώρα και ημερομηνίες Τύπος Μορφή DATE '0000-00-00' TIME '00:00:00' DATETIME '0000-00-00 00:00:00' TIMESTAMP '0000-00-00 00:00:00' YEAR 0000 To DATETIME και το TIMESTAMP αποθηκεύουν την ίδια πληροφορία αλλά το TIMESTAMP λαμβάνει υπόψη του τo TIMEZONE που έχουμε δηλώσει στη βάση δεδομένων και εμφανίζει αντίστοιχα τη χρονική στιγμή σε Universal Coordinate Time, δηλαδή με τη διαφορά ωρών που έχει η κάθε χώρα. Το DATETIME χρησιμοποιείται για ημερολογιακές και χρονικές στιγμές από '1000-01-01 00:00:00' έως '9999-12-31 23:59:59' τις οποίες αποθηκεύει στη μορφή 'YYYY-MM-DD HH:MM:SS'. Το TIMESTAMP αποθηκεύει την ίδια πληροφορία με εύρος από '1970-01-01 00:00:01' UTC έως '2038-01-19 03:14:07' UTC.
Τύπος Άλλοι τύποι δεδομένων Περιγραφή BIT (Μ) Επιτρέπει την αποθήκευση Μ bits από 1 μέχρι 64. BOOLEAN SERIAL ENUM SET Αναπαριστά έναν UNSIGNED ΤΙΝΥΙΝΤ όπου το 0 θεωρείται FALSE και οποιαδήποτε άλλη τιμή TRUE Αναπαριστά (alias) έναν UNSIGNED BIGINT NOT NULL UNIQUE AUTO INCREMENT Είναι ένα αλφαριθμητικό του οποίου η τιμή πρέπει να ανήκει σε ένα προκαθορισμένο σύνολο τιμών. Δηλαδή αν το σύνολο περιέχει τις τιμές ('small','medium','large') τότε κάθε πεδίο μπορεί να έχει μια τιμή από αυτές. Είναι ένα αλφαριθμητικό του οποίου η τιμή μπορεί να είναι κενή '' ή ένας συνδυασμός από ένα προκαθορισμένο σύνολο τιμών οι οποίες χωρίζονται με κόμμα. Για παράδειγμα ένα προϊόν μπορεί να διατίθεται σε τρία χρώματα τα a b και c και στο πεδίο να καταγράφουμε τις προτιμήσεις του πελάτη, οι οποίες είναι τίποτα '' ή ένα από τα 'a' 'b' ή 'c' ή ένας συνδυασμός τους 'a,b,c' ή 'a,b' ή 'a,c' ή 'b,c'. Δεν έχει σημασία η σειρά. Οι τύποι δεδομένων με ονόματα GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION επιτρέπουν την αποθήκευση χωρικών δεδομένων.