Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Σχετικά έγγραφα
Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Εργαστήριο Βάσεων Δεδομένων

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Συστήματα Διαχείρισης Βάσεων Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Lecture 12: SQL DDL I

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Εργαστήριο Βάσεων Δεδομένων

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

Βάσεις Δεδομένων Ι 6. Ιδιότητες πεδίων. Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

Εργαστήριο Βάσεων Δεδομένων. Triggers

Εργαστήριο Βάσεων Δεδομένων

Διαδικασιακός Προγραμματισμός

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

databases linux - terminal (linux / windows terminal)

Ιατρική Πληροφορική. Δρ. Π. ΑσβεστΑΣ ΤμΗμα ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

µπιτ Λύση: Κάθε οµάδα των τεσσάρων µπιτ µεταφράζεται σε ένα δεκαεξαδικό ψηφίο 1100 C 1110 E Άρα το δεκαεξαδικό ισοδύναµο είναι CE2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #2

Βάσεις Δεδομένων (Databases)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εργαστήριο 1

Ανάπτυξη και Σχεδίαση Λογισμικού

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ

Διαχείριση Πολιτισμικών Δεδομένων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Σχεσιακό Πρότυπο Δεδομένων

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Σχεδιασμός Βάσεων Δεδομένων

Βάσεις Δεδομένων (Databases)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

Σχεδίαση και Χρήση Βάσεων Δεδομένων. Χρήση της MySQL. Γιώργος Πυρουνάκης -

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

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

Φυσική Σχεδίαση Υλοποίηση βάσης

Προγραμματισμός Παγκόσμιου Ιστού

Ηλεκτρονικοί Υπολογιστές II

Εισαγωγή στον Προγραμματισμό

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

Διαδικασιακός Προγραμματισμός

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Σχεδίαση Βάσεων Δεδομένων

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Εισαγωγή στην Access 2007

Κεφάλαιο 3 Δημιουργία Πινάκων Data Definition Language (DDL)

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

1. Απαιτήσεις εργασίας

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

ΣΧΕΣΙΑΚΕΣ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

PHPMyAdmin: Σύντομος οδηγός για αρχάριους

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Σχεδίαση και Χρήση Βάσεων Δεδομένων. Χρήση του DBDesigner. Γιώργος Πυρουνάκης - forky@di.uoa.gr

Συνοπτικός Οδηγός Χρήσης του MySQL Workbench

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Δύο είναι οι κύριες αιτίες που μπορούμε να πάρουμε από τον υπολογιστή λανθασμένα αποτελέσματα εξαιτίας των σφαλμάτων στρογγυλοποίησης:

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

. Εργαστήριο Βάσεων Δεδομένων. Triggers

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 7 και 8: Αναπαραστάσεις. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Διαδικασιακός Προγραμματισμός

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

10 η Διάλεξη Python Βάσεις δεδομένων στη python

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Transcript:

Ιατρική Πληροφορική Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε. Χρήσιμοι Σύνδεσμοι Σημειώσεις μαθήματος: http://medisp.bme.teiath.gr/eclass/courses/tio103/ https://eclass.teiath.gr/courses/tio100/ E mail: pasv@teiath.gr 2 1

H δημιουργία και η διαχείριση μίας βάσης δεδομένων επιτυγχάνεται με χρήση εντολών της γλώσσας Structured Query Language (SQL) H SQL είναι μία γλώσσα υψηλού επιπέδου και περιλαμβάνει εντολές που επιτρέπουν: Τη δημιουργία πινάκων Την τροποποίηση της δομής πινάκων Την εισαγωγή δεδομένων σε πίνακες Τη διαγραφή δεδομένων από πίνακες Την ανανέωση των δεδομένων πινάκων Την επιλογή δεδομένων από πίνακες με χρήση κριτηρίων 3 Οι εντολές της SQL χρησιμοποιούνται σε εφαρμογές που κάνουν χρήση βάσεων δεδομένων Οι εφαρμογές αυτές αναπτύσσονται σε κάποια γλώσσα προγραμματισμού (π.χ. JAVA, PHP, Matlab κ.λπ.) Στον κώδικα ενσωματώνονται εντολές SQL για τη διαχείριση δεδομένων 4 2

ΑπόσπασμακώδικασεMatlabμεSQL 5 ΑπόσπασμακώδικασεJAVAμεSQL 6 3

