DB - Relational Languages QBE, DDL
Download
Report
Transcript DB - Relational Languages QBE, DDL
Κεφάλαιο 5
Ορισμός Βάσεων Δεδομένων με SQL DDL
- Άλλες Γλώσσες Σχεσιακών Βάσεων (QBE)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
194
SQL Data Definition
H Γλώσσα Ορισμού (DDL) της SQL χρησιμοποιείται για
CREATE, DROP και ALTER τις περιγραφές των Σχέσεων στη
Βάση Δεδομένων
CREATE TABLE DEPARTMENT
( DNumber
integer
keymember 0
not null,
DName
varchar(12) keymember 1
not null,
MgrSSN
char(9)
references EMPLOYEE.SSN,
MgrSD
char(9)
);
Σε μερικά (παλαιότερα) SQL συστήματα, δεν υπάρχει
υποστήριξη για REFERENCES (foreign key) και
KEYMEMBER (key)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
195
SQL DDL - συνέχεια
Η εντολή:
DROP TABLE DEPENDENT
διαγράφει τον πλήρη πίνακα DEPENDENT και τον ορισμό του
(δεν είναι δυνατή πλέον η χρήση του για ενημερώσεις, κλπ.)
Η εντολή:
ALTER TABLE EMPLOYEE ADD JOB VARCHAR(15)
προσθέτει ένα νέο γνώρισμα, με όνομα JOB, στη Σχέση
EMPLOYEE
– Όλες οι τιμές για το JOB στην αρχή θα είναι NULL
– Αργότερα μπορεί να αλλάξουν με την εντολή UPDATE.
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
196
Δημιουργία Ευρετηρίων στην SQL
Στις περισσότερες περιπτώσεις μια Σχέση Βάσης αντιστοιχεί σε
αποθηκευμένο αρχείο
Η εντολή CREATE INDEX χρησιμοποιείται για τον προσδιορισμό
ευρετηρίου (index) που έχει ονομασία (index name)
CREATE INDEX LN_INDEX on EMPLOYEE (Name);
Για τον προσδιορισμό ενός περιορισμού ευρετηρίου κλειδιού στο
γνώρισμα (γνωρίσματα) κλειδιού χρησιμοποιείται το UNIQUE
CREATE UNIQUE INDEX S_IND on EMPLOYEE (SSN);
Για τον προσδιορισμό ενός ευρετηρίου συστάδων (clustering
index) χρησιμοποιείται το CLUSTER
CREATE INDEX D_IN on EMPLOYEE(DNumber) CLUSTER;
Στα περισσότερα DBMS, κάποια παραλλαγή των B+-tree
χρησιμοποιείται για την υλοποίηση ευρετηρίων
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
197
Σχεσιακές Όψεις και SQL
Η αρχιτεκτονική 3-επιπέδων στα DBMS, έχει σαν αποτέλεσμα
διαφορετικοί χρήστες να βλέπουν διαφορετικά εξωτερικά σχήματα
(όψεις) - αυτό επιτυγχάνεται στο σχεσιακό μοντέλο με την έννοια του
VIEW
External
Schema 1
External
Schema 2
Conceptual
Schema
.....
External
Schema N
RELATIONAL
VIEWS
RELATIONAL
DATABASE
SCHEMA (RELATIONS)
Internal
Schema
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
198
Σχεσιακές Όψεις – Ορισμός (1)
Μια ΟΨΗ (VIEW) είναι μια Σχέση που ΔΕΝ είναι στοιχείο του
Εννοιολογικού Σχήματος (οι Σχέσεις Βάσης)) αλλά είναι
προσβάσιμη ως μια ιδεατή (virtual) σχέση
– Ο χρήστης δεν μπορεί να ξεχωρίσει αν μια Σχέση είναι Σχέση Βάσης
ή είναι Όψη
– Η Όψη ΔΕΝ αποθηκεύεται (materialized) στην Βάση Δεδομένων
– Τα περιεχόμενα της Όψης προσδιορίζονται από τον (αποθηκευμένο)
ορισμό της σαν μια συνάρτηση των περιεχομένων της
– Μια Όψη ορίζεται σε Σχέσεις Βάσης ή σε άλλες Όψεις με κάποιο
query
– Πράξεις (queries, ενημερώσεις) σε Όψεις μεταφράζονται σε Πράξεις
στις ορίζουσες (την Όψη) Σχέσεις Βάσης
– ΔΕΝ υπάρχουν περιορισμοί στα Queries σε Όψεις
– Ελάχιστες ενημερώσεις σε Όψεις επιτρέπονται
– Μια Όψη αλλάζει δυναμικά με τη Βάση δεδομένων
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
199
Σχεσιακές Όψεις – Ορισμός (2)
CREATE VIEW table_name
[ ( view_column_list ) ]
AS query_expression
[ WITH CHECK OPTION ]
V1: Εργαζόμενοι σε Έργα
CREATE VIEW PROJWORKER(EName, Address, Project)
AS select Name, Address, PName
from EMPLOYEE, PROJECT, WORKS_ON
where PROJECT.PNumber = WORKS_ON.PNumber
and WORKS_ON.SSN=EMPLOYEE.SSN ;
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
200
Σχεσιακές Όψεις - Παραδείγματα
Όταν το view_column_list λείπει, τα γνωρίσματα της ΟΨΗΣ
κληρονομούνται από τα Γνωρίσματα της ορίζουσας Σχέσης
V2: Υπάλληλοι με υψηλούς μισθούς
CREATE VIEW BIGSHARKS
AS
select *
from EMPLOYEE
where Salary > 50000 and BirthDate > 31.12.65;
– Ο χρήστης δύναται να κάνει ερωτήσεις άμεσα σε αυτή τη νέα
Σχέση που λέγεται BIGSHARKS, και η οποία έχει ακριβώς τα ίδια
Γνωρίσματα με τη Σχέση EMPLOYEE
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
201
Σχεσιακές Όψεις – Παραδείγματα (2)
Μια Όψη είναι δυνατόν να έχει διαφορετικά γνωρίσματα
(νέα) από το Εννοιολογικό Σχήμα
V3: Πληροφορίες για Τμήματα (μέσος μισθός, κλπ.)
CREATE VIEW DEPTINFO (Name, NoOfEmpl, AvgSalary)
AS
select DName, COUNT(*), AVG(Salary)
from DEPARTMENT d, EMPLOYEE e
where d.DNumber = e.DNumber
group by DName ;
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
202
Σχεσιακές Όψεις – Παραδείγματα (3)
V4: Βρες τον αριθμό των υπαλλήλων και τον μέσο μισθό
(παρουσίασε και το όνομα τμήματος)
select
from
where
*
DEPTINFO
Name = “research”
V5: Αύξησε κατά 1 τον αριθμό των Υπαλλήλων στο Τμήμα
Έρευνας
– Αυτή η ενημέρωση ΔΕΝ επιτρέπεται (Γιατί ?)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
203
Σχεσιακές Όψεις - Εκτέλεση
Όπως ήδη ειπώθηκε, το σύστημα μεταφράζει προσβάσεις
(ενημερώσεις) σε Όψεις ΣΕ προσβάσεις (ενημερώσεις) σε
Σχέσεις Βάσης.
ΠΩΣ ΜΠΟΡΕΙ ΝΑ ΓΙΝΕΙ ΑΥΤΌ ?
– ΧΑΖΗ Προσπάθεια 1: Δημιούργησε (Materialize) την Όψη
(προσωρινός πίνακας) και εκτέλεσε το query σε αυτήν.
– ΧΑΖΗ Προσπάθεια 2: Κράτα συνεχώς ενήμερη την Όψη -δηλαδή, κράτησέ την δημιουργημένη (ονομάζεται, snapshot) και
όποτε σχετικές ενημερώσεις γίνονται στις Σχέσεις Βάσης, τότε
πέρασε αυτές και στην Όψη. Εκτέλεσε το query στο snapshot.
– ΣΩΣΤΗ Προσπάθεια: Άλλαξε το query αντικαθιστώντας την
Όψη με το query σε Σχέσεις Βάσης που την ορίζει, και εκτέλεσε
το query σε αυτές τις Σχέσεις Βάσης.
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
204
Σχεσιακές Όψεις – Παραδείγματα Εκτέλεσης
Για παράδειγμα, το query στην Όψη BIGSHARKS:
select
from
where
Name, Address
BIGSHARKS
DNumber = 5
Τροποποιείται ανάλογα και το παρακάτω query εκτελείται:
select
from
where
Name, Address
EMPLOYEE
Salary > 50000 and BirthDate > 31.12.65
and DNumber = 5
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
205
Σχεσιακές Όψεις - Ενημερώσεις
Γενικά, υπάρχουν σοβαροί περιορισμοί στις ενημερώσεις
Μια ενημέρωση Όψης είναι αναμφίβολη αν μια μοναδική
ενημέρωση στις Σχέσεις Βάσης μπορεί να εκπληρώσει το
ζητούμενο αποτέλεσμα στην Όψη
ΠΑΡΑΤΗΡΗΣΕΙΣ:
– Μια όψη που ορίζεται σε μια (ακριβώς) Σχέση Βάσης είναι
ενημερώσιμη αν τα γνωρίσματα της Όψης περιέχουν το Κύριο
Κλειδί
– Όψεις που ορίζονται σε πολλαπλές Όψεις είναι γενικά μηενημερώσιμες
– Όψεις που περιέχουν Συναθροιστικές Συναρτήσεις είναι σίγουρα
μη-ενημερώσιμες
Οι Ενημερώσεις των Όψεων παραμένουν ένα ενδιαφέρον
ανοικτό ερευνητικό θέμα / πρόβλημα (π.χ., Data Warehouses)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
206
Σχεσιακές Όψεις - Σχόλια
To “WITH CHECK OPTION” χρησιμοποιείται σε ενημερώσιμες
όψεις για να αντιμετωπίσει το πρόβλημα των γραμμών που
εξαφανίζονται (vanishing rows)
Για παράδειγμα, θεωρήστε την Όψη:
CREATE VIEW V AS select * from R where A = “X”
Έστω η ενημέρωση:
UPDATE V set A = “Y”
Η ενημέρωση θα προχωρήσει κανονικά, αλλά οι πλειάδες που ήταν
πριν προσβάσιμες στην V θα εξαφανιστούν! (προφανώς, δεν θα
ικανοποιούν πλέον την συνθήκη της WHERE-πρότασης)
Οι Όψεις χρησιμοποιούνται (επίσης) ως μηχανισμοί
ασφάλειας και δικαιοδοσίας
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
207
Περιορισμοί Ακεραιότητας
Το Σχεσιακό Μοντέλο υποστηρίζει 6 είδη περιορισμών ακεραιότητας:
ΚΛΕΙΔΙ (KEY), ΑΚΕΡΑΙΟΤΗΤΑ ΟΝΤΟΤΗΤΑΣ (ENTITY
INTEGRITY), ΑΝΑΦΟΡΙΚΗ ΑΚΕΡΑΙΟΤΗΤΑ (REFERENTIAL
INTEGRITY.) ΠΕΔΙΟ ΤΙΜΩΝ (DOMAIN), ΣΤΗΛΩΝ (COLUMN) και
ΟΡΙΖΟΜΕΝΩΝ ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ (USER-DEFINED)
Τα περισσότερα εμπορικά DBMS δεν υποστηρίζουν όλους τους
περιορισμούς ακεραιότητας (υποστήριξη εδώ σημαίνει ότι αν μια
ενημέρωση καταστρατηγεί έναν περιορισμό τότε το DBMS δεν
επιτρέπει την εκτέλεσή του)
Έχουμε ήδη μιλήσει για τον προσδιορισμό των έμφυτων στο μοντέλο
περιορισμών, (κλειδί, ακεραιότητα οντότητας, αναφορική ακεραιότητα.
Οι άλλοι 3 περιορισμοί προσδιορίζονται ρητά.
Μοντέρνα DBMS επιβάλουν όλο και περισσότερους δομικούς
περιορισμούς, με καλό παράδειγμα την: Access της Microsoft.
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
208
Περιορισμοί στο Σχεσιακό Μοντέλο
Όταν υποστηρίζεται ένας περιορισμός ακεραιότητας, αρκετές
ενέργειες πρέπει να γίνουν από το DBMS. Αυτές είναι, η
διαδοχική τροποποίηση (cascade delete) και η διαδοχική
ενημέρωση (cascade update.)
Μερικά DBMSs υποστηρίζουν άμεσα τα παραπάνω (Access)
Άλλα DBMSs απαιτούν από τον χρήστη να γράψει triggers
(διαδικασίες) για την υποστήριξη αυτών (SQL Server)
Περιορισμοί Στηλών και Πεδίων υποστηρίζονται μερικώς
(ενίοτε και από strong-typing ή άλλους ισχυρούς μηχανισμούς)
Περιορισμοί που ορίζονται από τον Χρήστη έχουν περιληφθεί
σε νεώτερες εκδόσεις της τυποποίησης της SQL (SQL-92) με
ASSERTIONS (ειδικοί κανόνες)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
209
Assertions -- Παραδείγματα
Κάθε Υπάλληλος είναι είτε Άνδρας ή Γυναίκα
ASSERT gender ON EMPLOYEE: Sex=“m” OR Sex=“f”
Οι Μισθοί πρέπει να ξεπερνούν το 1,000,000
ASSERT salary_bound ON EMPLOYEE: Salary > 1000000
Αν κάποιος επιχειρήσει την παρακάτω εισαγωγή:
insert into EMPLOYEE (select Name=“tom”,.., Salary=1200000, …)
η εισαγωγή ΑΛΛΑΖΕΙ εμπεδώνοντας τον κανόνα assert σε:
insert into EMPLOYEE (select Name=“tom”,.., Salary=12000..
where 1200000 > 1000000 )
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
210
Εμφύτευση της SQL σε Γλώσσα Προγραμματισμού
Εντολές DML συχνά εμφυτεύονται σε προγράμματα γλώσσας
προγραμματισμού (host)
Η εμφυτευμένη SQL εντολή διακρίνεται από εντολές της
Γλώσσας Προγραμματισμού με ειδικό τρόπο, π.χ. με πρόθεμα
Υπάρχουν δυο τρόποι εμφύτευσης:
1.- Επέκταση της Γλώσσας Προγραμματισμού (αλλαγή του Compiler)
Ενδεικτικά, RIGEL, MODULA-R, Gemstone, Orion, κλπ.)
Ονομάζονται database programming languages
2.- Χρήση ενός προ-επεξεργαστή της Γλώσσας για τις εντολές DML
Ο προ-επεξεργαστής αντικαθιστά τις εντολές DML με κλήσεις
στην host γλώσσα, οι οποίες eεκτελούνται
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
211
Εμφύτευση της SQL
SQL εντολές καλούνται μέσα από ένα πρόγραμμα μιας host
γλώσσας (π.χ., C ή COBOL)
– Οι εντολές της SQL μπορούν να αναφέρονται σε host
μεταβλητές
– Πρέπει να περιλαμβάνουν μια εντολή για σύνδεσμο με την
σωστή βάση.
– Οι SQL Σχέσεις είναι σύνολα εγγραφών, χωρίς προκαθορισμένο
(a priori) όριο στον αριθμό των εγγραφών. Δεν υπάρχουν
τέτοιες δομές στην C !
– Για να αντιμετωπίσει αυτή την δυσκολία η SQL υποστηρίζει ένα
μηχανισμό που λέγεται cursor
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
212
Cursors
Οι δυνατότητες που προσφέρονται για τον CURSOR είναι
– Δηλώνεται για μια σχέση ή ένα query που είναι γεννήτορας μιας
σχέσης.
– Μπορεί να ανοίξει (open) έναν cursor, και διαδοχικά να φέρει
(fetch) πλειάδες, μετά να μετακινήσει (move) τον cursor, μέχρις
ότου όλες οι πλειάδες ανακληθούν
– Μπορεί με τη χρήση του ORDER BY να ελέγχει τη σειρά
ανάκλησης των πλειάδων
» Πεδία στην ORDER BY πρόταση πρέπει να
παρουσιάζονται και στην SELECT πρόταση.
– Μπορεί να διαγράφει / τροποποιεί πλειάδες που δείχνονται από
τον cursor
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
213
Ο Cursor που παίρνει ονόματα ναυτικών που
έχουν κρατήσει ένα κόκκινο σκάφος, σε
αλφαβητική σειρά
DECLARE sinfo CURSOR FOR
SELECT S.sname
FROM Sailors S, Boats B, Reserves R
WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’
ORDER BY S.sname;
FETCH 5 IN sinfo;
Δεν επιτρέπεται να αντικατασταθεί S.sname από το, ας
πούμε, S.sid στην ORDER BY πρόταση! (Γιατί ?)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
214
Εμφύτευση της SQL σε C -- Παράδειγμα
char SQLSTATE[6];
EXEC SQL BEGIN DECLARE SECTION
char c_sname[20]; short c_minrating; float c_age;
EXEC SQL END DECLARE SECTION
c_minrating = random();
EXEC SQL DECLARE sinfo CURSOR FOR
SELECT S.sname, S.age FROM Sailors S
WHERE S.rating > :c_minrating
ORDER BY S.sname;
do {
EXEC SQL FETCH sinfo INTO :c_sname, :c_age;
printf(“%s is %d years old\n”, c_sname, c_age);
} while (SQLSTATE != ‘02000’);
EXEC SQL CLOSE sinfo;
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
215
API Βάσης Δεδομένων: Εναλλακτικός της
Εμφύτευσης τρόπος πρόσβασης
Αντί να αλλάζει ο compiler, προστίθεται μια βιβλιοθήκη με
Κλήσεις στη Βάση Δεδομένων (API)
Application Programming Interface
– Ειδικές Διαδικασίες / Αντικείμενα
– Περνά τις SQL εντολές σαν character strings από τη γλώσσα και
παρουσιάζει τα αποτελέσματα με φιλικό (για τη γλώσσα) τρόπο
– Το ODBC της Microsoft έχει γίνει το C/C++ standard στα Windows
– Το JDBC της SUN είναι το ανάλογο για τη Java
– Ανεξάρτητα του DBMS
» Ένας “οδηγός” παγιδεύει τις κλήσεις και τις μεταφράζει σε κώδικα για
το DBMS
» Η Βάση μπορεί να είναι στο Δίκτυο
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
216
SQL API στη Java (JDBC)
Connection con = // connect
DriverManager.getConnection(url, ”login", ”pass");
Statement stmt = con.createStatement(); // set up stmt
String query = "SELECT COF_NAME, PRICE FROM COFFEES";
ResultSet rs = stmt.executeQuery(query);
try { // handle exceptions
// loop through result tuples
while (rs.next()) {
String s = rs.getString("COF_NAME");
Float n = rs.getFloat("PRICE");
System.out.println(s + "
" + n);
}
} catch(SQLException ex) {
System.out.println(ex.getMessage ()
+ ex.getSQLState () + ex.getErrorCode ());
}
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
217
Disadvantages of having Host Programming
Languages
Mixing Procedural and Declarative languages (the famous
language mismatch problem)
Different pre-processors are required for different languages
Relations are not treated as 1st class objects in the language
(e.g., cannot pass a relation as a parameter to a procedure)
The host language may not support required constructs (e.g.,
FORTRAN does not support records)
The alternative, that is database programming languages are
gaining ground, especially in object-oriented DBMSs
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
218
Shortcomings of SQL
Η SQL δεν υποστηρίζει strong typing, inheritance, etc.
Οι SQL πίνακες ΔΕΝ ΕΙΝΑΙ ΣΧΕΣΕΙΣ (επιτρέπουν διπλές
πλειάδες)
Οι SQL πίνακες δεν εμφωλιάζονται (δεν αποτελούν τιμές για
άλλους πίνακες)
Η SQL δεν υποστηρίζει πολλές πράξεις, όπως: generalized
restriction, division, forall
Η SQL δεν υποστηρίζει 3-V logic (Λογική 3 τιμών αληθείας)
Η SQL δεν υποστηρίζει μεταβατικούς περιορισμούς
Η SQL δεν υποστηρίζει συναρτησιακές εξαρτήσεις (functional
dependencies)
Η SQL δεν υποστηρίζει περιορισμούς ακεραιότητας σε Όψεις
ΠΑΡΟΛΑ ΑΥΤΑ, η SQL είναι η STANDARD ΓΛΩΣΣΑ
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
219
Query-by-Example (QBE)
Μια Γλώσσα για ερωταποκρίσεις που αναπτύχθηκε στην IBM (από τον
Moshe Zloof) και παρουσιάζεται σε ένα προϊόν (QMF) (που είναι
εναλλακτικός τρόπος διεπαφής για το DB2)
Ευκολότερη από την SQL για τον μέσο χρήστη
(ΟΠΤΙΚΗ και ΔΙΣΔΙΑΣΤΑΤΗ)
ΚΕΝΤΡΙΚΗ ΙΔΕΑ: Το Σύστημα παρέχει στον χρήστη τη δυνατότητα να
δει το περίγραμμα των Σχέσεων στη Βάση και ο Χρήστης συμπληρώνει τους
πίνακες δίνοντας παραδείγματα για το πώς θέλει να είναι η απάντηση
QBE1: Βρες τα ονόματα των Υπαλλήλων στο Τμήμα 4
EMPLOYEE
SSN
Name
BDate
P.__x
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
Address
Sex
Salary
SupSSN
DNumber
4
220
QBE ΣΥΝΟΨΗ
Οι Αρχές της Γλώσσας
– Ο χρήστης δεν απαιτείται να θυμάται τα ονόματα των γνωρισμάτων και
των σχέσεων
– Στην διατύπωση της ερωταπόκρισης, δεν απαιτείται να τηρούνται
ανελαστικοί κανόνες
– Στηρίζεται στον σχεσιακό λογισμό πλειάδων (μεταβλητές είναι οι στήλες)
– Σχεσιακά πλήρης διατύπωση, και κάτι παραπάνω, μια και εκφράζεται και
transitive closure
Πως Λειτουργεί
– Σύμβολα με “_” να προηγείται, είναι ΜΕΤΑΒΛΗΤΕΣ
– Σύμβολα χωρίς “_” να προηγείται είναι ΣΤΑΘΕΡΕΣ ΤΙΜΕΣ
(υποδηλώνουν μια συνθήκη για επιλογή - equality selection-condition)
– Το πρόσημο “P.” χρησιμοποιείται για να υποδειχθεί ποια γνωρίσματα θα
τυπωθούν (υποδηλώνει μια προβολή - projection)
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
221
QBE Σύνοψη – Η διαδικασία
Διαδικασία ερωταπόκρισης
–
–
–
–
–
Πρώτα, ο χρήστης διαλέγει τις σχέσεις (πίνακες) που χρειάζεται για το query
Παρουσιάζονται τα περιγράμματα των πινάκων που διαλέχτηκαν
Ο χρήστης «πηγαίνει» στις κατάλληλες στήλες (με ειδικά πλήκτρα)
Τιμές-παραδείγματα (μεταβλητές), σταθερές, κλπ., δακτυλογραφούνται
Άλλοι συγκριτικοί τελεστές (πέραν της ισότητας – που είναι αυτόματη για
σταθερές τιμές) πρέπει να δακτυλογραφηθούν (όπως, >, <, κλπ.)
– πιο πολύπλοκες συνθήκες μπαίνουν σε ένα κουτί-συνθηκών (condition
box)
– Συνθήκες στην ίδια σειρά υποδηλώνουν το Boolean AND
– Συνθήκες σε διαφορετικές σειρές υποδηλώνουν το Boolean OR
– Η άρνηση (negation - Boolean NOT) προσδιορίζεται με το σύμβολο “ “
– Οι Συνενώσεις (JOINS) εκφράζονται με τη χρήση κοινών παραδειγματικών
τιμών σε πολλαπλούς πίνακες
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
222
QBE – Παραδείγματα (1)
QBE2: Βρες τα ονόματα των Υπαλλήλων που εργάζονται σε ένα Τμήμα
που έχει μάνατζερ διαφορετικό από αυτόν με αριθμό 3334
EMPLOYEE
SSN
Name
BDate
Address
Sex
P.__x
Salary
SupSSN
DNumber
no
DEPARTMENT
DNumber
DName
MgrSSN
no
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
MgrSD
223
QBE – Παραδείγματα (2)
QBE3: Βρες τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο
των 300,000 και εργάζονται στο Τμήμα 5
SSN
Name
BDate
Address
Sex
P.__x
Salary
SupSSN
>300000
DNumber
5
QBE4: Βρες τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο
των 300,000 ή εργάζονται στο Τμήμα 5
SSN
Name
BDate
Address
Sex
Salary
P. x
P. y
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
SupSSN
DNumber
5
>300000
224
QBE – Παραδείγματα (3)
QBE5: Βρες ονόματα και διευθύνσεις Υπαλλήλων του Τμήματος 4 που
κερδίζουν περισσότερα από κάποιον που εργάζεται στο Τμήμα 5
EMPLOYEE
SSN
Name
BDate
P. tom
Address
Sex
Salary
P. kifis
CONDITION BOX
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
SupSSN
DNumber
10
4
20
5
__10 > __20
225
QBE – Παραδείγματα (4)
QBE6: Βρες τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο
από τον μισθό του μάνατζερ του Τμήματός των
EMPLOYEE
SSN
Name
BDate
Address
P. tom
Sex
Salary
10
SupSSN
DNumber
6
__
4444
15
DEPARTMENT
DNumber
6
DName
MgrSSN
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
MgrSD
CONDITION BOX
__10>__15
226
QBE – Παραδείγματα (5)
QBE7: Βρες όλους τους Εξαρτώμενους για Υπαλλήλους που έχουν ένα
Εξαρτώμενο γεννηθέντα το 1972 ενώ δεν έχουν κανένα Εξαρτώμενο
που γεννήθηκε μετά το 1975
DEPENDENT
ESSN
P.
Name Sex
BDate Relation
44
44
1972
44
<1975
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
227
QBE – Παραδείγματα (6)
QBE8: Βρες το άθροισμα των μισθών όλων τον Υπαλλήλων
EMPLOYEE
SSN
Name
BDate
Address
Sex
Salary
SupSSN
DNumber
P.SUM.ALL. x
QBE9: Εισαγωγή ενός νέου Υπαλλήλου
EMPLOYEE
SSN
I.
Name
6669 thomas
BDate
Address
8.2.65
ekali
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
Sex
Salary
SupSSN
DNumber
m
60000
9876
4
228
QBE – Παραδείγματα (7)
QBE10: Δώσε αύξηση μισθού 15% για όλους τους
Υπαλλήλους του Τμήματος 5
EMPLOYEE
SSN
Name
BDate
44
Address
Sex
Salary
s
SupSSN
DNumber
5
__
U.
44
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
s* 1.15
229
Μια ματιά στην MS Access
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
230
Κλείνοντας
Η QBE είναι μια κομψή και φιλική προς το χρήστη γλώσσα
που βασίζεται στο σχεσιακό λογισμό πεδίου
Είναι ιδιαίτερα εκφραστική (σχεσιακά πλήρης, αν και οι
ενημερώσεις ληφθούν υπόψη).
Απλές ερωταποκρίσεις είναι εξαιρετικά εύκολο να
εκφραστούν στην QBE, με ένα ελάχιστο συντακτικό που
πρέπει κανείς να θυμάται
Η QBE Έχει επηρεάσει σε μεγάλο βαθμό τις γραφικές
διευκολύνσεις για queries που σήμερα προσφέρονται σε
πολλά προϊόντα, περιλαμβανομένης και της Microsoft
Access.
Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL
231