ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ II

Download Report

Transcript ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ II

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ II
ΙΕΚ ΣΕΡΡΩΝ
ΤΕΧΝΙΚΟΣ ΤΕΧΝΟΛΟΓΙΑΣ INTERNET
Γ’ ΕΞΑΜΗΝΟ
Ενσωματωμένη SQL
Ενσωματωμένη SQL
Προσπέλαση μιας ΒΔ μέσα από μια γλώσσα προγραμματισμού γενικού
σκοπού απαιτείται τουλάχιστον γιατί:
• υπάρχουν ερωτήσεις που δε μπορούν να διατυπωθούν σε SQL,
γιατί η SQL δεν έχει όλες τις δυνατότητες μιας γλώσσας
προγραμματισμού γενικού σκοπού
• μη-δηλωτικές εντολές (π.χ., εκτύπωση, επικοινωνία με το χρήστη) δε
μπορούν να γίνουν μέσω της SQL
Ενσωμάτωση της SQL σε μια γλώσσα που καλείται φιλόξενη (host)
Δευτέρα, 20 Ιουλίου 2015
2
1.2
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Ενσωματωμένη SQL
Σε αυτήν την περίπτωση, η επεξεργασία των ερωτήσεων γίνεται από τη
ΒΔ, και το αποτέλεσμα γίνεται διαθέσιμο στο πρόγραμμα μια πλειάδα
τη φορά
Ένας ειδικός προ-επεξεργαστής (preprocessor) αντικαθιστά τον
ενσωματωμένο κώδικα της SQL με δηλώσεις και κλήσεις συναρτήσεων
στη host γλώσσα και μεταφράζεται το πρόγραμμα
Σύνταξη της μορφής:
EXEC SQL < embedded SQL statement > END-EXEC
Η ακριβής σύνταξη εξαρτάται από τη host γλώσσα
Δευτέρα, 20 Ιουλίου 2015
3
1.3
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Ενσωματωμένη SQL
Χρησιμοποιούμε την εντολή: SQL INCLUDE, για να δηλώσουμε στον
προ-επεξεργαστή που πρέπει να εισάγει τις δηλώσεις των μεταβλητών
της SQL
Μεταβλητές της γλώσσας μπορεί να χρησιμοποιηθούν στην εντολή της
SQL αν το σύμβολο : προηγείται του ονόματός τους
Για να γράψουμε μια ερώτηση σε SQL:
EXEC SQL
declare c cursor for
select Όνομα-Πελάτη, Πόλη
from Κατάθεση, Πελάτης
where Κατάθεση.Όνομα-Πελάτη = Πελάτης.Όνομα-Πελάτη
and Κατάθεση.Ποσό > :amount
END-EXEC
Δευτέρα, 20 Ιουλίου 2015
4
1.4
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Ενσωματωμένη SQL
Η παραπάνω εντολή δεν προκαλεί την εκτέλεση της ερώτησης, για να
εκτελεστεί:
EXEC SQL open c END-EXEC
Το αποτέλεσμα σώζεται σε μια προσωρινή σχέση, αν υπάρχει λάθος το
διαγνωστικό μήνυμα σώζεται σε μια ειδική μεταβλητή (SQLCA)
Οι πλειάδες του αποτελέσματος γίνονται διαθέσιμες στο πρόγραμμα
μέσω μιας σειράς από fetch εντολές, χρειάζεται μια μεταβλητή της
host γλώσσας για κάθε γνώρισμα
EXEQ SQL fetch c into :cn, :cc END-EXEC
Δευτέρα, 20 Ιουλίου 2015
5
1.5
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Ενσωματωμένη SQL
Για να σβήσουμε τη προσωρινή σχέση:
EXEC SQL close c END-EXEC
Επίσης:
EXEC SQL <update, insert ή delete έκφραση> END-EXEC
Δευτέρα, 20 Ιουλίου 2015
6
1.6
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Ενσωματωμένη SQL
Δυναμική SQL
Τα προγράμματα μπορούν να δημιουργούν ερωτήσεις σε SQL ως
συμβολοσειρές δυναμικά κατά την εκτέλεση και είτε να τα εκτελούν
αμέσως είτε να τα προετοιμάζουν (τα μεταφράζουν)
για να
χρησιμοποιηθούν αργότερα
Παράδειγμα:
char * sqlprog = “update Λογαριασμός set Ποσό = Ποσό * 1.05
where Αριθμός-Λογαριασμού = ?’’
EXEC SQL prepare dynprog from :sqlprog;
char account[10] = “A-101’’;
EXEC SQL execute dynprog using :account;
Δευτέρα, 20 Ιουλίου 2015
7
1.7
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
SQL
 SQL: H πιο διαδεδομένη δηλωτική γλώσσα ερωτημάτων
 π.χ. βρες το όνομα του πελάτη με κωδικό 192-83-7465
