Κεφάλαιο 5

38
. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL Κεφάλαιο 5 Ορισμός Βάσεων Δεδομένων με SQL DDL - Άλλες Γλώσσες Σχεσιακών Βάσεων (QBE)

description

Κεφάλαιο 5. Ορισμός Βάσεων Δεδομένων με SQL DDL - Άλλες Γλώσσες Σχεσιακών Βάσεων ( QBE). SQL Data Definition. H Γλώσσα Ορισμού (DDL) της SQL χρησιμοποιείται για CREATE, DROP και ALTER τις περιγραφές των Σχέσεων στη Βάση Δεδομένων CREATE TABLE DEPARTMENT - PowerPoint PPT Presentation

Transcript of Κεφάλαιο 5

Page 1: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 1

Κεφάλαιο 5Κεφάλαιο 5

Ορισμός Βάσεων Δεδομένων με SQL DDL

- Άλλες Γλώσσες Σχεσιακών Βάσεων (QBE)

Page 2: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 2

SQL Data DefinitionSQL 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)

Page 3: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 3

SQL DDL - συνέχειαSQL DDL - συνέχεια

Η εντολή:

DROP TABLE DEPENDENT

διαγράφει τον πλήρη πίνακα DEPENDENT και τον ορισμό του (δεν είναι δυνατή πλέον η χρήση του για ενημερώσεις, κλπ.)

Η εντολή:

ALTER TABLE EMPLOYEE ADD JOB VARCHAR(15)

προσθέτει ένα νέο γνώρισμα, με όνομα JOB, στη Σχέση EMPLOYEE

– Όλες οι τιμές για το JOB στην αρχή θα είναι NULL – Αργότερα μπορεί να αλλάξουν με την εντολή UPDATE.

Page 4: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 4

Δημιουργία Ευρετηρίων στην SQLΔημιουργία Ευρετηρίων στην SQL

Στις περισσότερες περιπτώσεις μια Σχέση Βάσης αντιστοιχεί σε αποθηκευμένο αρχείο

Η εντολή CREATE INDEX χρησιμοποιείται για τον προσδιορισμό ευρετηρίου (index) που έχει ονομασία (index name)CREATE INDEX LN_INDEX on EMPLOYEE (Name);

Για τον προσδιορισμό ενός περιορισμού ευρετηρίου κλειδιού στο γνώρισμα (γνωρίσματα) κλειδιού χρησιμοποιείται το UNIQUE CREATE UNIQUE INDEX S_IND on EMPLOYEE (SSN);

Για τον προσδιορισμό ενός ευρετηρίου συστάδων (clustering index) χρησιμοποιείται το CLUSTERCREATE INDEX D_IN on EMPLOYEE(DNumber) CLUSTER;

Στα περισσότερα DBMS, κάποια παραλλαγή των B+-tree χρησιμοποιείται για την υλοποίηση ευρετηρίων

Page 5: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 5

Σχεσιακές Όψεις και SQLΣχεσιακές Όψεις και SQL

ExternalSchema 1

ExternalSchema 2

ExternalSchema N.....

Conceptual Schema

Η αρχιτεκτονική 3-επιπέδων στα DBMS, έχει σαν αποτέλεσμα διαφορετικοί χρήστες να βλέπουν διαφορετικά εξωτερικά σχήματα (όψεις) - αυτό επιτυγχάνεται στο σχεσιακό μοντέλο με την έννοια του VIEW

InternalSchema

RELATIONALVIEWS

RELATIONALDATABASESCHEMA (RELATIONS)

Page 6: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 6

Σχεσιακές Όψεις – Ορισμός (1)Σχεσιακές Όψεις – Ορισμός (1)

Μια ΟΨΗ (VIEW) είναι μια Σχέση που ΔΕΝ είναι στοιχείο του Εννοιολογικού Σχήματος (οι Σχέσεις Βάσης)) αλλά είναι προσβάσιμη ως μια ιδεατή (virtual) σχέση– Ο χρήστης δεν μπορεί να ξεχωρίσει αν μια Σχέση είναι Σχέση Βάσης ή

είναι Όψη – Η Όψη ΔΕΝ αποθηκεύεται (materialized) στην Βάση Δεδομένων – Τα περιεχόμενα της Όψης προσδιορίζονται από τον (αποθηκευμένο)

ορισμό της σαν μια συνάρτηση των περιεχομένων της – Μια Όψη ορίζεται σε Σχέσεις Βάσης ή σε άλλες Όψεις με κάποιο query– Πράξεις (queries, ενημερώσεις) σε Όψεις μεταφράζονται σε Πράξεις