ΑπόσπασμακώδικασεPHPμεSQL 7 Σύμφωνα με τη SQL, oι ονομασίες βάσεων δεδομένων, πινάκων και πεδίων (στηλών) ονομάζονται αναγνωριστικά (identifiers) Κάθε αναγνωριστικό μπορεί να περιλαμβάνει μέχρι 64 χαρακτήρες Επιτρεπτοί χαρακτήρες είναι: Γράμματα (a z, A Z) Ψηφία (0 9) Κάτω παύλα (_) 8 4

Ένα αναγνωριστικό μπορεί να ξεκινάει με ψηφίο, αλλά δεν μπορεί να αποτελείται αποκλειστικά από ψηφία Ένα αναγνωριστικό δεν μπορεί να περιλαμβάνει διαστήματα (spaces) Δεν μπορεί να χρησιμοποιηθεί ως αναγνωριστικό κάποια δεσμευμένη λέξη της SQL Παραδείγματα αποδεκτών αναγνωριστικών: Table1 Users_table 2ndTable 9 Για τα αναγνωριστικά πεδίων (στηλών) πινάκων δεν παίζει ρόλο εάν είναι με πεζούς ή κεφαλαίους χαρακτήρες Για τα αναγνωριστικά πινάκων και βάσεων δεδομένων: Σε υπολογιστές με λειτουργικό σύστημα Windows ή MacOs Χ (με HFS+) δεν παίζει ρόλο εάν τα αναγνωριστικά είναι με πεζούς ή κεφαλαίους χαρακτήρες (case insensitive) Σε υπολογιστές με λειτουργικό σύστημα Linux ή MacOs Χ (χωρίς HFS+) παίζει ρόλο εάν τα αναγνωριστικά είναι με πεζούς ή κεφαλαίους χαρακτήρες (case sensitive) 10 5

Η SQL υποστηρίζει διάφορους τύπους δεδομένων: Συμβολοσειρές σταθερού μήκους Συμβολοσειρές μεταβλητού μήκους Κείμενο Ακέραιοι αριθμοί με πρόσημο Ακέραιοι αριθμοί χωρίς πρόσημο Δεκαδικοί αριθμοί σταθερής υποδιαστολής Δεκαδικοί αριθμοί κινητής υποδιαστολής Ημερομηνίες 11 Συνήθεις τύποι δεδομένων Κατηγορία Τύπος Περιγραφή Συμβολοσειρά CHAR(L) VARCHAR(L) TINYTEXT ΤΕΧΤ MEDIUMTEXT LONGTEXT ENUM(val1, val2,.) Συμβολοσειρά σταθερού μήκους L χαρακτήρων (0 L 255) Συμβολοσειρά μεταβλητού μήκους με μέγιστο πλήθος χαρακτήρων L (0 L 65.535) Συμβολοσειρά μεταβλητού μήκους με μέγιστο πλήθος χαρακτήρων 255 Συμβολοσειρά μεταβλητού μήκους με μέγιστο πλήθος χαρακτήρων 65.535 Συμβολοσειρά μεταβλητού μήκους με μέγιστο πλήθος χαρακτήρων 16.777.215 Συμβολοσειρά μεταβλητού μήκους με μέγιστο πλήθος χαρακτήρων 4.294.967.295 Συμβολοσειρά με τιμή από μια λίστα επιτρεπτών τιμών. Παράδειγμα: ΕNUM( XRAY, CT, MRI, PET, SPECT ) 12 6

