650 likes | 844 Views
Βάσεις Δεδομένων II. Αντικειμενο-Σχεσιακές Βάσεις Δεδομένων Πάνος Βασιλειάδης pvassil@cs.uoi.gr Δεκέμβρης 2002. www.cs.uoi.gr/~pvassil/courses/db_advanced/. Περιεχόμενα. Επανάληψη αντικειμενοστρεφών εννοιών Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ Τύποι Ορισμένοι από τον Χρήστη
E N D
ΒάσειςΔεδομένων II Αντικειμενο-Σχεσιακές Βάσεις Δεδομένων Πάνος Βασιλειάδης pvassil@cs.uoi.gr Δεκέμβρης 2002 www.cs.uoi.gr/~pvassil/courses/db_advanced/
Περιεχόμενα • Επανάληψη αντικειμενοστρεφών εννοιών • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ • Τύποι Ορισμένοι από τον Χρήστη • Διακριτοί τύποι - Distinct Types • Αφηρημένοι τύποι - Abstract Data Types (ADTs) • Τύποι γραμμών - Row Types • Τύποι αναφοράς - Reference Types • Ιεραρχίες Τύπων και Πινάκων • Περαιτέρω δυνατότητες
Περιεχόμενα • Επανάληψη αντικειμενοστρεφών εννοιών • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ • Τύποι Ορισμένοι από τον Χρήστη • Διακριτοί τύποι - Distinct Types • Αφηρημένοι τύποι - Abstract Data Types (ADTs) • Τύποι γραμμών - Row Types • Τύποι αναφοράς - Reference Types • Ιεραρχίες Τύπων και Πινάκων • Περαιτέρω δυνατότητες
Αντικειμενοστρεφής Προγραμματισμός – Object Oriented Programming (OOP) «μοντελοποίηση του λογισμικού και κάποιες αρχές ανάπτυξης που διευκολύνουν την κατασκευή σύνθετων συστημάτων από ξεχωριστά συστατικά» • Η βασική ιδέα πίσω από τον OOP: οι οντότητες προσδιορίζονται από τις λειτουργίες τους!
Αντικείμενα Αντικείμενο είναι μια ξεχωριστή οντότητα, που προσπαθεί να μοντελοποιήσει και να προσεγγίσει όσον το δυνατό καλύτερα, το φυσικό κόσμο. • Συγκριτικά, ότι και μια εγγραφή (πλειάδα) στο σχεσιακό μοντέλο
Αντικείμενα Αντικείμενο συμπεριφορά • Η συμπεριφορά καθορίζεται από τη διαπροσωπεία (interface) του αντικειμένου, ήτοι, από ένα σύνολο λειτουργιών τις οποίες το αντικείμενο μπορεί να επιτελέσει • Η συμπεριφορά καθορίζεται ακόμα, και από τις συγκεκριμένες τιμές που έχουν τα χαρακτηριστικά του αντικειμένου. Το διάνυσμα αυτών των τιμών είναι η τιμήτου αντικειμένου
Αντικείμενα • Τα χαρακτηριστικά των αντικειμένων ονομάζονται instance variables (ελληνιστί, πεδία, χαρακτηριστικά, μεταβλητές, ...). • Η υλοποίηση μιας λειτουργίας της διαπροσωπείας ενός αντικειμένου ονομάζεται μέθοδος (το αντίστοιχο των συναρτήσεων). • Η κλήση μιας λειτουργίας ενός αντικειμένου, ονομάζεται αποστολή μηνύματος στο αντικείμενο
OID – Object Identity • Ταυτότητα Αντικειμένου: προσδιορίζει ένα αντικείμενο μονοσήμαντα στην ΒΔ • Δεν αλλάζει ποτέ – συνυπάρχει με το αντικείμενο για όλη τη διάρκεια ζωής του αντικειμένου (object’s lifetime) • Απονέμεται από το σύστημα και είναι κρυμμένο από το χρήστη • Πιο προφανής χρήση: υλοποίηση αναφορών (μοίρασμα και ενημερώσεις αντικειμένων)
Ενθυλάκωση (Encapsulation) • object = interface part + implementation part • Τμήμα Διαπροσωπείας = ο ορισμός των λειτουργιών που μπορεί να επιτελέσει το αντικείμενο (πρβλ., υπογραφή συναρτήσεων) • Τμήμα Υλοποίησης = η αναπαράσταση του αντικειμένου (όπως π.χ., σε ένα struct στη C) + η υλοποίηση των λειτουργιών (π.χ., ο κώδικας μιας συνάρτησης), ήτοι, implementation part = (data part + procedural part)
Ενθυλάκωση (Encapsulation) • Ενσωματώνει, εκτός από δεδομένα, και λειτουργίες στα αντικείμενα • Αποκρύπτει τον τρόπο υλοποίησης των μεθόδων, οπότε, απεξαρτά τη διαχείριση του αντικειμένου από τη δομή του, • Επιβάλει τη διαχείριση του κάθε αντικειμένου, αυστηρά και μόνο από τις δικές του μεθόδους*, μέσω των αντίστοιχων μηνυμάτων. * Πολλές φορές θα δείτε τον όρο «μέθοδος» να χαρακτηρίζει το interface part …
Τύποι και Κλάσεις add class Monument type tuple(name: string, address: Address, description: string, closing_days: list(string), admission_fee: integer) add methodincrease_fee(amount: integer) in class Monument
Collection Types • Σύνολα (Sets) αντικειμένων • Πολυσύνολα (Bags) αντικειμένων = σύνολα με διπλοεγγραφές • Λίστες (Lists) αντικειμένων = διατεταγμένα πολυσύνολα • Πίνακες (Arrays) αντικειμένων = λίστες πεπερασμένου μεγέθους • Πλειάδες (Tuples) αντικειμένων = παράθεση αντικειμένων, με συγκεκριμένο τρόπο
Σύνθετα Αντικείμενα OID: OID10 Name: Μαμά Καγκουρό Age: 4 Children: { [OID: OID15 Name: Μωρό Κ. Age: 0.5 Children: {}] } OID: OID12 Name: Πέτρος Age: 40 Children: {OID15} OID: OID15 Name: Γιάννης Age: 15 Children: {}
Ιεραρχίες Τύπων και Κλάσεων • Κληρονομικότητα (Inheritance): • Κατασκευάζουμε ένα δέντρο (ιεραρχία) κλάσεων. • Κάθε κλάση που είναι κόμβος του δέντρου «κληρονομεί», από την πατρική της κλάση όλα τα δομικά και λειτουργικά χαρακτηριστικά της -τις instance variables και τις μεθόδους, δηλαδή. • Στα χαρακτηριστικά αυτά, κάθε κλάση νομιμοποιείται να προσθέσει τα δικά της χαρακτηριστικά και λειτουργίες. • Οι ιεραρχίες αφορούν και τύπους και κλάσεις
Vehicle - Name - Weight - Color + GetName() + GetWeight + GetColor() FourWheels - MaxVelocity +GetMaxVelocity() Bike - NumSpeeds +GetNumSpeeds() Van - MaxCargo +GetMaxCargo() Car - NumDoors +GetNumDoors() Ιεραρχίες Τύπων και Κλάσεων
Vehicle - Name - Weight - Color + GetName() + GetWeight + GetColor() FourWheels - MaxVelocity +GetMaxVelocity() Bike - NumSpeeds +GetNumSpeeds() Van - MaxCargo +GetMaxCargo() +GetWeight() Car - NumDoors +GetNumDoors() Υπερφόρτωση και πολυμορφισμός
Τυπικός ορισμός αντικειμένου Αντικείμενο = [OID, τιμή, κατάσταση, κλάση] • OID = μοναδικός προσδιοριστής • Τιμή = διάνυσμα τιμών των instance variables + τιμές επιστροφής των μεθόδων (public) • Κατάσταση = διάνυσμα τιμών των instance variables βάσει του τύπου στον οποίο δομείται το αντικείμενο(private) • Κλάση = η κλάση στην οποία ανήκει το αντικείμενο
Τυπικός ορισμός κλάσης • όνομα κλάσης, • τύπος της τιμής των στιγμιοτύπων, • τύπος της κατάστασης των στιγμιοτύπων, • {μηνύματα στιγμιοτύπων}, • {μέθοδοι στιγμιοτύπων}, • τιμή της κλάσης, • κατάσταση της κλάσης, • {μηνύματα της κλάσης}, • {μέθοδοι της κλάσης} • τύπος της τιμής της κλάσης, • τύπος της κατάστασης της κλάσης Η κλάση είναι μια συλλογή στιγμιοτύπων αλλά είναι κι η ίδια ένα αντικείμενο οπότε ανήκει κι αυτή σε μια μετα-κλάση
Από το σύστημα O2 add class City with extension type tuple(name: string, map: Bitmap, hotels: set(Hotel)) add class Monument type tuple(name: string, address: Address, description: string, closing_days: list(string), admission_fee: integer)
Από το σύστημα O2 add class Address type tuple(street: string, city: City) add class Hotel type tuple(name: string, address: Address, facilities: list(string), stars: integer, rate: float)
Από το σύστημα O2 add name Eiffel_tower: Monument, ήισοδύναμαEiffel_tower = new(Monument) add method increase_fee(amount: integer) in class Monument is private add class Historical_hotel inherits Monument, Hotel add method print_height(amount: float) in object Eiffel_tower
ODMG - 93 • Το Object Database Management Group (ODMG) είναι μια επιτροπή που, στις αρχές της δεκαετίας του 1990, πρότεινε ένα κοινό interface (ODMG‑93) στους διάφορους κατασκευαστές αντικειμενοστρεφών συστημάτων βάσεων δεδομένων • Σήμερα: version 3.0 του στάνταρτ
Object Definition Language, ODL interfacePerson (extentpeople) { attribute String name; attributeStructAddress { Unsigned Short number, String Street, String city_name} address; relationship Person spouse inverse Person::spouse; relationshipSet<Person>childreninversePerson::parents {order by birth_date } relationship List<Person> parentsinversePerson::children; void birth (in String name); Boolean marriage (in String person_name) raises (no_such_person); Unsigned Short ancestors (out Set<Person> all_ancestors)raises (no_such_person); void move (in String new_address); };
Object Query Language - OQL select department, avg_salary: avg(select e.salary from partition x) from Employees e group by department: e.department having count(select * from partition x) > 5 order by department.name Αποτέλεσμα:set<struct(attr1:Department,avg_salary:int)>
Περιεχόμενα • Επανάληψη αντικειμενοστρεφών εννοιών • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ • Τύποι Ορισμένοι από τον Χρήστη • Διακριτοί τύποι - Distinct Types • Αφηρημένοι τύποι - Abstract Data Types (ADTs) • Τύποι γραμμών - Row Types • Τύποι αναφοράς - Reference Types • Ιεραρχίες Τύπων και Πινάκων • Περαιτέρω δυνατότητες
Τα τμήματα της SQL:1999 • SQL/Framework • SQL/Foundation • SQL/PSM (Persistent Stored Modules) • SQL/CLI (Call Level Interface) • SQL/MED (Management of External Data) • SQL Bindings/Temporal/OLAP/XML/OLB (Object Language Bindings, πρακτικά SQLJ)
SQL/Framework • Παρέχει μια γενική εικόνα του στάνταρτ • Παρουσιάζει πώς τα διάφορα τμήματα “δένουν“ μεταξύ τους • Παρέχει ένα κοινό λεξιλόγιο – ορολογία
SQL/Foundation • Νέα στοιχεία στην SQL: • τύποι δεδομένων • κατηγορήματα (predicates) • αναδρομή • δυνατότητες δοσοληψιών • triggers • και πολλά άλλα... Σήμερα, θα δούμε το τμήμα του που ασχολείται με τις αντικειμενοστρεφείς επεκτάσεις της SQL
SQL/CLI (Call Level Interface) • επιτρέπει την εκτέλεση κώδικα χωρίς να παρέχεται ο πηγαίος κώδικας • λειτουργία χωρίς preprocessor • είναι ένα είδος binding σαν την dynamic SQL και το ODBC
SQL/CLI - τυπική ακολουθία εντολών AllocEnv() AllocConnect() Connect() AllocStmt() build the statement… Execute() -repeat as required... Transact() -repeat as required... FreeStmt() Disconnect() FreeConnect() FreeEnv()
SQL/PSM (Persistent Stored Modules) • επιτρέπει το διαχωρισμό των εφαρμογών σε client και server • stored modules • SQL routines • 3GL external routines • υπολογιστικά πλήρης ! • CREATE FUNCTION sin (FLOAT) • RETURNS FLOAT • EXTERNAL NAME • ‘LIB%MATH-SUBS\SINE’ • LANGUAGE FORTRAN . . .
SQL/PSM -SQL Routines • compound statement BEGIN…END; • variable declaration DECLARE var CHAR (6) • if statement IF subject (var) <> ‘urgent’ THEN … ELSE…; • case statement CASE subject (var) • WHEN ‘SQL’ THEN… • WHEN …; • loop statement LOOP <SQL statements list> END LOOP; • while statement WHILE i < 100 DO … END WHILE; • repeat statement REPEAT … UNTIL i<100 END REPEAT; • for statement FOR result AS … DO … END FOR; • leave statement LEAVE …; • return statement RETURN ‘urgent’; • call statement CALL procedure_x (1, 3, 5,); • assignment statement SET x = ‘abc’; • signal / resignal SIGNAL division_by_zero
SQL/MED (Management of External Data) • επιτρέπει το registration, προσπέλαση και επερώτηση μη σχεσιακών δεδομένων μέσω SQL • επιτρέπει να ορίσουμε ότι κάποιο πεδίο ενός πίνακα βρίσκεται αποθηκευμένο έξω από το DBMS • CREATE FOREIGN TABLE MyData(ID Integer,… ) • SERVER MyServer • OPTIONS (Filename • /usr/pvassil/mydata.txt, • Delimiter ‘:’) • CREATE TABLE MyGifs( • ID Integer, • picture DATALINK) • INSERT INTO MyGifs VALUES(3,DLVALUE( • /usr/pvassil/mygif.gif))
Αντικειμενοστρεφείς Επεκτάσεις των Σχεσιακών συστημάτων • Τύποι Ορισμένοι από τον Χρήστη • Διακριτοί τύποι - Distinct Types • Αφηρημένοι τύποι - Abstract Data Types (ADTs) • Τύποι γραμμών - Row Types • Τύποι αναφοράς - Reference Types • Ιεραρχίες Τύπων και Πινάκων • Περαιτέρω δυνατότητες
Περιεχόμενα • Επανάληψη αντικειμενοστρεφών εννοιών • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ • Τύποι Ορισμένοι από τον Χρήστη • Διακριτοί τύποι - Distinct Types • Αφηρημένοι τύποι - Abstract Data Types (ADTs) • Τύποι γραμμών - Row Types • Τύποι αναφοράς - Reference Types • Ιεραρχίες Τύπων και Πινάκων • Περαιτέρω δυνατότητες
Διακριτοί τύποι (distinct types) • H πιο βασική έκφραση των ορισμένων από τον χρήστη τύπων • Aποτελούν μετονομασία ενός βασικού τύπου πηγή συνήθως με διαφορετική συμπεριφορά από τον source type με τον οποίο • έχουν ίδια εσωτερική δομή • δεν είναι όμως, συγκρίσιμοι
Διακριτοί τύποι • Λειτουργίες ορισμένες στους distinct types • τελεστής σύγκρισης (προαιρετικά) βασίζεται στον τελεστή του source type • casting άμεσο, casting μεταξύ του distinct type και του source type
Διακριτοί τύποι - Παραδείγματα CREATE DISTINCT TYPE CDN_DOLLAR AS DECIMAL (9.2) CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9.2) CREATE TABLE SALES (ID INTEGER, US US_DOLLAR, CDN CDN_DOLLAR) SELECT * FROM SALES WHERE CDN > US =>fails!!!!! SELECT * FROM SALES WHERE CDN > CDN_DOLLAR(US) =>O.K!!!!!
Περιεχόμενα • Επανάληψη αντικειμενοστρεφών εννοιών • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ • Τύποι Ορισμένοι από τον Χρήστη • Διακριτοί τύποι - Distinct Types • Αφηρημένοι τύποι - Abstract Data Types (ADTs) • Τύποι γραμμών - Row Types • Τύποι αναφοράς - Reference Types • Ιεραρχίες Τύπων και Πινάκων • Περαιτέρω δυνατότητες
Αφηρημένοι τύποι (ADTs) • Αποτελούν οντότητες με συμπεριφορά και ενθυλακωμένη εσωτερική δομή • Η εσωτερική δομή ορίζεται σε SQL CREATE TYPE address (street char (30), city char (20), state char (2), zip integer);
ADTs - Ενθυλάκωση (Encapsulation) • Μπορούμε να ορίσουμε functions (μεθόδους στην ΟΟ ορολογία) για τους ADT’s • Η φυσική αναπαράσταση μπορεί να αλλάξει χωρίς να επηρεαστούν οι εφαρμογές (αν οι τελευταίες χρησιμοποιούν τις functions αυτές) • OBSERVER και MUTATOR functions δημιουργούνται αυτόματα
ADTs - Ενθυλάκωση (Encapsulation) street (address)->char(30) city (address)->char(20) state (address)->char(2) zip (address)->integer street(address,char(30)) -> address city(address,char(20)) -> address state(address,char(2)) -> address zip(address,integer) -> address
Συναρτήσεις - Μέθοδοι Ορισμένοι από τον Χρήστη • Οι δηλώσεις τους: • SQL/PSM, • σε γλώσσες τρίτης ή τέταρτης γενιάς (3GLs ή 4GLs). • εσωτερικές/εξωτερικές CREATE FUNCTION fullAddress(address) RETURNS char(55) AS EXTERNAL NAME ‘usr/pvassil/toy.class’ LANGUAGE ‘java’;
ADTs - Δημιουργία Στιγμιοτύπων • μέσω της constructor function • default CONSTRUCTOR function δημιουργείται αυτόματα Η κλήση address() -> address επιστρέφει ένα νέο στιγμιότυπο του ADT με κάθε attribute αρχικοποιημένο στην default τιμή
shape point line polygon ADTs -Κληρονομικότητα • Οι ADTs κληρονομούν attributes και συμπεριφορά (functions) από τους υπερτύπους τους • Υποστηρίζεται η πολλαπλή κληρονομικότητα CREATE TYPE shape… CREATE TYPE point UNDER shape… CREATE TYPE line UNDER shape… CREATE TYPE polygon UNDER shape…
ADTs - Χρήση CREATE TABLE real_estate_info (address address, price money, owner char (40), property shape); CREATE TYPE shape( refencing_system INTEGER, tolerance DECIMAL (8.2), geometryBLOB(1M)) UPDATE real_estate_info SET price =US_dollar (0.9 * amount (price)) WHERE within_distance (property..geometry, point (5, 5), miles (10)) SELECT D_mark (price), owner FROM real_estate_info WHERE overlaps (property..geometry, square (5, 5, 25, 25))
ADTs - Substitutability CREATE TABLE real_estate_info (pricemoney, ownerCHAR (40), propertyshape) INSERT INTO real_estate_info VALUES (US_dollar (100000), ‘Mr. S. White’, point (4, 4)) INSERT INTO real_estate_info VALUES (CDN_dollar (400000), ‘Mr. W. Green’, poly (point (4, 4), point (10, 10), point (12, 14))) INSERT INTO SALES VALUES (S_frank (150000), ‘Mrs. D. Black’, line (5, 5, 7, 8))
ADTs - Late Binding SELECT owner, dollar_amount (price) FROM real_estate_info WHERE dollar_amount(price) < US_dollar(500000) θα καλέσει διαφορετική function στο runtime, ανάλογα με τον τύπο χρήματος που αποθηκεύτηκε στη στήλη PRICE (US_dollar, CDN_dollar, D_mark, S_frank,…)