στις ορίζουσες (την Όψη) Σχέσεις Βάσης – ΔΕΝ υπάρχουν περιορισμοί στα Queries σε Όψεις– Ελάχιστες ενημερώσεις σε Όψεις επιτρέπονται– Μια Όψη αλλάζει δυναμικά με τη Βάση δεδομένων

Page 7: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 7

Σχεσιακές Όψεις – Ορισμός (2)Σχεσιακές Όψεις – Ορισμός (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 ;

Page 8: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 8

Σχεσιακές Όψεις - Παραδείγματα Σχεσιακές Όψεις - Παραδείγματα

Όταν το view_column_list λείπει, τα γνωρίσματα της ΟΨΗΣ κληρονομούνται από τα Γνωρίσματα της ορίζουσας Σχέσης

V2: Υπάλληλοι με υψηλούς μισθούς

CREATE VIEW BIGSHARKS

AS select *

from EMPLOYEE

where Salary > 50000 and BirthDate > 31.12.65;

– Ο χρήστης δύναται να κάνει ερωτήσεις άμεσα σε αυτή τη νέα Σχέση που λέγεται BIGSHARKS, και η οποία έχει ακριβώς τα ίδια Γνωρίσματα με τη Σχέση EMPLOYEE

Page 9: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 9

Σχεσιακές Όψεις – Παραδείγματα (2) Σχεσιακές Όψεις – Παραδείγματα (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 ;

Page 10: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 10

Σχεσιακές Όψεις – Παραδείγματα (3)Σχεσιακές Όψεις – Παραδείγματα (3)

V4: Βρες τον αριθμό των υπαλλήλων και τον μέσο μισθό (παρουσίασε και το όνομα τμήματος)

select *

from DEPTINFO

where Name = “research”

V5: Αύξησε κατά 1 τον αριθμό των Υπαλλήλων στο Τμήμα Έρευνας

– Αυτή η ενημέρωση ΔΕΝ επιτρέπεται (Γιατί ?)

Page 11: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 11

Σχεσιακές Όψεις - ΕκτέλεσηΣχεσιακές Όψεις - Εκτέλεση

Όπως ήδη ειπώθηκε, το σύστημα μεταφράζει προσβάσεις (ενημερώσεις) σε Όψεις ΣΕ προσβάσεις (ενημερώσεις) σε Σχέσεις Βάσης. ΠΩΣ ΜΠΟΡΕΙ ΝΑ ΓΙΝΕΙ ΑΥΤΌ ?

– ΧΑΖΗ Προσπάθεια 1: Δημιούργησε (Materialize) την Όψη (προσωρινός πίνακας) και εκτέλεσε το query σε αυτήν.

– ΧΑΖΗ Προσπάθεια 2: Κράτα συνεχώς ενήμερη την Όψη -- δηλαδή, κράτησέ την δημιουργημένη (ονομάζεται, snapshot) και όποτε σχετικές ενημερώσεις γίνονται στις Σχέσεις Βάσης, τότε πέρασε αυτές και στην Όψη. Εκτέλεσε το query στο snapshot.

– ΣΩΣΤΗ Προσπάθεια: Άλλαξε το query αντικαθιστώντας την Όψη με το query σε Σχέσεις Βάσης που την ορίζει, και εκτέλεσε το query σε αυτές τις Σχέσεις Βάσης.

Page 12: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 12

Σχεσιακές Όψεις – Παραδείγματα ΕκτέλεσηςΣχεσιακές Όψεις – Παραδείγματα Εκτέλεσης

Για παράδειγμα, το query στην Όψη BIGSHARKS:

select Name, Address

from BIGSHARKS

where DNumber = 5

Τροποποιείται ανάλογα και το παρακάτω query εκτελείται:

select Name, Address

from EMPLOYEE

where Salary > 50000 and BirthDate > 31.12.65

and DNumber = 5

Page 13: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 13

Σχεσιακές Όψεις - ΕνημερώσειςΣχεσιακές Όψεις - Ενημερώσεις

Γενικά, υπάρχουν σοβαροί περιορισμοί στις ενημερώσεις Μια ενημέρωση Όψης είναι αναμφίβολη αν μια μοναδική

ενημέρωση στις Σχέσεις Βάσης μπορεί να εκπληρώσει το ζητούμενο αποτέλεσμα στην Όψη

ΠΑΡΑΤΗΡΗΣΕΙΣ:– Μια όψη που ορίζεται σε μια (ακριβώς) Σχέση Βάσης είναι

ενημερώσιμη αν τα γνωρίσματα της Όψης περιέχουν το Κύριο Κλειδί

– Όψεις που ορίζονται σε πολλαπλές Όψεις είναι γενικά μη-ενημερώσιμες

– Όψεις που περιέχουν Συναθροιστικές Συναρτήσεις είναι σίγουρα μη-ενημερώσιμες

Οι Ενημερώσεις των Όψεων παραμένουν ένα ενδιαφέρον ανοικτό ερευνητικό θέμα / πρόβλημα (π.χ., Data Warehouses)

Page 14: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 14

Σχεσιακές Όψεις - ΣχόλιαΣχεσιακές Όψεις - Σχόλια

To “WITH CHECK OPTION” χρησιμοποιείται σε ενημερώσιμες όψεις για να αντιμετωπίσει το πρόβλημα των γραμμών που εξαφανίζονται (vanishing rows)

Για παράδειγμα, θεωρήστε την Όψη:CREATE VIEW V AS select * from R where A = “X”

Έστω η ενημέρωση:

UPDATE V set A = “Y”

Η ενημέρωση θα προχωρήσει κανονικά, αλλά οι πλειάδες που ήταν πριν προσβάσιμες στην V θα εξαφανιστούν! (προφανώς, δεν θα ικανοποιούν πλέον την συνθήκη της WHERE-πρότασης)

Οι Όψεις χρησιμοποιούνται (επίσης) ως μηχανισμοί ασφάλειας και δικαιοδοσίας

Page 15: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 15

Περιορισμοί ΑκεραιότηταςΠεριορισμοί Ακεραιότητας

Το Σχεσιακό Μοντέλο υποστηρίζει 6 είδη περιορισμών ακεραιότητας: ΚΛΕΙΔΙ (KEY), ΑΚΕΡΑΙΟΤΗΤΑ ΟΝΤΟΤΗΤΑΣ (ENTITY INTEGRITY), ΑΝΑΦΟΡΙΚΗ ΑΚΕΡΑΙΟΤΗΤΑ (REFERENTIAL INTEGRITY.) ΠΕΔΙΟ ΤΙΜΩΝ (DOMAIN), ΣΤΗΛΩΝ (COLUMN) και

ΟΡΙΖΟΜΕΝΩΝ ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ (USER-DEFINED) Τα περισσότερα εμπορικά DBMS δεν υποστηρίζουν όλους τους

περιορισμούς ακεραιότητας (υποστήριξη εδώ σημαίνει ότι αν μια ενημέρωση καταστρατηγεί έναν περιορισμό τότε το DBMS δεν επιτρέπει την εκτέλεσή του)

Έχουμε ήδη μιλήσει για τον προσδιορισμό των έμφυτων στο μοντέλο περιορισμών, (κλειδί, ακεραιότητα οντότητας, αναφορική ακεραιότητα. Οι άλλοι 3 περιορισμοί προσδιορίζονται ρητά.

Μοντέρνα DBMS επιβάλουν όλο και περισσότερους δομικούς περιορισμούς, με καλό παράδειγμα την: Access της Microsoft.

Page 16: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 16

Περιορισμοί στο Σχεσιακό ΜοντέλοΠεριορισμοί στο Σχεσιακό Μοντέλο

Όταν υποστηρίζεται ένας περιορισμός ακεραιότητας, αρκετές ενέργειες πρέπει να γίνουν από το DBMS. Αυτές είναι, η διαδοχική τροποποίηση (cascade delete) και η διαδοχική ενημέρωση (cascade update.)

Μερικά DBMSs υποστηρίζουν άμεσα τα παραπάνω (Access) Άλλα DBMSs απαιτούν από τον χρήστη να γράψει triggers

(διαδικασίες) για την υποστήριξη αυτών (SQL Server) Περιορισμοί Στηλών και Πεδίων υποστηρίζονται μερικώς

(ενίοτε και από strong-typing ή άλλους ισχυρούς μηχανισμούς) Περιορισμοί που ορίζονται από τον Χρήστη έχουν περιληφθεί

σε νεώτερες εκδόσεις της τυποποίησης της SQL (SQL-92) με ASSERTIONS (ειδικοί κανόνες)

Page 17: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 17

Assertions -- ΠαραδείγματαAssertions -- Παραδείγματα

Κάθε Υπάλληλος είναι είτε Άνδρας ή ΓυναίκαASSERT gender ON EMPLOYEE: Sex=“m” OR Sex=“f”

Οι Μισθοί πρέπει να ξεπερνούν το 1,000,000ASSERT 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 )

Page 18: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 18

Εμφύτευση της SQL σε Γλώσσα ΠρογραμματισμούΕμφύτευση της SQL σε Γλώσσα Προγραμματισμού

Εντολές DML συχνά εμφυτεύονται σε προγράμματα γλώσσας προγραμματισμού (host)

Η εμφυτευμένη SQL εντολή διακρίνεται από εντολές της Γλώσσας Προγραμματισμού με ειδικό τρόπο, π.χ. με πρόθεμα

Υπάρχουν δυο τρόποι εμφύτευσης:

1.- Επέκταση της Γλώσσας Προγραμματισμού (αλλαγή του Compiler)

Ενδεικτικά, RIGEL, MODULA-R, Gemstone, Orion, κλπ.)

Ονομάζονται database programming languages

2.- Χρήση ενός προ-επεξεργαστή της Γλώσσας για τις εντολές DML

Ο προ-επεξεργαστής αντικαθιστά τις εντολές DML με κλήσεις στην host γλώσσα, οι οποίες eεκτελούνται

Page 19: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 19

Εμφύτευση της SQLΕμφύτευση της SQL

SQL εντολές καλούνται μέσα από ένα πρόγραμμα μιας host γλώσσας (π.χ., C ή COBOL)– Οι εντολές της SQL μπορούν να αναφέρονται σε host

μεταβλητές – Πρέπει να περιλαμβάνουν μια εντολή για σύνδεσμο με την

σωστή βάση.

– Οι SQL Σχέσεις είναι σύνολα εγγραφών, χωρίς προκαθορισμένο (a priori) όριο στον αριθμό των εγγραφών. Δεν υπάρχουν τέτοιες δομές στην C !

– Για να αντιμετωπίσει αυτή την δυσκολία η SQL υποστηρίζει ένα μηχανισμό που λέγεται cursor

Page 20: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 20

CursorsCursors

Οι δυνατότητες που προσφέρονται για τον CURSOR είναι– Δηλώνεται για μια σχέση ή ένα query που είναι γεννήτορας

μιας σχέσης.– Μπορεί να ανοίξει (open) έναν cursor, και διαδοχικά να φέρει

(fetch) πλειάδες, μετά να μετακινήσει (move) τον cursor, μέχρις ότου όλες οι πλειάδες ανακληθούν

– Μπορεί με τη χρήση του ORDER BY να ελέγχει τη σειρά ανάκλησης των πλειάδων

» Πεδία στην ORDER BY πρόταση πρέπει να παρουσιάζονται και στην SELECT πρόταση.

– Μπορεί να διαγράφει / τροποποιεί πλειάδες που δείχνονται από τον cursor

Page 21: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 21

Ο Cursor που παίρνει ονόματα ναυτικών που έχουν κρατήσει ένα κόκκινο σκάφος, σε

αλφαβητική σειρά

Ο Cursor που παίρνει ονόματα ναυτικών που έχουν κρατήσει ένα κόκκινο σκάφος, σε

αλφαβητική σειρά

DECLARE sinfo CURSOR FORSELECT S.sname

FROM Sailors S, Boats B, Reserves RWHERE 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 πρόταση! (Γιατί ?)

Page 22: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 22

Εμφύτευση της SQL σε C -- ΠαράδειγμαΕμφύτευση της SQL σε C -- Παράδειγμα

char SQLSTATE[6];EXEC SQL BEGIN DECLARE SECTIONchar c_sname[20]; short c_minrating; float c_age;EXEC SQL END DECLARE SECTIONc_minrating = random();EXEC SQL DECLARE sinfo CURSOR FOR

SELECT S.sname, S.age FROM Sailors SWHERE S.rating > :c_minratingORDER 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;

Page 23: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 23

API Βάσης Δεδομένων: Εναλλακτικός της Εμφύτευσης τρόπος πρόσβασης

API Βάσης Δεδομένων: Εναλλακτικός της Εμφύτευσης τρόπος πρόσβασης

Αντί να αλλάζει ο compiler, προστίθεται μια βιβλιοθήκη με Κλήσεις στη Βάση Δεδομένων (API)

Application Programming Interface– Ειδικές Διαδικασίες / Αντικείμενα– Περνά τις SQL εντολές σαν character strings από τη γλώσσα και

παρουσιάζει τα αποτελέσματα με φιλικό (για τη γλώσσα) τρόπο– Το ODBC της Microsoft έχει γίνει το C/C++ standard στα Windows– Το JDBC της SUN είναι το ανάλογο για τη Java– Ανεξάρτητα του DBMS

» Ένας “οδηγός” παγιδεύει τις κλήσεις και τις μεταφράζει σε κώδικα για το DBMS

» Η Βάση μπορεί να είναι στο Δίκτυο

Page 24: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 24

SQL API στη Java (JDBC)SQL API στη Java (JDBC)

Connection con = // connect DriverManager.getConnection(url, ”login", ”pass"); Statement stmt = con.createStatement(); // set up stmtString 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 ());}

Page 25: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 25

Disadvantages of having Host Programming Languages

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

Page 26: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 26

Shortcomings of SQLShortcomings 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 ΓΛΩΣΣΑ

Page 27: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 27

Query-by-Example (QBE)Query-by-Example (QBE)

Μια Γλώσσα για ερωταποκρίσεις που αναπτύχθηκε στην IBM (από τον Moshe Zloof) και παρουσιάζεται σε ένα προϊόν (QMF) (που είναι εναλλακτικός τρόπος διεπαφής για το DB2)

Ευκολότερη από την SQL για τον μέσο χρήστη

(ΟΠΤΙΚΗ και ΔΙΣΔΙΑΣΤΑΤΗ) ΚΕΝΤΡΙΚΗ ΙΔΕΑ: Το Σύστημα παρέχει στον χρήστη τη δυνατότητα να

δει το περίγραμμα των Σχέσεων στη Βάση και ο Χρήστης συμπληρώνει τους πίνακες δίνοντας παραδείγματα για το πώς θέλει να είναι η απάντηση

QBE1: Βρες τα ονόματα των Υπαλλήλων στο Τμήμα 4

EMPLOYEE

SSN Name BDate Address Sex Salary SupSSN DNumber

P.__x 4

Page 28: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 28

QBE ΣΥΝΟΨΗQBE ΣΥΝΟΨΗ

Οι Αρχές της Γλώσσας– Ο χρήστης δεν απαιτείται να θυμάται τα ονόματα των γνωρισμάτων και

των σχέσεων

– Στην διατύπωση της ερωταπόκρισης, δεν απαιτείται να τηρούνται ανελαστικοί κανόνες

– Στηρίζεται στον σχεσιακό λογισμό πλειάδων (μεταβλητές είναι οι στήλες)

– Σχεσιακά πλήρης διατύπωση, και κάτι παραπάνω, μια και εκφράζεται και transitive closure

Πως Λειτουργεί– Σύμβολα με “_” να προηγείται, είναι ΜΕΤΑΒΛΗΤΕΣ

– Σύμβολα χωρίς “_” να προηγείται είναι ΣΤΑΘΕΡΕΣ ΤΙΜΕΣ (υποδηλώνουν μια συνθήκη για επιλογή - equality selection-condition)

– Το πρόσημο “P.” χρησιμοποιείται για να υποδειχθεί ποια γνωρίσματα θα τυπωθούν (υποδηλώνει μια προβολή - projection)

Page 29: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 29

QBE Σύνοψη – Η διαδικασίαQBE Σύνοψη – Η διαδικασία

Διαδικασία ερωταπόκρισης – Πρώτα, ο χρήστης διαλέγει τις σχέσεις (πίνακες) που χρειάζεται για το query

– Παρουσιάζονται τα περιγράμματα των πινάκων που διαλέχτηκαν

– Ο χρήστης «πηγαίνει» στις κατάλληλες στήλες (με ειδικά πλήκτρα)

– Τιμές-παραδείγματα (μεταβλητές), σταθερές, κλπ., δακτυλογραφούνται

– Άλλοι συγκριτικοί τελεστές (πέραν της ισότητας – που είναι αυτόματη για σταθερές τιμές) πρέπει να δακτυλογραφηθούν (όπως, >, <, κλπ.)

– πιο πολύπλοκες συνθήκες μπαίνουν σε ένα κουτί-συνθηκών (condition box)

– Συνθήκες στην ίδια σειρά υποδηλώνουν το Boolean AND

– Συνθήκες σε διαφορετικές σειρές υποδηλώνουν το Boolean OR

– Η άρνηση (negation - Boolean NOT) προσδιορίζεται με το σύμβολο “ “

– Οι Συνενώσεις (JOINS) εκφράζονται με τη χρήση κοινών παραδειγματικών τιμών σε πολλαπλούς πίνακες

Page 30: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 30

QBE – Παραδείγματα (1)QBE – Παραδείγματα (1)

QBE2: Βρες τα ονόματα των Υπαλλήλων που εργάζονται σε ένα Τμήμα που έχει μάνατζερ διαφορετικό από αυτόν με αριθμό 3334

SSN Name BDate Address Sex Salary SupSSN DNumber

P.__x no

DNumber DName MgrSSN MgrSD

no

EMPLOYEE

DEPARTMENT

Page 31: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 31

QBE – Παραδείγματα (2)QBE – Παραδείγματα (2)

QBE3: Βρες τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο των 300,000 και εργάζονται στο Τμήμα 5

QBE4: Βρες τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο των 300,000 ή εργάζονται στο Τμήμα 5

SSN Name BDate Address Sex Salary SupSSN DNumber

P.__x

>300000

5

SSN Name BDate Address Sex Salary SupSSN DNumber

P. x

5

P. y

>300000

Page 32: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 32

QBE – Παραδείγματα (3)QBE – Παραδείγματα (3)

QBE5: Βρες ονόματα και διευθύνσεις Υπαλλήλων του Τμήματος 4 που κερδίζουν περισσότερα από κάποιον που εργάζεται στο Τμήμα 5

SSN Name BDate Address Sex Salary SupSSN DNumber

P. tom P. kifis 10 4

20 5

EMPLOYEE

CONDITION BOX __10 > __20

Page 33: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 33

QBE – Παραδείγματα (4)QBE – Παραδείγματα (4)

QBE6: Βρες τα ονόματα των Υπαλλήλων που έχουν μισθό μεγαλύτερο από τον μισθό του μάνατζερ του Τμήματός των

SSN Name BDate Address Sex Salary SupSSN DNumber

P. tom 10 6

4444 __

15

DNumber DName MgrSSN MgrSD

6 __10>__15

CONDITION BOXDEPARTMENT

EMPLOYEE

Page 34: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 34

QBE – Παραδείγματα (5)QBE – Παραδείγματα (5)

QBE7: Βρες όλους τους Εξαρτώμενους για Υπαλλήλους που έχουν ένα Εξαρτώμενο γεννηθέντα το 1972 ενώ δεν έχουν κανένα Εξαρτώμενο που γεννήθηκε μετά το 1975

ESSN Name Sex BDate Relation

44

44 1972

44 <1975

DEPENDENT

P.

Page 35: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 35

QBE – Παραδείγματα (6)QBE – Παραδείγματα (6)

QBE8: Βρες το άθροισμα των μισθών όλων τον Υπαλλήλων

EMPLOYEE

QBE9: Εισαγωγή ενός νέου Υπαλλήλου

EMPLOYEE

SSN Name BDate Address Sex Salary SupSSN DNumber

P.SUM.ALL. x

SSN Name BDate Address Sex Salary SupSSN DNumber

6669 thomas 8.2.65 ekali m 60000 9876 4I.

Page 36: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 36

QBE – Παραδείγματα (7)QBE – Παραδείγματα (7)

QBE10: Δώσε αύξηση μισθού 15% για όλους τους Υπαλλήλους του Τμήματος 5

SSN Name BDate Address Sex Salary SupSSN DNumber

44 s 5

44 __

s*1.15

EMPLOYEE

U.

Page 37: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 37

Μια ματιά στην MS AccessΜια ματιά στην MS Access

Page 38: Κεφάλαιο  5

Ι.Β. – Σχεσιακές Γλώσσες – Εμφύτευση / DDL 38

ΚλείνονταςΚλείνοντας

Η QBE είναι μια κομψή και φιλική προς το χρήστη γλώσσα που βασίζεται στο σχεσιακό λογισμό πεδίου

Είναι ιδιαίτερα εκφραστική (σχεσιακά πλήρης, αν και οι ενημερώσεις ληφθούν υπόψη).

Απλές ερωταποκρίσεις είναι εξαιρετικά εύκολο να εκφραστούν στην QBE, με ένα ελάχιστο συντακτικό που πρέπει κανείς να θυμάται

Η QBE Έχει επηρεάσει σε μεγάλο βαθμό τις γραφικές διευκολύνσεις για queries που σήμερα προσφέρονται σε πολλά προϊόντα, περιλαμβανομένης και της Microsoft Access.