Βάσεις Δεδομένων (Databases) ΕΠΛ 342 Χειμερινό Εξάμηνο 2011 Λογισμός πεδίου τιμών (domain calculus) Διδάσκοντες Καθηγητές Γιώργος Σαμάρας (ΧΩΔ01 109)
Σχεσιακό Μοντέλο Ο λογισμός πεδίου τιμών διαφέρει από τον σχεσιακό λογισμό στο είδος των μεταβλητών που χρησιμοποιούνται στις φόρμουλες Αντί οι μεταβλητές να διατρέχουν πλειάδες, διατρέχουν πεδία τιμών των στηλών μιας πλειάδας Για να δημιουργήσουμε μια σχέση βαθμού n για το αποτέλεσμα μιας ερώτησης, πρέπει να έχουμε n μεταβλητές πεδίου τιμών Μια για κάθε γνώρισμα της σχέσης Υπάρχει μια βιομηχανική σχεσιακή γλώσσα, QBE, που κάπως σχετίζεται με τον «λογισμό πεδίου τιμών»
Σχεσιακό Μοντέλο Τυπικός ορισμός του σχεσιακού λογισμού {x1, x2,, xn / COND (x1, x2,, xn+m)} x1,, xn+m είναι μεταβλητές πεδίου τιμών, που διατρέχουν «πεδία τιμών» όχι κατά ανάγκη μοναδικά COND είναι μια συνθήκη ή φόρμουλα που περιέχει x s και αποτελείται από στοιχεία (atoms) κατηγορηματικού λογισμού Atoms R(x1, x2,, xj) όπου R είναι σχέση βαθμού j και κάθε xi, 1 <= j, είναι μεταβλητή πεδίου τιμών R(x1, x2,, xj) (x1, x2,, xj) R xi op. xj όπου xi, xj, είναι μεταβλητές πεδίου τιμών, op τελεστής συγκρίσεως Xi op. c όπου xi είναι μεταβλητές πεδίου τιμών, op τελεστής συγκρίσεως, c μια σταθερή
Σχεσιακό Μοντέλο Μια φόρμουλα (συνθήκη) Κάθε άτομο είναι φόρμουλα Όλα τα xi σε ένα στοιχείο (φόρμουλα) είναι ελεύθερα Εάν Φ1 και Φ2 είναι φόρμουλες τότε είναι και (Φ1 AND Φ2) (Φ1 OR Φ2) NOT (Φ1) NOT (Φ2) Εάν Φ είναι φόρμουλα, τότε είναι και, (Φ) υπαρξιακός ποσοδότης (Φ) καθολικός ποσοδότης Χρήση παρενθέσεων για μάζεμα Τίποτε άλλο
Παράδειγμα Βρες την ημερομηνία γεννήσεως και διεύθυνση του υπαλλήλου με όνομα John B. Smith Tuple calculus {t.bdate, t.address / EMPLOYEE(t) and t.fname= John and t.minit= B and t.lname= Smith } Domain calculus {uv / ( q) ( r) ( s) EMPLOYEE (qrstuvwxyz) and q= John and r= B and s= Smith Χρειαζόμαστε 10 μεταβλητές για τη σχέση EMPLOYEE, μια για κάθε πεδίο τιμών q, r, s είναι δεσμευμένες μέσο του υπαρξιακού ποσοδότη, οι υπόλοιπες είναι ελεύθερες Ποσοδοτούμε μόνο αυτές τις μεταβλητές που λαμβάνουν μέρος στη συνθήκη
Παράδειγμα Βρες όλους τους υπαλλήλους με μισθό πάνω από $50,000 Tuple calculus {t / EMPLOYEE(t) and t.salary > 50000} Domain calculus {qrstuvwxyz / ( x) EMPLOYEE (qrstuvwxyz) and x>50000}
Παράδειγμα Query 1 Βρες το όνομα και διεύθυνση του υπαλλήλου που δουλεύει στο Research τμήμα Tuple calculus {t.fname, t.lname, t.address / EMPLOYEE(t) and ( d)(department(d) and d.dname= Research and d.dnumber=t.dno)} Domain calculus {qsv / ( z) EMPLOYEE (qrstuvwxyz) ( I) ( m) DEPARTMENT(Imno) and I= Research m=z)) } m=z είναι μια συνθήκη συνδέσεως (σχέσεως) I= Research είναι η συνθήκη επιλογής
Παράδειγμα Query Βρες όλους τους manager που έχουν τουλάχιστο ένα εξαρτώμενο.
Λύση Tuple calculus {t / EMPLOYEE(t) and ( d) (DEPARTMENT(d) and ( r) DEPENDENT(r) and t.ssn=d.mgrssn and t.ssn=r.essn))} Domain calculus {qs / ( t) EMPLOYEE (qrstuvwxyz) and ( j) (DEPARTMENT(hijk) and (( l) DEPENDENT(lmno) and t=j and t=l))))}
Παράδειγμα Query 2 Για κάθε υπάλληλο βρες το όνομα και επώνυμο καθώς και το όνομα και επώνυμο του supervisor του. Query 3 Βρες το όνομα και το επίθετο κάθε υπαλλήλου που δουλεύει σε project που ελέγχεται από το τμήμα #5.
Λύση Query 2 {qs ( t)employee(qrstuvwxyz) and t = y ( y)employee(qrsyuvwxyz) and!!!!!!!!!!11) Query 3 {qs ( t)employee(qrstuvwxyz) and ( a)department(abcd) and b = 5 and z = a}
Παράδειγμα Query 4 Βρες το όνομα κάθε υπαλλήλου που δεν έχει εξαρτώμενα.
Λύση Domain calculus { qs / ( t) (EMPLOYEE(qrstuvwxyz) and (not ( l) (DEPENDENT(lmno) and t=l)))} Χρησιμοποιώντας τον καθολικό ποσοδότη {qs / ( t) (EMPLOYEE(qrstuvwxyz) and (( l) ((not (DEPENDENT(lmno)) or (DEPENDENT(lmno) and not (t=l)))))}
Λύση {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 not (e.ssn=d.essn))))}
QUEL & QBE Γλώσσες QUEL είναι η database γλώσσα της Ingres είναι βασισμένη στον σχεσιακό λογισμό QBE (query by example) χρησιμοποιείται από τη βάση δεδομένων DB2 της IBM και είναι κάπως βασισμένη στον λογισμό πεδίου τιμών
Η Γλώσσα QUEL H γλώσσα επερωτήσεων της Ingres Μπορεί να χρησιμοποιηθεί εμπεδωμένη σε μια γλώσσα προγραμματισμού η απευθείας (interactively) Έχει παρόμοια εκφραστική δύναμη όπως η SQL Είναι κυρίως βασισμένη στον σχεσιακό λογισμό Δηλωτική γλώσσα Δηλώνεις το «τι» και όχι το «πως»
Η Γλώσσα QUEL Η QUEL έχει μια βασική εντολή για την ανάκτηση πληροφοριών από τη βάση δεδομένων Την RETRIEVE WHERE ενότητα (RRW) Αποτελείται από τους δυο όρους RETRIEVE και WHERE και έχει την ακόλουθη μορφή RANGE OF <λίστα μεταβλητών πλειάδων> RETRIEVE <λίστα γνωρισμάτων> WHERE <συνθήκη> Όπου <λίστα γνωρισμάτων> είναι η λίστα των πεδίων των οποίων οι τιμές θα ανακτηθούν από την ερώτηση (query) <συνθήκη> είναι η λογική έκφραση η οποία αναγνωρίζει τις πλειάδες που θα ανακτηθούν από την ερώτηση RANGE είναι μια εντολή της QUEL που χρησιμοποιείται για ορισμό μεταβλητών τύπου πλειάδας
Παράδειγμα (query 1) Βρες την ημερομηνία γεννήσεως και διεύθυνση του υπαλλήλου με όνομα John B. Smith Tuple calculus {t.bdate, t.address / EMPLOYEE(t) and t.fname= John and t.minit= B and t.lname= Smith } QUEL RANGE OF t IS EMPLOYEE RETRIEVE (t.bdate, t.address) WHERE t.fname= JOHN AND t.minit= B AND t.lname= SMITH RETRIEVE (EMPLOYEE.BDATE, EMPLOYEE.ADDRESS) WHERE EMPLOYEE.FNAME= JOHN AND EMPLOYEE.MINIT= B AND EMPLOYEE.LNAME= SMITH
Παράδειγμα Query 2 Βρες το όνομα και διεύθυνση του υπαλλήλου που δουλεύει στο Research τμήμα Tuple calculus QUEL RANGE OF t IS EMPLOYEE d IS DEPARTMENT RETRIEVE (t.fname, t.lname, t.address) WHERE d.dname= RESEARCH AND d.dumber=t.dno) Στην QUEL κάθε μεταβλητή που εμφανίζεται στην WHERE-όρο και δεν εμφανίζεται στον RETRIEVE-όρο είναι θεωρητικά καθορισμένη με τον υπαρξιακό ποσοδότη
Παράδειγμα Query 3 Δωσε το ονομα και το επιθετο του υπαλληλου που εχει Supervisor. Query 4 Δωσε το ονομα και το επιθετο του υπαλληλου που εργαζετε στο τμημα 5.
Λύση Query 3 RANGE OF t IS EMPLOYEE d IS EMPLOYEE RETRIEVE (t.fname, t.lname, d.fname, d.lname) WHERE t.ssn= d.ssn Query 4 RANGE OF t IS EMPLOYEE d IS DEPARTMENT RETRIEVE (t.fname, t.lname) WHERE d.dnumber= 5 AND t.dno= d.dumber)
Η Γλώσσα QBE Αναπτύχθηκε στα ερευνητικά κέντρα της IBM Είναι ένα ΙΒΜ προϊών προαιρετικό για το DB2 Η ερώτηση δημιουργείται με το γέμισμα καλουπιών σχέσεων τα οποία απεικονίζονται στην οθόνη Είναι βασισμένη στον λογισμό πεδίου τιμών
Τhe relational schema of the COMPANY database as it may be displayed by QBE
Ανάκτηση δεδομένων στην QBE Ανάκτηση πληροφοριών γίνεται με το γέμισμα κάποιον στηλών του περιγράμματος της σχέσης Οι σταθερές τιμές γράφονται όπως είναι (δεσμευμένες μεταβλητές) Τιμές παράδειγμα εμφανίζονται με «_» (_x, _ssn) H προσήμανση «Ρ» χρησιμοποιείται για να δείξει ότι η τιμή μιας στήλης θα ανακτηθεί Η συνθήκη R(x1, x2,, xj) και ο υπαρξιακός ποσοδότης εμφανίζονται έμμεσα στην QBE, επειδή το επίγραμμα αντιστοιχεί στη σχέση R που χρησιμοποιείται Σκεφτείτε κάθε στήλη σε ένα επίγραμμα της QBE σαν μια έμμεση μεταβλητή πεδίου τιμών
QBE example: find the birthday and address of the employee whose name is John B. Smith
List the social security number of employees who work more than 20 hours per week on project number 1 List the social security number of employees who work more than 20 hours per week on project number 1 or 2
Retrieve the name and address of all employees who work for the Research department {qsv ( z) (EMPLOYEE(qrstuvwxyz) and ( l)( m) (DEPARTMENT(lmno) and l= Research and m=z))}