Παρατηρήσεις για τις συμβολοσειρές: Συνήθως, κάθε χαρακτήρας αποθηκεύεται με ένα byte Μία συμβολοσειρά με M χαρακτήρες αποθηκεύεται με Μ+1 bytes, όπου το πρόσθετο byte είναι για τον τερματικό χαρακτήρα Διαφορές CHAR(L) και VARCHAR(L): Εάν χρησιμοποιείται ο τύπος CHAR(L) για ένα πεδίο, τότε εάν η τιμή αποτελείται από λιγότερους από L χαρακτήρες, οι υπόλοιποι χαρακτήρες συμπληρώνονται με διαστήματα και πάντα θα δεσμεύονται L+1 bytes Εάν χρησιμοποιείται ο τύπος VARCHAR(L) για ένα πεδίο, τότε εάν η τιμή αποτελείται από λιγότερους από L χαρακτήρες, π.χ. N χαρακτήρες (N < L), τότε η συμβολοσειρά θα αποθηκευθεί με N+1 bytes 13 Συνήθεις τύποι δεδομένων Κατηγορία Τύπος Περιγραφή TINYΙΝΤ Ακέραιος μεταξύ 128 και 127 SMALLINT Ακέραιος μεταξύ 32.768 και 32.767 Ακέραιοι με πρόσημο MEDIUMINT Ακέραιος μεταξύ 8.388.608 και 8.388.607 INT Ακέραιος μεταξύ 2.147.483.648 και 2.147.483.647 Ακέραιοι χωρίς πρόσημο BIGINT Ακέραιος μεταξύ 9.223.372.036.854.775.808 και 9.223.372.036.854.775.807 TINYΙΝΤ UNSIGNED Ακέραιος μεταξύ 0 και 255 SMALLINT UNSIGNED Ακέραιος μεταξύ 0 και 65.535 MEDIUMINT UNSIGNED Ακέραιος μεταξύ 0 και 16.777.215 INT UNSIGNED Ακέραιος μεταξύ 0 και 4.294.967.295 BIGINT UNSIGNED Ακέραιος μεταξύ 0 και 18.446.744.073.709.551.615 14 7

Συνήθεις τύποι δεδομένων Κατηγορία Τύπος Περιγραφή Δεκαδικοί Αριθμοί DECIMAL(g,f) ή DEC(g,f) FLOAT DOUBLE Δεκαδικός σταθερής υποδιαστολής: g είναι το συνολικό πλήθος ψηφίων, f είναι το πλήθος των ψηφίων μετά την υποδιαστολή Δεκαδικός κινητής υποδιαστολής απλής ακρίβειας. Μπορούν να αποθηκευθούν αρνητικοί αριθμοί από 3,402823466 10 38 έως 1,175494351 10 38, το 0 και θετικό αριθμοί από 1,175494351 10 38 έως 3,402823466 10 38 Δεκαδικός κινητής υποδιαστολής διπλής ακρίβειας. Μπορούν να αποθηκευθούν αρνητικοί αριθμοί από 1,7976931348623154 10 308 έως 2.2250738585072014 308, το 0 και θετικό αριθμοί από 2.2250738585072014 308 έως 1,7976931348623154 10 308 15 Συνήθεις τύποι δεδομένων Κατηγορία Τύπος Περιγραφή Χρόνος DATE Ημερομηνία από 1 η Ιανουαρίου 1000 ( 1000 01 01 ) έως 31 Δεκεμβρίου 9999 ( 9999 12 31 ). Η τυπική μορφοποίηση είναι YYYY ΜΜ DD TIME Ώρα από 00:00:00 έως 23:59:59. Η τυπική μορφοποίηση είναι hh:mm::ss DATETIME Ημερομηνία και ώρα από 1000 01 01 00:00:00 έως 999 12 31 23:59:59. Η τυπική μορφοποίηση είναι YYYY MM DD hh:mm::ss TIMESTAMP Ημερομηνία και ώρα στη μορφή YYYY MM DD hh:mm::ss από 1970 01 01 00:00:00 έως 2037 12 31 23:59:59. Χρησιμοποιείται ως χρονοσφραγίδα και λαμβάνει αυτόματα τιμή, όταν γίνεται προσθήκη ή διαγραφή γραμμών σε έναν πίνακα 16 8

Η σωστή επιλογή του τύπου δεδομένων είναι πολύ σημαντική γιατί επηρεάζει: Το μέγεθος του αποθηκευτικού χώρου που θα χρησιμοποιηθεί Τηνταχύτηταμετηνοποίαγίνονταιοιδιαδικασίεςσεμίαβάση δεδομένων Την ακρίβεια με την οποία θα αποθηκευθούν τα δεδομένα 17 Διαδικασία επιλογής σωστού τύπου δεδομένων για μία στήλη (πεδίο): Καθορίζεται η κατηγορία στην οποία θα ανήκει ο τύπος δεδομένων της στήλης. Δηλαδή εάν πρόκειται για συμβολοσειρά, αριθμό ή ημερομηνία Για την επιλεγμένη κατηγορία, καθορίζεται ο τύπος που ταιριάζει περισσότερο στα δεδομένα που θα καταχωρηθούν. Για παράδειγμα, εάν είναι γνωστό εκ των προτέρων ότι σε μία στήλη θα καταχωρηθούν τιμές από 1 έως 99.999, τότε ο κατάλληλος τύπος είναι ο MEDIUMINT UNSIGNED 18 9