select customer.customer-name
from customer
where customer.customer-id = ‘192-83-7465’
 π.χ. βρες το υπόλοιπο όλων των λογαριασμών του πελάτη με κωδικό
192-83-7465
select account.balance
from depositor, account
where depositor.customer-id = ‘192-83-7465’ and
depositor.account-number = account.account-number
 Τα προγράμματα εφαρμογών έχουν πρόσβαση στις Β.Δ. συνήθως:
 Ειδικες εντολές της γλώσσας προγραμματισμού που επιτρέπουν
ενσωματωμένη (embedded) SQL
 Μέσω μίας διεπαφής (π.χ. ODBC/JDBC) που επιτρέπουν στα SQL
ερωτήματα να σταλθούν σε μία Β.Δ.
Δευτέρα, 20 Ιουλίου 2015
8
1.8
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Δευτέρα, 20 Ιουλίου 2015
9
1.9
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Εμφυτευμένη SQL
 Ενσωμάτωση εντολών SQL σε ένα πρόγραμμα γλώσσας
ανωτέρου επιπέδου.
π.χ. C
#include <sqlenv.h>
EXEC SQL ….( εντολή SQL )
 στα πλαίσια μιας εντολής SQL μπορούν να χρησιμοποιηθούν
μεταβλητές οι οποίες αρχίζουν με ":"
π.χ.
EXEC SQL
INSERT INTO S(S#, SNAME, CITY)
VALUES(:suppno, :sname, :scity);
Δευτέρα, 20 Ιουλίου 2015
10
1.10
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Εντολή UPDATE
EXEC SQL
UPDATE quotations
SET price = :newprice,
responsetime = :newresponse
WHERE suppno = :suppno
AND partno = :partno;
 Σημείωση: Είναι καλή ιδέα να χρησιμοποιούμε
τα ίδια ονόματα μεταβλητών και στηλών (δεν
ανήκουν στο ίδιο name space).
Δευτέρα, 20 Ιουλίου 2015
11
1.11
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Το πρόβλημα της ασυμφωνίας δομών
 Βασικές δομές σχεσιακού μοντέλου:
 Γνωρίσματα (διαφόρων τύπων, βλέπε
CREATE TABLE)
 Πλειάδες (σύνολα γνωρισμάτων)
 Πίνακες (σύνολα πλειάδων)
 Ανάγκη ορισμού μεταβλητής επανάληψης
(δρομέα) για την προσπέλαση μιας πλειάδας
από ένα πίνακα
Δευτέρα, 20 Ιουλίου 2015
12
1.12
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Συμφωνία τύπου γνωρισμάτων SQLμεταβλητών γλώσσας προγραμματισμού
 Πρέπει να δηλωθούν οι μεταβλητές που πρόκειται να
χρησιμοποιηθούν. Παράδειγμα: Αντιστοιχία μεταξύ των τύπων
της C και της SQL:
* μπορεί να ανταλλαγούν τιμές
τύπου decimal μεταξύ ενός
προγράμματος C και SQL
με μετασχηματισμό της σε
char.
**τερματικός χαρακτήρας null.
*** εναλλακτικά : struct { short
length; char data[n]; }
Δευτέρα, 20 Ιουλίου 2015
13
1.13
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Παράδειγμα δήλωσης μεταβλητών
EXEC SQL BEGIN DECLARE SECTION;
long qonhand, qonorder, threshold; /* Integers */
char suppno[4]; /* char(3) */
char partno[5]; /* char(4) */
char orderdate[11] /* date */
struct {
short length;
char data[50];
} sname, saddr; /* varchar(50) */
short indic1=0,indic2=0,indic3=0; /*indicators*/
EXEC SQL END DECLARE SECTION;
 Προσοχή οι συμβολοσειρές στη C έχουν μήκος char[i+1] γιατί
περιέχουν το σύμβολο τερματισμού ‘\0’
Δευτέρα, 20 Ιουλίου 2015
14
1.14
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Σύνδεση στη βάση
CONNECT TΟ <όνομα εξυπηρετητή> AS <όνομα σύνδεσης>
AUTHORIZATION <λογαριασμός χρήστη και συνθηματικό>
 Αλλαγή μεταξύ συνδέσεων
SET CONNECTION <όνομα σύνδεσης>
 Τερματισμός σύνδεσης
DISCONNECT <όνομα σύνδεσης>
Δευτέρα, 20 Ιουλίου 2015
15
1.15
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Χρήστες Β.Δ.
 Οι χρήστες διαφοροποιούνται ανάλογα τον τρόπο που
επικοινωνούν με το σύστημα.
 Application programmers – interact with system through DML
calls
 Sophisticated users – form requests in a database query
language
 Specialized users – write specialized database applications that
do not fit into the traditional data processing framework
 Natve users – invoke one of the permanent application programs
that have been written previously
 E.g. people accessing database over the web, bank tellers, clerical
staff
Δευτέρα, 20 Ιουλίου 2015
16
1.16
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Database Administrator
 Συντονίζει όλες τις δραστηριότητες ενός συστήματος Β.Δ.
Πρεπει να έχει μια καλη γνώση των αναγκών (ΙΤ) και των
πόρων της εταιρείας.
 Τα καθήκοντα ενός database administrator είναι:
 ορισμός schema
 ορισμός τρόπων αποθήκευσης και μεθόδων πρόσβασης
 αλλαγές στο schema και στη φυσική οργάνωση των
δεδομένων
 διανομή επιπέδων security στους χρήστες
 ορισμός των περιορισμών ακεραιότητας των δεδομένων
 βοήθεια προς τους χρήστες
 επίβλεψη απόδοσης του συστήματος
Δευτέρα, 20 Ιουλίου 2015
17
1.17
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Διαχείριση Συναλλαγών (Transaction)
 Μία συναλλαγή (transaction) είναι ένα σύνολο από πράξεις
(operations) οι οποίες εκτελούν μία απλή λογική λειτουργία σε
μια εφαρμογή Β.Δ.
 Το κομμάτι ενός Σ.Δ.Β.Δ. που διαχειρίζεται τις συναλλαγές
(transaction manager) διασφαλίζει ότι η Β.Δ. παραμένει σε μια
συνεπή κατάσταση άσχετα από αστοχίες (soft/hard failures) του
συστήματος
 Ο concurrency-control manager ελέγχει την αλληλοεπίδραση
ταυτόχρονων συναλλαγών ώστε να διασφαλίσει πάλι τη συνεπή
κατάσταση της Β.Δ.
Δευτέρα, 20 Ιουλίου 2015
18
1.18
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Διαχείριση αποθήκευσης δεδομένων
 Ο storage manager είναι ένα κομμάτι του Σ.Δ.Β.Δ. που
προσφέρει τη διεπαφή μεταξύ των low-level data που είναι
αποθηκευμένα στη Β.Δ. και των εφαρμογών και των ερωτημάτων
που φτάνουν σε αυτόν.
 Tα καθήκοντα του storage manager είναι:
 επικοινωνία με τον file manager του λειτουργικού συστήματος
(συνήθως)
 αποτελεσματική αποθήκευση, ανάκτηση και ενημέρωση των
δεδομένων
Δευτέρα, 20 Ιουλίου 2015
19
1.19
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Συνολική δομή ενός συστήματος Β.Δ.
Δευτέρα, 20 Ιουλίου 2015
20
1.20
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ
Αρχιτεκτονική εφαρμογών
Αρχιτεκτονική Two-tier: π.χ. client προγράμματα που χρησιμοποιούν
ODBC/JDBC για να επικοινωνήσουν με μια Β.Δ.
Αρχιτεκτονική Three-tier : π.χ. web-based εφαρμογές και εφαρμογές
χρησιμοποιώντας “middleware”
Δευτέρα, 20 Ιουλίου 2015
21
1.21
ΓΕΩΡΓΙΑΔΗΣ ΖΑΦΕΙΡΗΣ