ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Σχεσιακός Ορισµός Μαθ. #12
Η κυρίως διαφορά µεταξύ «σχεσιακού λογισµού» και «σχεσιακής άλγεβρας» είναι η ακόλουθη ηλωτική vs. ιαδικαστική Τι vs. Πως Η εκφραστική δύναµη των δυο γλωσσών είναι η ίδια Οποιαδήποτε query η οποία εκφράζεται στον σχεσιακό λογισµό µπορεί να εκφραστεί στην σχεσιακή άλγεβρα. Σχεσιακή πλήρης γλώσσα Μιαγλώσσαεπερωτήσεωνµε την εκφραστική δύναµη του σχεσιακού λογισµού Οι πιο πολλές σχεσιακές γλώσσες επερωτήσεων είναι «σχεσιακά πλήρης» αλλά µε µεγαλύτερη εκφραστική δύναµη από τον σχεσιακό λογισµό και την σχεσιακή άλγεβρα λόγω των επιπλέον πράξεων όπως οι συναρτήσεις συναθροίσεων
Ο σχεσιακός λογισµός είναι βασισµένος στον κατηγορηµατικό λογισµό Υπάρχουν δυο γλώσσες σχεσιακού λογισµού Λογισµός πλειάδων (tuple calculus) Λογισµός πεδίου τιµών (domain calculus)
Σχεσιακός Λογισµός πλειάδων (tuple calculus) Ο σχεσιακός λογισµός πλειάδων είναι βασισµένος στην έννοια «µεταβλητών τύπου πλειάδων» (tuple variables) Κάθε µεταβλητή τύπου πλειάδα διατρέχει (έχει πεδίο τιµών) µια σχέση Μια απλή έκφραση σχεσιακού λογισµού πλειάδων: { t / COND (t) } t είναι «µεταβλητή τύπου πλειάδα» COND (t) είναι µια συνθήκη που περιέχει το t
Παράδειγµα Βρες όλους τους υπαλλήλους µε µισθό πάνω από $50,000 { t / EMPLOYEE(t) and t.salary > 50000 } { t / ( x) EMPLOYEE (x) and x.salary > 50000 and t=x} Η συνθήκη EMPLOYEE(t) καθορίζει τη σχέση EMPLOYEE σαν το πεδίο τιµών το οποίο διατρέχει η µεταβλητή t t.salary αναφέρεται στην µεταβλητή SALARY της πλειάδας t H ισοδύναµη SQL query SELECT * FROM EMPLOYEE t WHERE t.salary > 50000
Απλά µια έκφραση λογισµού πλειάδων περιέχει Για κάθε µεταβλητή πλειάδων t, την σχέση R που διατρέχει. Ορίζεται µε µια συνθήκη της µορφής R(t). Αντιστοιχεί στον FROM όρο της SQL Μια συνθήκη επιλογής για τη διαλογή των διαφόρων πλειάδων Αντιστοιχεί στον WHERE όρο της SQL Ένα σύνολο από στοιχεία της µεταβλητής τύπου πλειάδας τα οποία είναι να ανακτηθούν Αντιστοιχεί στον SELECT όρο της SQL
Παράδειγµα Βρες την ηµεροµηνία γεννήσεως και διεύθυνση του υπαλλήλου µεόνοµα John B. Smith {t.bdate, t.address / EMPLOYEE(t) and t.fname= John and t.minit= B and t.lname= Smith } SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME= JOHN AND MINIT= B AND LNAME= SMITH
Τυπικός ορισµόςτουσχεσιακούλογισµού {t1, t2,, tn / COND (t1, t2,, tn+m)} t1,, tn+m είναι µεταβλητές πλειάδας, όχι κατά ανάγκη µοναδικές COND είναι µια συνθήκη ή φόρµουλα που περιέχει t s και αποτελείται από στοιχεία (atoms) κατηγορηµατικού λογισµού Atoms R(t) όπου R είναι σχέση και t µια µεταβλητή πλειάδας t.a op. s.b όπου t, s είναι µεταβλητές πλειάδας, οp είναι τελεστής συγκρίσεως, Α, Β είναι πεδία ορισµού του t και s t.a op. c όπου t είναι µεταβλητές πλειάδας, οp είναι τελεστής συγκρίσεως, Α είναιπεδίαορισµού του t και c είναι µια σταθερή
Μεταβλητή πλειάδας είναι ελεύθερη (free, καθολική) ήδεσµευµένη (bound, τοπική) Μια φόρµουλα (συνθήκη) Κάθε άτοµο είναιφόρµουλα Όλα t.v σε ένα στοιχείο (φόρµουλα) είναι ελεύθερα Εάν Φ1 και Φ2 είναι φόρµουλες τότε είναι και (Φ1 AND Φ2) (Φ1 OR Φ2) NOT (Φ1) NOT (Φ2) Μεταβλητές πλειάδας είναι ελεύθερη/δεσµευµένη στο (...) όπως είναι στα Φ s
Εάν είναι φόρµουλα, τότε είναι και s (Φ) υπαρξιακός ποσοδότης ( σ) δεσµεύει το s στο Φ s (Φ) καθολικός ποσοδότης ( s) δεσµεύει το s στο Φ Χρήσης παρενθέσεων για µάζεµα Τίποτε άλλο Μεταβλητή πλειάδας είναι ελεύθερη (free, καθολική) ήδεσµευµένη (bound, τοπική)
Query 1 Παράδειγµα Βρες το όνοµα και διεύθυνση του υπαλλήλου που δουλεύει στο Research τµήµα (τµήµα έρευνας)
Λύση 1 {t.fname, t.lname, t.address / EMPLOYEE(t) and ( d) (DEPARTMENT(d) and d.name= Research and d.number=t.dno)} SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME= RESEARCH AND DNUMBER=DNO
Query 2 Για κάθε υπάλληλο βρες το όνοµα και επώνυµο καθώς και το όνοµα και επώνυµο τουsupervisor του. Query 3 Βρες το όνοµα κάθε υπαλλήλου που δουλεύει σε project που ελέγχεται από το τµήµα #5
Query 2 {e.fname, e.lname, s.fname, s.lname / EMPLOYEE(e) and EMPLOYEE(s) and s.ssn=e.essn)) Query 3 {t.fname / EMPLOYEE(t) and ( (x,w) PROJECT(x) WORK_ON(w) t.ssn = w.essn) and x.pnumber = w.pno and x.dnum = 5 )
Μετασχηµατισµός του υπαρξιακού και καθολικού ποσοδότου Είναι δυνατό να µετασχηµατίσεις ένα υπαρξιακό ποσοδότη σε ένα καθολικό ποσοδότη και αντιστρόφως 1. Μετάφρασε τον ποσοδότη στον άλλο µε άρνηση 2. AND και OR αντικαθιστούν το ένα το άλλο 3. Μια αρνητική φόρµουλα γίνεται µη αρνητική 4. Μια θετική φόρµουλα γίνεται αρνητική Κάποιες ειδικές µορφές ( x)(p(x)) ( x)(not(p(x))) ( x)(p(x)) not ( x)(not(p(x))) ( x)(p(x) and Q(x)) ( x)(not (P(x) or not Q(x))
Παράδειγµα Query 4 Βρες το όνοµα κάθε υπαλλήλου που δεν έχει εξαρτώµενα {e.fname, e.lname / EMPLOYEE(e) and (not ( d) (DEPENDENT(d) and e.ssn=d.essn)) Χρησιµοποιώντας τους προηγούµενους κανόνες {e.fname, e.lname / EMPLOYEE(e) and (( d) (not((dependent(d)) or (( d) (DEPENDENT(d) and not (e.ssn=d.essn))))}