Διαδικασία επιλογής σωστού τύπου δεδομένων για μία στήλη (πεδίο): Εάν πρόκειται να αποθηκευθούν δεκαδικοί αριθμοί και απαιτείται μεγάλη ακρίβεια τότε ο κατάλληλος τύπος είναι DECIMAL Εάνηακρίβειαδενείναιτόσοσημαντικήήηταχύτηταέχειτην υψηλότερη προτεραιότητα, τότε ο τύπος DOUBLE επαρκεί. 19 Παράδειγμα Μία εφαρμογή που παρέχει προσωποποιημένο περιεχόμενο στους χρήστες της χρησιμοποιεί έναν πίνακα που κρατάει τις ακόλουθες πληροφορίες για τους χρήστες: Κωδικός (αύξων αριθμός με αρχή το 1) Όνομα Επώνυμο Email Όνομα χρήστη (μέγιστο πλήθος χαρακτήρων 15) Συνθηματικό (αποθηκεύεται κρυπτογραφημένο με σταθερό μήκος 40 χαρακτήρων) Ημερομηνία και ώρας εγγραφής Αν αναμένεται το πλήθος των χρηστών να μην ξεπεράσει το 1.000.000, να δοθεί ο κατάλληλος τύπος για κάθε πεδίο του πίνακα. 20 10

Λύση Ο κωδικός πρέπει να είναι ακέραιος χωρίς πρόσημο με μέγιστη τιμή 1.000.000. Συνεπώς ο κατάλληλος τύπος είναι MEDIUMINT UNSIGNED, που επιτρέπει περίπου 17 εκατομμύρια εγγραφές στον πίνακα. To όνομα θα είναι συμβολοσειρά μεταβλητού πλήθους χαρακτήρων. Θεωρώντας ένα μέγιστο πλήθος 25 χαρακτήρων, ο τύπος είναι VARCHAR(25). To επώνυμο θα είναι συμβολοσειρά μεταβλητού πλήθους χαρακτήρων. Θεωρώντας ένα μέγιστο πλήθος 40 χαρακτήρων, ο τύπος είναι VARCHAR(40). 21 Λύση To email θα είναι συμβολοσειρά μεταβλητού πλήθους χαρακτήρων. Θεωρώντας ένα μέγιστο πλήθος 60 χαρακτήρων, ο τύπος είναι VARCHAR(60). Το όνομα χρήστη θα έχει το πολύ 15 χαρακτήρες. Επομένως, ο κατάλληλος τύπος δεδομένων είναι VARCHAR(15). To συνθηματικό θα είναι συμβολοσειρά σταθερού πλήθους 40 χαρακτήρων. Συνεπώς, ο κατάλληλος τύπος δεδομένων είναι CHAR(40). H ημερομηνία εγγραφής θα είναι τύπου DATETIME. 22 11

Για λόγους ασφαλείας, ένα συνθηματικό αποθηκεύεται πάντα κρυπτογραφημένο σε μία βάση δεδομένων Οι πιο γνωστοί αλγόριθμοι κρυπτογράφησης είναι Secure Hash Algorithm 1 (SHA 1) Secure Hash Algorithm 2 (SHA 2) Κάθε ένας από τους αλγορίθμους μετατρέπει ένα συνθηματικό (ή οποιαδήποτε κείμενο) σε μια σειρά από bits, που ονομάζεται hash 23 Για παράδειγμα ο SHA 1 μετατρέπει οποιοδήποτε συνθηματικό σε 160 bits Κάθε τετράδα bits αναπαριστάται με ένα δεκαεξαδικό ψηφίο (0 9, Α F), με αποτέλεσμα να αποθηκεύεται σε μία βάση δεδομένων ως συμβολοσειρά 40 χαρακτήρων Ακόμα και αν δύο συνθηματικά διαφέρουν μόνο σε ένα χαρακτήρα, τα αντίστοιχα hash θα είναι εντελώς διαφορετικά 24 12

