«Εισαγωγή στις ΒΔ - SQL» Κωνσταντίνος Λουκάς Εργαστήριο Ιατρικής Φυσικής Ιατρική Σχολή ΕΚΠΑ e-mail: cloukas@med.uoa.gr
Περίγραμμα Παρουσίασης Εισαγωγικά Από τι αποτελείται μια ΒΔ Πως οργανώνεται, σχεδιάζεται Τι είναι οι σχεσιακές ΒΔ Τι είναι η SQL, βασικές εντολές 2
Τι είναι η ΒΔ? Ολοκληρωμένη και δομημένη συλλογή δεδομένων διαφορετικής μορφής. Ο όρος ΒΔ αναφέρεται και στο πρόγραμμα που χρησιμοποιούμε για να κατασκευάσουμε αυτή τη συλλογή. MySQL, SQL Server, Oracle, MS Access,... Η ΒΔ επιτρέπει την αποθήκευση, οργάνωση, διαχείριση, παρουσίαση και ανάκτηση των δεδομένων (με λειτουργικό τρόπο) Συστήματα που χρησιμοποιούν ΒΔ: e-commerce (π.χ. e-booking,...) Social Media (facebook,...) Τράπεζες (web banking,...) Και φυσικά στα νοσοκομεία (e-medical record,...) 3
Η εξέλιξη στις ΒΔ (Ι) Φάκελοι, καρτέλες, κατάλογοι, Ιεράρχηση?, ταξινόμηση?, αυτοματοποιημένες διαδικασίες?, reports?,... 4
Η εξέλιξη στις ΒΔ (II) Πρώιμα στάδια, ψηφιακά αρχεία, ξεχωριστά όμως ανά κατηγορία. Ευκολία στην αναζήτηση αλλά Δυσκολίες στη διαχείριση, επικαιροποίηση, κλπ. Πρέπει να ανοίξεις >2 αρχεία για να βρεις/συνδέσεις πληροφορίες. Τα αρχεία δεν σχετίζονται μεταξύ τους 5
Η εξέλιξη στις ΒΔ (ΙΙI) Excel Spreadsheets Ευκολία στην αναζήτηση, επικαιροποίηση, φιλτράρισμα, ταξινόμηση, αλλά 6 Περιορισμένος αριθμός εγγραφών, πίνακες δεν σχετίζονται μεταξύ τους, περιορισμένες δυνατότητες σε Φόρμες, Αναφορές από τη ΒΔ, κλπ.
Η εξέλιξη στις ΒΔ (ΙVα) Relational Databases (π.χ. MS-Access: εύχρηστη για μικρές ΒΔ) 7 Ευκολία στην αναζήτηση, επικαιροποίηση, φιλτράρισμα, ταξινόμηση, μεγάλος αριθμός εγγραφών, μπορείς να συσχετίσεις πίνακες, επιπλέον δυνατότητες όπως: ερωτήματα (queries), συναρτήσεις, φόρμες, αναφορές,
Η εξέλιξη στις ΒΔ (ΙVβ) Σχέσεις μεταξύ πινάκων 8
Η εξέλιξη στις ΒΔ (ΙVγ) Έλεγχος των δεδομένων (π.χ. τι μπορεί να εισάγει ο χρήστης) 9
Η εξέλιξη στις ΒΔ (ΙVδ) Περιβάλλον διεπαφής (για παρουσίαση των δεδομένων και δημιουργία αναφορών προς άλλους χρήστες) 10
Σύστημα Διαχείρισης ΒΔ - RDBMS 11
Παράδειγμα Ιατρικής ΒΔ - ιατρικός φάκελος (Διεπαφή: εισαγ. κωδικών, στοιχεία/ιστορικό ασθενή, εικόνες) 12
Από τι αποτελείται μία ΒΔ? Το λογισμικό κατασκευής μίας ΒΔ αποτελείται από δεδομένα και εργαλεία διαχείρισης αυτών των δεδομένων. Πίνακες (Tables) Ερωτήματα (Queries) Φόρμες (Forms) Αναφορές (Reports) Συναρτήσεις (Functions) Macros (στην Access) Modules (στην Access) 13 Αποθήκευση δεδομένων Οργάνωση των δεδομένων Παρουσίαση των δεδομένων Για Εκτύπωση δεδομένων Εκτέλεση πράξεων Αυτοματοποίηση ενεργειών (π.χ. όταν πατάμε ένα κουμπί σε μία φόρμα για να: τρέξω ένα ερώτημα, να ανοίξω report, να κλείσω τη ΒΔ, κλπ) Προγραμματισμός, συλλογή από συναρτήσεις, ρουτίνες, μεταβλητές.
Πίνακας - παράδειγμα Απλός αλλά μη λειτουργικός τρόπος οργάνωσης/αποθήκευσης Βελτιωμένος τρόπος, πιο λειτουργικός 14
Query - παράδειγμα π.χ. θέλουμε να επιλέξουμε ασθενείς με συγκεκριμένη ασθένεια, ή ημ/νία επίσκεψης (εφαρμογή κριτηρίων) ή να τους ιεραρχήσουμε, ή να επιλέξουμε ορισμένα μόνο στοιχεία που βρίσκονται όμως σε άλλο πίνακα (relations). Μπορούμε να τροποποιήσουμε τους πίνακες (delete, update, add) Μπορούμε να σώσουμε (τα queries) και να τα χρησιμοποιήσουμε όποτε χρειαστεί. 15
Form - παράδειγμα Όταν θέλουμε να παρουσιάσουμε τα δεδομένα με λειτουργικό τρόπο. Δεν θέλουμε οι χρήστες να έχουν πρόσβαση σε όλους του πίνακες της ΒΔ. Μπορούν να περιέχουν drop down lists, command buttons, text boxes, etc. 16
Reports - παράδειγμα Π.χ. εκτύπωση συνταγής ή παραπεμπτικού, κλπ με στοιχεία από τη ΒΔ. 17
Macros, Modules Χρησιμοποιούνται στην Access. Macros: αυτοματοποιούν επαναληπτικές διαδικασίες ή απλές ενέργειες. Modules: VB programming code. 18
Πως οργανώνονται τα δεδομένα στη ΒΔ Τα δεδομένα εμπεριέχονται σε πίνακες (tables). Οι γραμμές κάθε πίνακα ονομάζονται εγγραφές (records). Τα πεδία κάθε γραμμής ονομάζονται data fields. Η ονομασία κάθε στήλης ονομάζεται «χαρακτηριστικό» (attribute) ή «πεδίο». Στις σχεσιακές ΒΔ οι πίνακες συνδέονται μεταξύ τους (θα δούμε παρακάτω με ποιο τρόπο ) 19
Ιδιότητες Πεδίων Στις ΒΔ μπορεί να οριστεί ο «τύπος» του κάθε πεδίου με μεγάλη λεπτομέρεια χρησιμοποιώντας τα «field properties» 20
Πως σχεδιάζω μια ΒΔ (πρώτα στο χαρτί!) Τι/πόσους πίνακες θέλουμε? Ποιοι πρέπει να σχετίζονται και πως? Πόσα πεδία θέλουμε σε κάθε πίνακα? Τι τύπος σε κάθε πεδίο? Πως πρέπει να είναι οι φόρμες και οι αναφορές. Πρέπει να «επικοινωνούν» μεταξύ τους? 21
Το ίδιο και για τις φόρμες 22
Αποφεύγουμε να αναμιγνύουμε ανομοιογενή πληροφορία στον ίδιο πίνακα. Τι να αποφεύγεται Διαχωρίζουμε π.χ. πίνακα με αιτήματα εξετάσεων, περιστατικά, πίνακα ασθενών, κλπ. 23
Σχεσιακές ΒΔ Κλειδιά Πρωτεύοντα (Primary Keys) Εξωτερικά (Foreign Keys) Σχέσεις μεταξύ δύο πινάκων ένα προς ένα ένα προς πολλά πολλά προς πολλά 24
Κλειδιά Για τη σύνδεση δύο πινάκων χρησιμοποιούμε τα «κλειδιά». Πρόκειται για μία στήλη (συνήθως, μπορεί και συνδυασμός) που καθορίζει με μοναδικό τρόπο τις εγγραφές κάθε πίνακα. Το Πρωτεύων Κλειδί (PK) ταυτοποιεί τις εγγραφές του πίνακα στον οποίο βρίσκεται. Όταν ορίσουμε μία στήλη σαν PK, το RDBMS υλοποιεί τους εξής περιορισμούς: Δεν θα υπάρξουν 2 εγγραφές με την ίδια τιμή. Το PK θα έχει πάντα κάποια τιμή σε κάθε γραμμή (δεν θα είναι κενή). Το εξωτερικό κλειδί (FK) χρησιμοποιείται για τη σύνδεση δύο πινάκων (περισσότερα στις «σχέσεις πινάκων»). 25 Όταν σε ένα πίνακα (με δικό του PK) έχουμε επιπλέον στήλη με το PK άλλου πίνακα!
Κλειδιά στην Access 26
Κλειδιά παράδειγμα I Έστω: Students (sid, name, login, age, gpa) Students identifies the table sid, name, login, age, gpa identify attributes sid is primary key Στο Schema: ορίζουμε πίνακες, χαρακτηριστικά (attributes) Students (sid: string, name: string, login: string, age: integer, gpa: real) sid name login age gpa 50000 Dave dave@cs 19 3.3 53666 Jones jones@cs 18 3.4 53688 Smith smith@ee 18 3.2 53650 Smith smith@math 19 3.8 53831 Madayan madayan@music 11 1.8 53832 Guldu guldu@music 12 2.0 27
Κλειδιά παράδειγμα II Έστω: Courses (cid, instructor, quarter, dept) cid instructor quarter dept Carnatic101 Jane Fall 06 Music Reggae203 Bob Summer 06 Music Topology101 Mary Spring 06 Math History105 Alice Fall 06 History Στη συνέχεια θα δούμε πως μπορούμε να συνδέουμε τέτοιους πίνακες 28
Σχέση ένα προς ένα Κάθε εγγραφή ενός πίνακα συνδέεται μόνο με μία εγγραφή του άλλου πίνακα. Για κάθε πελάτη στον πίνακα employees υπάρχει μία και μόνο εγγραφή στον πίνακα με τα δεδομένα employee_data. 29
Σχέση ένα προς πολλά (Ι) Κάθε εγγραφή ενός πίνακα συνδέεται μόνο με πολλές εγγραφές του άλλου πίνακα. 30
Σχέση ένα προς πολλά (ΙΙ) π.χ. ένας ασθενής μπορεί να έχει >1 περιστατικά. Άρα ο πίνακας «ασθενείς» συνδέεται με τον πίνακα «περιστατικά» με σχέση «ΕΠΠ». PK PK FK Παιδί 31 Πατέρας
Παρατηρήσεις για PK, FK, σχέση «ΕΠΠ» Για το PK: αν γίνει προσπάθεια εισαγωγής νέου πελάτη με κωδικό ίδιο με κάποιου ήδη καταχωρημένου, το RDBMS θα απορρίψει την εισαγωγή. H σύνδεση μεταξύ εγγραφών των δύο πινάκων γίνεται συνήθως με το PK του Πατέρα να γίνει FK στο «Παιδί». Προσοχή: η διαγραφή μίας εγγραφής στον «Πατέρα» συνεπάγεται διαγραφή των αντίστοιχων τιμών στο «Παιδί»! Αν πάμε να εισάγουμε μία γραμμή στο «Παιδί» με FK που δεν συμπίπτει με κάποιο PK του «Πατέρα», αυτό απορρίπτεται. Το ίδιο ισχύσει και για ανανέωση ήδη υπάρχουσας γραμμής στο Παιδί. Κατά το σχεδιασμό Πίνακα πρέπει να καθορίσουμε εάν ένα πεδίο επιτρέπεται να έχει μηδενική τιμή (null) ή όχι. Προφανώς PK null. 32
Σχέση πολλά προς πολλά (I) Κάθε εγγραφή ενός πίνακα συνδέεται με πολλές εγγραφές του άλλου πίνακα και αντίστροφα. π.χ. ένας ασθενής μπορεί να έχει πολλούς ιατρούς και κάθε ιατρός να έχει πολλούς ασθενείς. 33
Σχέση πολλά προς πολλά (II) Οι σχεσιακές ΒΔ δεν υποστηρίζουν απευθείας σχέσεις πολλά προς πολλά. Μια τέτοια σχέση μπορεί να δημιουργηθεί έμμεσα με χρήση πίνακα συνένωσης και με 2 σχέσεις ένα προς πολλά: 34
Σχέση πολλά προς πολλά (III) Άλλο παράδειγμα 35
SQL: Structured Query Language Οι ΒΔ «καταλαβαίνουν» από SQL εντολές που χρησιμεύουν για: Υποβολή ερωτημάτων (Queries) Ενημέρωση, Ορισμό, Έλεγχο δεδομένων (updates, data definition, data control ) Διατήρηση της συνέπειας των δεδομένων (consistency) Συγχρονισμό πρόσβασης στα δεδομένα (concurrency) 36
SQL εντολές διακρίνονται σε 4 κατηγορίες: Data Definition Language (DDL): creating, modifying, and dropping the structure of database objects. π.χ. CREATE TABLE Data Manipulation Language (DML): storing, retrieving, modifying, and deleting data. π.χ. UPDATE, INSERT, SELECT,... Data Control Language (DCL): providing security to database objects. π.χ. GRANT, REVOKE,... Transaction Control Language (DDL): for managing changes affecting the data, π.χ. COMMIT, ROLLBACK,... Θα δούμε ορισμένες DML εντολές για data queries με έμφαση στην MS-Access 37
Θα εργαστούμε με τον παρακάτω πίνακα 38
Επιλογή γραμμών (I) SELECT * FROM Table1 39
Επιλογή γραμμών (II) SELECT first,last FROM Table1 40
Επιλογή γραμμών (III) SELECT DISTINCT state FROM Table1 Το DISTINCT φέρνει μοναδικά states. Αν παραλείψουμε το DISTINCT, τις φέρνει όλες. 41
Επιλογή γραμμών- χρήση WHERE (I) SELECT first, last FROM Table1 WHERE State = Arizona 42
Τελεστές Τελεστές που μπορούν να χρησιμοποιηθούν σε μια συνθήκη WHERE Τελεστής Περιγραφή Τελεστής Περιγραφή = Ίσο με <= Μικρότερο ή ίσο <> Δεν ισούται με BETWEEN Μεταξύ > Μεγαλύτερο από LIKE Εύρεση συγκεκριμένων προτύπων < Μικρότερο από ΙΝ Χρησιμοποιείται όταν ξέρουμε συγκεκριμένες τιμές μιας στήλης >= Μεγαλύτερο ή ίσο 43
Επιλογή γραμμών- χρήση WHERE (II) SELECT first, last FROM Table1 WHERE State LIKE C* Κανονικά είναι C%. Στην Access είναι C* 44
Επιλογή γραμμών- χρήση WHERE (III) SELECT first, last FROM Table1 WHERE State LIKE *a Κανονικά είναι %a. Στην Access είναι *a 45
Επιλογή γραμμών- χρήση WHERE (IV) SELECT first, last FROM Table1 WHERE State NOT LIKE *riz* Κανονικά είναι %riz%. Στην Access είναι *riz* 46
Επιλογή γραμμών- χρήση WHERE (V) SELECT first, last FROM Table1 WHERE age>20 AND age<42 47
Επιλογή γραμμών- χρήση WHERE (VΙ) SELECT * FROM Table1 WHERE last IN ('Jones', 'May') 48
Επιλογή γραμμών- χρήση WHERE (VIΙ) SELECT * FROM Table1 WHERE last='jones' AND (first='john' OR first='ola') 49
Επιλογή γραμμών- χρήση WHERE (VIIΙ) SELECT * FROM Table1 ORDER BY age 50
Επιλογή γραμμών- χρήση WHERE (IΧ) SELECT * FROM Table1 ORDER BY age DESC 51