Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών ΗΥ-562 Προχωρημένα Θέματα Βάσεων Δεδομένων Βασίλης Χριστοφίδης Ονοματεπώνυμο: Αριθμός Μητρώου: Άσκηση 1 16 μονάδες Τελική Εξέταση 3 ώρες Ημερομηνία: 02 Ιουλίου 2004 Υποθέτουμε ότι το παρακάτω αντικειμενοστραφές σχήμα αναπαριστά πληροφορία σχετική με τους πελάτες τράπεζας. class Customer { String name; ; Integer ssno; setacount accounts; class Account { Integer acctno; real balance; setcustomer owners; settransaction transactions; ; IsSavings:boolean; class SavingsAccount extends Account { float interestrate; ; class Transaction { Integer tid; Account from; Account to; real amount; Date date; ; Οι ρίζες διατήρησης των δεδομένων persistent roots είναι: name Customers: setcustomer, που περιέχει το σύνολο όλων των πελατών, και name Accounts: setaccount, που περιέχει το σύνολο όλων των λογαριασμών.
Το σχήμα περιγράφεται παρακάτω: Κάθε πελάτης έχει ένα ΑΦΜ ssno κλειδί, ένα όνομα και τουλάχιστον έναν λογαριασμό. Κάθε λογαριασμός έχει έναν αριθμό acctno κλειδί, το τρέχον υπόλοιπο, τουλάχιστον ένα ιδιοκτήτη και ένα σύνολο από προηγούμενες συναλλαγές που σχετίζονται με αυτόν τον λογαριασμό. Για ευκολία θεωρούμε ότι φυλάσσονται ΟΛΕΣ οι συναλλαγές που σχετίζονται με αυτόν τον λογαριασμό. Στο αντικείμενο μίας συναλλαγής αποθηκεύεται πληροφορία σχετικά με την ταυτότητα της συναλλαγής tid κλειδί, τον λογαριασμό αφετηρίας και προορισμού, το μεταφερόμενο χρηματικό ποσό το οποίο είναι πάντα θετικό και την ημερομηνία / ώρα της συναλλαγής. Για ευκολία θεωρήστε ότι υπάρχει ένας τύπος δεδομένων Date και επιτρέπονται πράξεις όπως date<='02/07/04'. Μια υποκλάση των λογαριασμών είναι οι λογαριασμοί ταμιευτηρίου οι οποίοι έχουν ένα σχετιζόμενο επιτόκιο 2.30 σημαίνει επιτόκιο 2.3%. Για να ξεχωρίζουν οι κανονικοί λογαριασμοί από τους λογαριασμούς ταμιευτηρίου υπάρχει διαθέσιμη μια μέθοδος IsSavings. α Δώστε τις αντίστοιχες OQL ερωτήσεις για τις παρακάτω ερωτήσεις 4 βαθμοί ανά ερώτηση: 1. Δώστε όλες τις πληροφορίες για τους πελάτες που διαθέτουν περισσότερους από 5 λογαριασμούς. select *c from c in Customers where countc.accounts>5 2. Δώστε τον αριθμό του λογαριασμού και το επιτόκια για όλους τους λογαριασμούς ταμιευτηρίου. Υπόδειξη: Χρησιμοποιήστε μια μόνο ρίζα διατήρησης των δεδομένων στην βάση. select structacctno:a.acctno, irate:savingsaccounta.interestrate from a in Accounts where a.issavings 3. Υπάρχουν συναλλαγές που να μεταφέρουν χρήματα στον ίδιο λογαριασμό; Δώστε μια ερώτηση που να επιστρέφει μια λογική τιμή boolean σαν απάντηση αυτής της ερώτησης. Υπόδειξη: Χρησιμοποιήστε μια μόνο ρίζα διατήρησης των δεδομένων στην βάση. countselect t from t in flattenselect a.transactions from a in Accounts where t.from=t.to > 0
4. Πόσα χρήματα έχουν αφαιρεθεί από τον λογαριασμό με αριθμό 5 από την 02 Ιουλίου 2004; Ως ανάληψη από ένα λογαριασμό θεωρούμε μόνο την μεταφορά χρημάτων από έναν λογαριασμό σε ένα άλλον. sumselect t.amount from t in flattenselect a.transactions from a in Accounts where a.acctno=5 where t.from.acctno=5 and t.to.acctno<>5 and t.date >= 02/07/04 Άσκηση 2 35 μονάδες Θεωρήστε το παρακάτω αντικειμενοστραφές σχήμα που αναπαριστά πληροφορία σχετικά με κινηματογραφικές ταινίες και ηθοποιούς: class Movie public type { title: string, rating: string, genre: setstring, year: integer, cast: unique setactor class Actor public type { name: string, birthplace: string, acted_in: settuplerole: string, movie: Movie name Movies: unique setmovie name Actors: unique setactor α Διατυπώστε σε φυσική γλώσσα τι επιστρέφουν οι ακόλουθες OQL ερωτήσεις και τον τύπο του αποτελέσματός τους 4 βαθμοί ανά ερώτηση. 1. countflattenselect a.acted_in from a in Actors where a.name='victoria Abril' Print the number of movies that Victoria Abril acted in. Result has type ιnteger 2. select m.title from m in Movies where 'comedy' in m.genre Print the titles of all comedies. Result has type setstring
3. select structtitle:m.title, cast: select struct name: a.name, role: select r.role from r in a.acted_in where r.movie=m from a in m.cast from m in Movies For each movie, print the title of the movie and the name and roles of each cast member. Result has type settupletitle: string, cast: settuplename:string, role: setstring. Note that we are allowing a cast member to have multiple roles in a movie. 4. select structyear: m.year, titles: select t.m.title from t in partition from m in Movies group by m.year Print the titles of movies produced by year. Result has type settupleyear:integer, titles: setstring 5. Ξαναγράψτε την παραπάνω ερώτηση σε OQL χωρίς να χρησιμοποιήσετε τον τελεστή group-by. selectstructyear: m.year, titles: select m1.title from m1 in Movies where m1.year=m.year from m in Movies β 10 βαθμοί Θεωρήστε το σχήμα της προηγούμενης ερώτησης. Υποθέστε ότι θέλετε να το αναπαραστήσετε σε XML. Δώστε ένα κατάλληλο DTD χρησιμοποιώντας PCDATA για τους τύπους integer και string. <!DOCTYPE movieschema [ <!ELEMENT movieschema Movie+,Actor+ <!ELEMENT Movie title,rating,genre*,year,cast*> <!ATTLIST Movie id ID #REQUIRED> <!ELEMENT title #PCDATA> <!ELEMENT rating #PCDATA> <!ELEMENT genre #PCDATA> <!ELEMENT year #PCDATA> <!ELEMENT cast EMTPY> <!ATTLIST cast ids IDREFS #REQUIRED> <!ELEMENT Actor name,birthplace,acted_in*> <!ATTLIST Actor id ID #REQUIRED> <!ELEMENT name #PCDATA> <!ELEMENT birthplace #PCDATA> <!ELEMENT acted_in role> <!ATTLIST acted_in movie IDREF> <!ELEMENT role #PCDATA> ]>
γ 5 βαθμοί Υποθέστε ότι οι τίτλοι των ταινιών και τα ονόματα των ηθοποιών είναι μοναδικά. Δώστε ένα σχεσιακό σχήμα που να ανταποκρίνεται στο παραπάνω σχήμα. Movietitle,rating,year Genrestitle,genre Casttitle,name,role Actorname, birthplace Άσκηση 3 27 μονάδες Σκεφτείτε το παρακάτω αντικειμενοστραφές σχήμα για μια βάση δεδομένων που περιέχει πληροφορίες για εργαζόμενους σε μια εταιρία: class Employee { Name: string, Address: tupleline1: string, Line2: string, Line3: string, Postcode: string, Department: Department, Projects: setproject class Department { Name: string, Manager: Employee class Secretary inherits Employee { Boss: Employee class Supervisor inherits Employee { Supervises: setemployee class Project { Name: string, Budget: integer, Leader: Employee α 5 βαθμοί Ζωγραφίστε ένα διάγραμμα σύμφωνα με τις διαλέξεις του μαθήματος που να δείχνει τις συσχετίσεις των κλάσεων.
β 10 βαθμοί Δώστε τις SQL-3 εκφράσεις που υλοποιούν όλες τις κλάσεις του παραπάνω σχήματος σε μια αντικειμενοστραφήςσχεσιακή βάση δεδομένων. create row type AddressType Line1 varchar20, Line2 varchar20, Line3 varchar20, Postcode char4 create row type EmployeeType Name varchar30 not null, Address AddressType, Department refdepartmenttype, Projects setofrefprojecttype create table Employee type EmployeeType create row type SecretaryType under EmployeeType Boss refemployeetype create table Secretary type SecretaryType under Employee
create row type SupervisorType under EmployeeType Supervises setofrefemployeetype create table Supervisor type SupervisorType under Employee create row type ProjectType Name varchar30, Budget integer, Leader refemployeetype create table Project type ProjectType create row type DepartmentType Name varchar30, Manager refemployeetype create table Department type DepartmentType γ Δώστε τις SQL-3 εκφράσεις που απαντούν τις παρακάτω ερωτήσεις στην αντικειμενοστραφής-σχεσιακή βάση δεδομένων που δημιουργήσατε στο προηγούμενο ερώτημα 4 βαθμοί ανά ερώτηση: 1. Ποιο είναι το όνομα του «αρχηγού» του έργου που ονομάζεται «Database Development». SELECT Project->Leader.Name FROM Project WHERE Project.Name = 'Database Development' 2. Ποιο το όνομα και το τμήμα όλων των εργαζομένων που ο ταχυδρομικός τους κώδικας είναι «5006». SELECT Employee.Name, Employee->Department.Name FROM Employee WHERE Employee.Address..Postcode = '5006' 3. Δώστε το όνομα για κάθε έναν εργαζόμενο που δουλεύει στο έργο «Database Development». SELECT Employee.Name FROM Employee WHERE 'Database Development' IN Employee->Projects.Name Άσκηση 4 27 μονάδες Μια αντικειμενοστραφής βάση δεδομένων ορίζει την ακόλουθη κλάση Person σύμφωνα με το πρότυπο ODMG ODL: class Person
extent people { attribute string SSN; attribute string name; attribute string address; relationship set <Person> children inverse Person::parent; α 3 βαθμοί Συμπληρώστε τον παραπάνω ατελή ορισμό του Person προσθέτοντας: relationship parent; relationship spouse; relationship set <Person> parent inverse Person::children; relationship Person spouse inverse Person::spouse; β Αναφερόμενοι στο ODL σχήμα που περιγράψαμε νωρίτερα, δώστε τις ακόλουθες ερωτήσεις σε ODMG OQL 4 βαθμοί ανά ερώτηση: 1. Βρείτε τα ονόματα των ανθρώπων που δεν έχουν παιδιά. select P.name where countp.children = 0 2. Για κάθε άνθρωπο βρείτε το όνομά του και τα ονόματα των παιδιών του. select structname: P.name, children: select C.name from P.children C 3. Βρείτε τα ονόματα των ανθρώπων που δεν έχουν ένα παιδί που να λέγεται George Bush Υπόδειξη: χρησιμοποιήστε την δήλωση for all. select P.name where for all C in P.children: P.name!= George Bush 4. Βρείτε τα ονόματα των ανθρώπων με τα περισσότερα παιδιά. select P.name where countp.children = maxselect countp1.children 1
5. Βρείτε το όνομα των ανθρώπων που στα παιδιά τους περιλαμβάνονται όλοι όσοι ονομάζονται George Bush. select P.name where select P1 1 where P1.name = George Bush <= P.children or select P.name where for all P2 in select P1 1 where P1.name = George Bush : P2 in P.children 6. Για κάθε άνθρωπο βρείτε το όνομά του και το όνομα των εγγονών του. select structname: P.name, grandchildren: select C1.name from P.children C, C.children C1 Άσκηση 5 10 μονάδες Δώστε τις κύριες ομοιότητες και διαφορές των OODBMS και ORDBMS. Similarities Support user-defined ADTs, structured types, object identity and reference types Support inheritance Support a query language for manipulating collection types Provide DBMS functionality such as concurrency control and recovery Differences Implementation Integration with host language OODBMS OO programming language with integrated DBMS functionality. In OODBMS the class is the fundamental abstraction. Seamless integration on with C++/Java/Small talk ORDBMS RDBMS with richer data type and functionality. ORDBMS keeps relation as the fundamental abstraction. Integration is only thought embedded SQL in a host language
Applications targeted Data retrieval Transaction Object-centric Few but possibly large objects fetched occasionally: few disk I/O ability to cache objects in memory Long duration transactions on in memory objects Large data collection Extensive disk I/O Short transactions Optimization Buffering parts of objects Optimizing disk access Query facilities ODMG OQL SQL-based standards available: SQL3, SQL4