Παράδειγμα Συνθηματικό test1234 test123 test12 test1 test Test SHA-1 Hash 9bc34549d565d9505b287de0cd20ac77be1d3f2c 7288edd0fc3ffcbe93a0cf06e3568e28521687bc 4ff1a33e188b7b86123d6e3be2722a23514a83b4 b444ac06613fc8d63795be9ad0beaf55011936ac a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 640ab2bae07bedc4c163f679a746f7ab7fb5d1fa 25 Οι εντολές της SQL μπορούν να διακριθούν σε τρεις κύριες κατηγορίες: εντολές ορισμού δεδομένων (Data Definition Language DDL) (π.χ. CREATE TABLE) εντολές χειρισμού δεδομένων (Data Manipulation Language DML) (π.χ. UPDATE, INSERT, SELECT) εντολές ελέγχου δεδομένων (Data Control Language DCL) (π.χ. GRANT, REVOKE) Συνήθως, οι δεσμευμένες λέξεις της SQL γράφονται με κεφαλαία γράμματα Οι εντολές πρέπει να τερματίζονται με ; 26 13

Οι εντολές ορισμού δεδομένων αφορούν στη: Δημιουργία βάσης δεδομένων Διαγραφή βάσης δεδομένων και όλων των πινάκων σε αυτή Δημιουργία πίνακα Διαγραφή πίνακα Τροποποίηση της δομής ενός πίνακα 27 Εντολή δημιουργίας βάσης δεδομένων CREATE DATABASE IF NOT EXISTS mydb; Η εντολή δημιουργεί μία βάση δεδομένων με το αναγνωριστικό mydb, εφόσον δεν υπάρχει ήδη μία βάση δεδομένων με το αναγνωριστικό αυτό. Εάν υπάρχει ήδη μία βάση δεδομένων με το αναγνωριστικό αυτό, η εντολή δεν επιφέρει κάποια τροποποίηση 28 14

Οι λέξεις IF NOT EXISTS μπορούν να παραλειφθούν. Στην περίπτωση αυτή, εάν υπάρχει ήδη μία βάση δεδομένων με το συγκεκριμένο αναγνωριστικό, θα παραχθεί το μήνυμα λάθους: Error Code: 1007. Can't create database 'mydb'; database exists 29 Εντολή διαγραφής βάσης δεδομένων DROP DATABASE IF EXISTS mydb; Η εντολή διαγράφει τη βάση δεδομένων με το αναγνωριστικό mydb, εφόσον υπάρχει ήδη. Εάν δεν υπάρχει η βάση δεδομένων με το αναγνωριστικό αυτό, η εντολή δεν επιφέρει κάποια τροποποίηση 30 15

Οι λέξεις IF EXISTS μπορούν να παραλειφθούν. Στην περίπτωση αυτή, εάν δεν υπάρχει η βάση δεδομένων με το συγκεκριμένο αναγνωριστικό, θα παραχθεί το μήνυμα λάθους: Error Code: 1008. Can't drop database 'mydb'; database doesn't exist 31 Για να επιλεγεί η βάση δεδομένων με το αναγνωριστικό mydb προς χρήση, πρέπει να εκτελεστεί η εντολή: USE mydb; Εάν δεν υπάρχει η βάση δεδομένων με το αναγνωριστικό mydb, θα παραχθεί το μήνυμα λάθους: Error Code: 1049. Unknown database 'mydb' 32 16

Γενική μορφή εντολή δημιουργίας πίνακα CREATE TABLE IF NOT EXISTS mytable( column_name_1 data_type [column_attributes] [, column_name_2 data_type [column_attributes]] [, table_level_constraints] ); Η εντολή δημιουργεί έναν πίνακα με το αναγνωριστικό mytable, εφόσον δεν υπάρχει ήδη ένας πίνακας με το αναγνωριστικό αυτό. Εάν υπάρχει ήδη ένας πίνακας με το αναγνωριστικό αυτό, η εντολή δεν επιφέρει κάποια τροποποίηση 33 Οι λέξεις IF ΝΟΤ EXISTS μπορούν να παραλειφθούν. Στην περίπτωση αυτή, εάν υπάρχει ήδη ο πίνακας με το συγκεκριμένο αναγνωριστικό, θα παραχθεί το μήνυμα λάθους: Error Code: 1050. Table 'mytable' already exists 34 17

Η εντολή περιλαμβάνει τη δημιουργία μίας ή περισσότερες στήλες (πεδία) Για κάθε στήλη πρέπει να δοθεί ο τύπος δεδομένων Προαιρετικά, σε κάθε στήλη μπορούν να αποδοθούν μία ή περισσότερες ιδιότητες 35 Συνήθεις ιδιότητες μιας στήλης Ιδιότητα NOT NULL NULL UNIQUE PRIMARY KEY DEFAULT default_value AUTO_INCREMENT Περιγραφή Η στήλη πρέπει υποχρεωτικά να έχει τιμή Η στήλη δεν είναι υποχρεωτικό να έχει τιμή Η τιμή που αποθηκεύεται σε μία στήλη πρέπει να είναι μοναδική Η στήλη είναι πρωτεύον κλειδί Η στήλη έχει προκαθορισμένη τιμή Η τιμής της στήλης αυξάνεται αυτόματα όταν προστίθεται νέα γραμμή. Η ιδιότητα αυτή μπορεί να εφαρμοστεί όταν ο τύπος της στήλης είναι ακέραιος αριθμός κινητής υποδιαστολής 36 18

Παρόλο που δεν υποχρεωτικό, καλό είναι κάθε πίνακας να έχει ένα πρωτεύον κλειδί Ο πιο απλός τρόπος είναι να δημιουργηθεί μια στήλη, η οποία να παίρνει ακέραιες τιμές και αυξάνει αυτόματα κατά ένα με κάθε νέα εισαγωγή γραμμής id INT AUTO_INCREMENT PRIMARY KEY 37 Συνεπώς, ο τρόπος δημιουργίας ενός πίνακα προτείνεται να γίνεται ως εξής: # ΠΙΝΑΚΑΣ ΜΕ ΑΣΘΕΝΕΙΣ CREATE TABLE mytable( id INT AUTO_INCREMENT PRIMARY KEY, # ΠΡΩΤΕΥΟΝ ΚΛΕΙΔΙ /* ΑΚΟΛΟΥΘΟΥΝ ΤΑ ΥΠΟΛΟΙΠΑ ΠΕΔΙΑ ΕΔΩ */ ) ENGINE=INNODB DEFAULT CHARSET = UTF8; 38 19

Στο προηγούμενο παράδειγμα: ΗεπιλογήENGINE=INNODB αφορά στην εσωτερική οργάνωση και αποθήκευση των δεδομένων. Εξασφαλίζει τη δημιουργία σχεσιακών περιορισμών μεταξύ πινάκων Η επιλογή DEFAULT CHARSET=UTF8 χρησιμοποιείται για να υπάρχει η δυνατότητα εισαγωγής δεδομένων με ελληνικούς χαρακτήρες 39 Παράδειγμα Έστω ότι πρόκειται να δημιουργηθεί μια ιστοσελίδα για συζητήσεις και ανταλλαγή μηνυμάτων. Για το σκοπό αυτό πρόκειται να δημιουργηθεί ένας πίνακας χρηστών με τα ακόλουθα πεδία: Κωδικός (αύξων αριθμός με αρχή το 1) Όνομα Επώνυμο Email Όνομα χρήστη (μέγιστο πλήθος χαρακτήρων 15) Συνθηματικό (αποθηκεύεται κρυπτογραφημένο με σταθερό μήκος 40 χαρακτήρων) Ημερομηνία και ώρας εγγραφής Να γραφτεί η εντολή SQL που δημιουργεί τον πίνακα. 40 20

ΛΥΣΗ Επειδή πρόκειται για πίνακα που κρατάει χρηστών, υπάρχουν οι ακόλουθοι περιορισμοί: Όλα τα πεδία πρέπει να έχουν τιμή Tα πεδία όνομα χρήστη και email πρέπει να έχουν μοναδικές τιμές, ώστε να αποφευχθούν διπλές εγγραφές Η αναζήτηση με βάση το όνομα χρήστη και το συνθηματικό πρέπει να γίνεται αποδοτικά 41 Λύση # Εντολή δημιουργίας πίνακα χρηστών CREATE TABLE users ( userid MEDIUMINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(25) NOT NULL, lastname VARCHAR(40) NOT NULL, email VARCHAR(60) NOT NULL UNIQUE, username VARCHAR(15) NOT NULL UNIQUE, pass CHAR(40) NOT NULL, # Η λέξη password είναι δεσμευμένη λέξη της SQL registrationdate DATE NOT NULL, INDEX(username, pass) )ENGINE=InnoDB DEFAULT CHARSET = UTF8; 42 21

Στο προηγούμενο παράδειγμα, προστέθηκε ο περιορισμός INDEX(username, pass) για να δημιουργηθεί ένας δείκτης με τις στήλες username και pass. Η δημιουργία του δείκτη διευκολύνει και καθιστά πιο γρήγορα την αναζήτηση εγγραφών με κριτήρια το όνομα χρήστη και το συνθηματικό. Αντίστοιχα, θα μπορούσε να δημιουργηθεί o δείκτης INDEX(lastName) ώστε να γίνονται πιο αποδοτικές αναζητήσεις με κριτήριο το επώνυμο του χρήστη, εάν αυτό είναι απαραίτητο. 43 Ιδιαίτερη προσοχή χρειάζεται όταν πρόκειται να δημιουργηθούν πίνακες που συνδέονται μεταξύ τους. Πρέπει να δημιουργηθούν πρώτα οι πίνακες που δεν έχουν καμία εξάρτηση, δηλ. δεν έχουν εξωτερικό κλειδί. Στη συνέχεια, δημιουργούνται οι πίνακες παιδιά. 44 22

ΠΑΡΑΔΕΙΓΜΑ Η βάση δεδομένων του ΤΕΙ Αθήνας περιέχει μεταξύ άλλων τους ακόλουθους πίνακες: Τμήματα (ονομασία) Καθηγητές (επώνυμο, όνομα, βαθμίδα) Φοιτητές (αριθμός μητρώου, επώνυμο, όνομα, ημερομηνία εγγραφής) Μαθήματα (ονομασία, κωδικός καθηγητή, κωδικός τμήματος) Εγγραφές (κωδικός φοιτητή, κωδικός μαθήματος, ημερομηνία εγγραφής, βαθμός) Να γίνει το διάγραμμα που δείχνει τους πίνακες και τις σχέσεις μεταξύ τους Να γραφτούν οι εντολές SQL για τη δημιουργία των πινάκων 52 ΛΥΣΗ Παρόλο που δεν αναφέρεται, κάθε πίνακας θα έχει επιπρόσθετα μία στήλη με ακέραιες τιμές που θα αυξάνουν αυτόματα, η οποία θα είναι το πρωτεύον κλειδί του πίνακα Υπάρχουν οι ακόλουθες σχέσεις μεταξύ των πινάκων: Ένα τμήμα έχει πολλούς καθηγητές Ένα τμήμα έχει πολλούς φοιτητές Ένα καθηγητής διδάσκει πολλά μαθήματα Ένας φοιτητής κάνει πολλές εγγραφές σε μαθήματα Σε ένα μάθημα γίνονται πολλές εγγραφές 53 23

ΛΥΣΗ Για να δημιουργηθούν οι σχέσεις μεταξύ των πινάκων, χρειάζεται εξωτερικό κλειδί στον: πίνακα με τους καθηγητές για τη σχέση με τον πίνακα με τα τμήματα πίνακα με τους φοιτητές για τη σχέση με τον πίνακα με τα τμήματα πίνακα με τα μαθήματα για τη σχέση με τον πίνακα με τους καθηγητές πίνακα με τις εγγραφές για τη σχέση με τον πίνακα με τους φοιτητές πίνακα με τις εγγραφές για τη σχέση με τον πίνακα με τα μαθήματα 54 ΛΥΣΗ 55 24

ΛΥΣΗ 1 1 1 1 1 1 56 Εντολή διαγραφής πίνακα DROP TABLE IF EXISTS mytable; ΗεντολήδιαγράφειτονπίνακαμετοαναγνωριστικόmyTable, εφόσον υπάρχει ήδη. Εάν δεν υπάρχει ο πίνακας με το αναγνωριστικό αυτό, η εντολή δεν επιφέρει κάποια τροποποίηση 63 25

Οι λέξεις IF EXISTS μπορούν να παραλειφθούν. Στην περίπτωση αυτή, εάν δεν υπάρχει ο πίνακας με το συγκεκριμένο αναγνωριστικό, θα παραχθεί το μήνυμα λάθους: Error Code: 1051. Unknown table 'mydb.mytable' 64 26