slide1
Download
Skip this Video
Download Presentation
Βάσεις Δεδομένων II

Loading in 2 Seconds...

play fullscreen
1 / 65

Se ed II - PowerPoint PPT Presentation


  • 178 Views
  • Uploaded on

Βάσεις Δεδομένων II. Αντικειμενο-Σχεσιακές Βάσεις Δεδομένων Πάνος Βασιλειάδης [email protected] Δεκέμβρης 2002. www.cs.uoi.gr/~pvassil/courses/db_advanced/. Περιεχόμενα. Επανάληψη αντικειμενοστρεφών εννοιών Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ Τύποι Ορισμένοι από τον Χρήστη

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Se ed II' - adamdaniel


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

ΒάσειςΔεδομένων II

Αντικειμενο-Σχεσιακές Βάσεις Δεδομένων

Πάνος Βασιλειάδης

[email protected]

Δεκέμβρης 2002

www.cs.uoi.gr/~pvassil/courses/db_advanced/

slide2
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
slide3
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
object oriented programming oop
Αντικειμενοστρεφής Προγραμματισμός – Object Oriented Programming (OOP)

«μοντελοποίηση του λογισμικού και κάποιες αρχές ανάπτυξης που διευκολύνουν την κατασκευή σύνθετων συστημάτων από ξεχωριστά συστατικά»

  • Η βασική ιδέα πίσω από τον OOP: οι οντότητες προσδιορίζονται από τις λειτουργίες τους!
slide5
Αντικείμενα

Αντικείμενο είναι μια ξεχωριστή οντότητα, που προσπαθεί να μοντελοποιήσει και να προσεγγίσει όσον το δυνατό καλύτερα, το φυσικό κόσμο.

  • Συγκριτικά, ότι και μια εγγραφή (πλειάδα) στο σχεσιακό μοντέλο
slide6
Αντικείμενα

Αντικείμενο  συμπεριφορά

  • Η συμπεριφορά καθορίζεται από τη διαπροσωπεία (interface) του αντικειμένου, ήτοι, από ένα σύνολο λειτουργιών τις οποίες το αντικείμενο μπορεί να επιτελέσει
  • Η συμπεριφορά καθορίζεται ακόμα, και από τις συγκεκριμένες τιμές που έχουν τα χαρακτηριστικά του αντικειμένου. Το διάνυσμα αυτών των τιμών είναι η τιμήτου αντικειμένου
slide7
Αντικείμενα
  • Τα χαρακτηριστικά των αντικειμένων ονομάζονται instance variables (ελληνιστί, πεδία, χαρακτηριστικά, μεταβλητές, ...).
  • Η υλοποίηση μιας λειτουργίας της διαπροσωπείας ενός αντικειμένου ονομάζεται μέθοδος (το αντίστοιχο των συναρτήσεων).
  • Η κλήση μιας λειτουργίας ενός αντικειμένου, ονομάζεται αποστολή μηνύματος στο αντικείμενο
oid object identity
OID – Object Identity
  • Ταυτότητα Αντικειμένου: προσδιορίζει ένα αντικείμενο μονοσήμαντα στην ΒΔ
  • Δεν αλλάζει ποτέ – συνυπάρχει με το αντικείμενο για όλη τη διάρκεια ζωής του αντικειμένου (object’s lifetime)
  • Απονέμεται από το σύστημα και είναι κρυμμένο από το χρήστη
  • Πιο προφανής χρήση: υλοποίηση αναφορών (μοίρασμα και ενημερώσεις αντικειμένων)
encapsulation
Ενθυλάκωση (Encapsulation)
  • object = interface part + implementation part
  • Τμήμα Διαπροσωπείας = ο ορισμός των λειτουργιών που μπορεί να επιτελέσει το αντικείμενο (πρβλ., υπογραφή συναρτήσεων)
  • Τμήμα Υλοποίησης = η αναπαράσταση του αντικειμένου (όπως π.χ., σε ένα struct στη C) + η υλοποίηση των λειτουργιών (π.χ., ο κώδικας μιας συνάρτησης), ήτοι, implementation part = (data part + procedural part)
encapsulation1
Ενθυλάκωση (Encapsulation)
  • Ενσωματώνει, εκτός από δεδομένα, και λειτουργίες στα αντικείμενα
  • Αποκρύπτει τον τρόπο υλοποίησης των μεθόδων, οπότε, απεξαρτά τη διαχείριση του αντικειμένου από τη δομή του,
  • Επιβάλει τη διαχείριση του κάθε αντικειμένου, αυστηρά και μόνο από τις δικές του μεθόδους*, μέσω των αντίστοιχων μηνυμάτων.

* Πολλές φορές θα δείτε τον όρο «μέθοδος» να χαρακτηρίζει το interface part …

slide12
Τύποι και Κλάσεις

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
Collection Types
  • Σύνολα (Sets) αντικειμένων
  • Πολυσύνολα (Bags) αντικειμένων = σύνολα με διπλοεγγραφές
  • Λίστες (Lists) αντικειμένων = διατεταγμένα πολυσύνολα
  • Πίνακες (Arrays) αντικειμένων = λίστες πεπερασμένου μεγέθους
  • Πλειάδες (Tuples) αντικειμένων = παράθεση αντικειμένων, με συγκεκριμένο τρόπο
slide14
Σύνθετα Αντικείμενα

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: {}

slide15
Ιεραρχίες Τύπων και Κλάσεων
  • Κληρονομικότητα (Inheritance):
    • Κατασκευάζουμε ένα δέντρο (ιεραρχία) κλάσεων.
    • Κάθε κλάση που είναι κόμβος του δέντρου «κληρονομεί», από την πατρική της κλάση όλα τα δομικά και λειτουργικά χαρακτηριστικά της -τις instance variables και τις μεθόδους, δηλαδή.
    • Στα χαρακτηριστικά αυτά, κάθε κλάση νομιμοποιείται να προσθέσει τα δικά της χαρακτηριστικά και λειτουργίες.
  • Οι ιεραρχίες αφορούν και τύπους και κλάσεις
slide16

Vehicle

- Name

- Weight

- Color

+ GetName()

+ GetWeight

+ GetColor()

FourWheels

- MaxVelocity

+GetMaxVelocity()

Bike

- NumSpeeds

+GetNumSpeeds()

Van

- MaxCargo

+GetMaxCargo()

Car

- NumDoors

+GetNumDoors()

Ιεραρχίες Τύπων και Κλάσεων
slide17

Vehicle

- Name

- Weight

- Color

+ GetName()

+ GetWeight

+ GetColor()

FourWheels

- MaxVelocity

+GetMaxVelocity()

Bike

- NumSpeeds

+GetNumSpeeds()

Van

- MaxCargo

+GetMaxCargo()

+GetWeight()

Car

- NumDoors

+GetNumDoors()

Υπερφόρτωση και πολυμορφισμός
slide18
Τυπικός ορισμός αντικειμένου

Αντικείμενο = [OID, τιμή, κατάσταση, κλάση]

  • OID = μοναδικός προσδιοριστής
  • Τιμή = διάνυσμα τιμών των instance variables + τιμές επιστροφής των μεθόδων (public)
  • Κατάσταση = διάνυσμα τιμών των instance variables βάσει του τύπου στον οποίο δομείται το αντικείμενο(private)
  • Κλάση = η κλάση στην οποία ανήκει το αντικείμενο
slide19
Τυπικός ορισμός κλάσης
  • όνομα κλάσης,
  • τύπος της τιμής των στιγμιοτύπων,
  • τύπος της κατάστασης των στιγμιοτύπων,
  • {μηνύματα στιγμιοτύπων},
  • {μέθοδοι στιγμιοτύπων},
  • τιμή της κλάσης,
  • κατάσταση της κλάσης,
  • {μηνύματα της κλάσης},
  • {μέθοδοι της κλάσης}
  • τύπος της τιμής της κλάσης,
  • τύπος της κατάστασης της κλάσης

Η κλάση είναι μια συλλογή στιγμιοτύπων

αλλά είναι κι η ίδια ένα αντικείμενο

οπότε ανήκει κι αυτή σε μια μετα-κλάση

slide20
Από το σύστημα 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)

slide21
Από το σύστημα 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)

slide22
Από το σύστημα 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
ODMG - 93
  • Το Object Database Management Group (ODMG) είναι μια επιτροπή που, στις αρχές της δεκαετίας του 1990, πρότεινε ένα κοινό interface (ODMG‑93) στους διάφορους κατασκευαστές αντικειμενοστρεφών συστημάτων βάσεων δεδομένων
  • Σήμερα: version 3.0 του στάνταρτ
object definition language odl
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
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)>

slide26
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
sql 1999
Τα τμήματα της 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/Framework
  • Παρέχει μια γενική εικόνα του στάνταρτ
  • Παρουσιάζει πώς τα διάφορα τμήματα “δένουν“ μεταξύ τους
  • Παρέχει ένα κοινό λεξιλόγιο – ορολογία
sql foundation
SQL/Foundation
  • Νέα στοιχεία στην SQL:
    • τύποι δεδομένων
    • κατηγορήματα (predicates)
    • αναδρομή
    • δυνατότητες δοσοληψιών
    • triggers
    • και πολλά άλλα...

Σήμερα, θα δούμε το τμήμα του που ασχολείται με τις αντικειμενοστρεφείς επεκτάσεις της SQL

sql cli call level interface
SQL/CLI (Call Level Interface)
  • επιτρέπει την εκτέλεση κώδικα χωρίς να παρέχεται ο πηγαίος κώδικας
  • λειτουργία χωρίς preprocessor
  • είναι ένα είδος binding σαν την dynamic SQL και το ODBC
sql cli
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
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
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
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))
slide35
Αντικειμενοστρεφείς Επεκτάσεις των Σχεσιακών συστημάτων
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
slide36
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
distinct types
Διακριτοί τύποι (distinct types)
  • H πιο βασική έκφραση των ορισμένων από τον χρήστη τύπων
  • Aποτελούν μετονομασία ενός βασικού τύπου πηγή συνήθως με διαφορετική συμπεριφορά από τον source type με τον οποίο
    • έχουν ίδια εσωτερική δομή
    • δεν είναι όμως, συγκρίσιμοι
slide38
Διακριτοί τύποι
  • Λειτουργίες ορισμένες στους distinct types
    • τελεστής σύγκρισης (προαιρετικά) βασίζεται στον τελεστή του source type
    • casting άμεσο, casting μεταξύ του distinct type και του source type
slide39
Διακριτοί τύποι - Παραδείγματα

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!!!!!

slide40
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
slide41
Αφηρημένοι τύποι (ADTs)
  • Αποτελούν οντότητες με συμπεριφορά και ενθυλακωμένη εσωτερική δομή
  • Η εσωτερική δομή ορίζεται σε SQL

CREATE TYPE address

(street char (30),

city char (20),

state char (2),

zip integer);

adts encapsulation
ADTs - Ενθυλάκωση (Encapsulation)
  • Μπορούμε να ορίσουμε functions (μεθόδους στην ΟΟ ορολογία) για τους ADT’s
  • Η φυσική αναπαράσταση μπορεί να αλλάξει χωρίς να επηρεαστούν οι εφαρμογές (αν οι τελευταίες χρησιμοποιούν τις functions αυτές)
  • OBSERVER και MUTATOR functions δημιουργούνται αυτόματα
adts encapsulation1
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

slide44
Συναρτήσεις - Μέθοδοι Ορισμένοι από τον Χρήστη
  • Οι δηλώσεις τους:
    • SQL/PSM,
    • σε γλώσσες τρίτης ή τέταρτης γενιάς (3GLs ή 4GLs).
  • εσωτερικές/εξωτερικές

CREATE FUNCTION fullAddress(address) RETURNS char(55)

AS EXTERNAL NAME ‘usr/pvassil/toy.class’

LANGUAGE ‘java’;

slide45
ADTs - Δημιουργία Στιγμιοτύπων
  • μέσω της constructor function
  • default CONSTRUCTOR function δημιουργείται αυτόματα

Η κλήση address() -> address

επιστρέφει ένα νέο στιγμιότυπο του ADT με κάθε attribute αρχικοποιημένο στην default τιμή

slide46

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…

slide47
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
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
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,…)

adt s
ADT’S – Περαιτέρω χαρακτηριστικά

CREATE TYPE emp_type UNDER person_t AS

( EMP_ID INTEGER,

SALARY REAL)

INSTANTIABLE % με data δηλαδή

NOT FINAL% επιτρέπεται να έχει subtypes

REF (EMP_ID) % με ότι REF’s σε αυτόν να

% γίνονται μέσω του EMP_ID

slide52
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
named row types
Επώνυμοι Τύποι Γραμμής (Named Row Types)
  • Ορίζονται από τον χρήστη χωρίς ενθυλακωμένη εσωτερική δομή

CREATE ROW TYPE account_t

(acctno INT,

cust REF (customer_t),

type CHAR (1),

opened DATE,

rate DOUBLE PRECISION,

balance DOUBLE PRECISION);

  • για να ορίσουν τον τύπο των rows σε ένα πίνακα

CREATE TABLE account OF account_t

(PRIMARY KEY acctno );

reference types
Τύποι αναφοράς (Reference Types)
  • Διευκολύνουν τη συσχέτιση τύπων γραμμής

CREATE ROW TYPE account_t

(acctno INT,

cust REF (customer_t),

type CHAR (1),

opened DATE,

rate DOUBLE PRECISION,

balance DOUBLE PRECISION);

  • Οι αναφορές μπορούν να έχουν εμβέλεια (scope)

CREATE TABLE account OF account_t

(PRIMARY KEY acctno,

SCOPE OF cust IS customer );

  • Μπορούμε να αναφερθούμε μόνο σε “top level” εγγραφές
reference types1

Account(account_t)

Customer(customer_t)

Τύποι αναφοράς (Reference Types)
  • Mόνο top level rows σε πίνακες μπορούν να γίνουν referenced
    • η reference value ποτέ δεν αλλάζει, όσο τα αντίστοιχα tuples “ζουν”
    • οι reference values είναι μοναδικές μέσα στη βάση δεδομένων
path expressions
Εκφράσεις μονοπατιών - Path Expressions
  • Τα references μπορούν να χρησιμοποιηθούν σε path expressions

SELECT a.acctno, a.cust->name

FROM account a

WHERE a.cust->address..city = “Hollywood”

AND a.balance > 1000000;

reference types2
Reference Types ≠Περιορισμών Ακεραιότητας
  • Οι περιορισμοί ακεραιότητας επιβάλλουν την ύπαρξη target
  • Είναι απολύτως ασαφές από ποιον πίνακα απαντάται το προηγούμενο query!
slide58
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
adt s row types subtyping
ADT’s & Row Types: Subtyping
  • Ένας row type μπορεί να είναι υποτύπος ενός ή περισσότερων row types, κληρονομώντας attributes και συμπεριφορά από αυτούς

CREATE TYPE employee_t (name CHAR (20), salary DECIMAL (10,2))

CREATE TYPE manager_t UNDER employee (bonus DEMICAL (10,2))

CREATE TYPE ssummer_stundent_t UNDER employee (school VARCHAR (30))

slide60

ADT’s & Row Types:Ιεραρχίες Πινάκων

  • Για τη μοντελοποίηση ιεραρχιών πινάκων (super/sub collections)
    • CREATE TABLE employees OF employee_t
    • CREATE TABLE managers OF manager_t UNDER employees
    • CREATE TABLE summer_stundents OF summer_stundents_t UNDER employees
  • Ερωτήσειςστον πίνακαemployeesεπιστρέφουν rows ΚΑΙ από τα sub-tables του!
slide61
Περιεχόμενα
  • Επανάληψη αντικειμενοστρεφών εννοιών
  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ
  • Τύποι Ορισμένοι από τον Χρήστη
    • Διακριτοί τύποι - Distinct Types
    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)
    • Τύποι γραμμών - Row Types
    • Τύποι αναφοράς - Reference Types
  • Ιεραρχίες Τύπων και Πινάκων
  • Περαιτέρω δυνατότητες
type type predicate
Κατηγόρημα TYPE (TYPE Predicate)

CREATE TABLE real_estate_info (price money, owner CHAR (40), property real_estate)

slide63
Κατηγόρημα TYPE
  • Late binding

SELECT price, owner, property

FROM real_estate_info

WHERE TYPE (price) IN (us_dollar)

  • Αλλαγή του τύπου μιας έκφρασης σε έναν από τους υποτύπους του

SELECT TREAT (price AS us_dollar), owner,

property

FROM real_estate_info

WHERE TYPE (price) IN (us_dollar)

collection types1
Συγκεντρωτικοί Τύποι (Collection Types)
  • Προς το παρόν, υποστηρίζονται μόνο arrays.

CREATE TABLE time_info(

weekdays VARCHAR(10) ARRAY[7],

months VARCHAR(15) ARRAY[12])

  • Κάθε εγγραφή θα έχει ένα πεδίο weekdays που θα περιέχει ένα array 7 θέσεων, σε κάθε μία από τις οποίες θα μπαίνει ένα VARCHAR(10). Ομοίως τα months…
  • Παραβιάζεται, φυσικά η 1η κανονική μορφή (1NF)!
slide65
Εμείς θα θέλαμε στο μέλλον και ...

CREATE ROW TYPE employee

(idINTEGER,

nameVARCHAR(30),

addressaddress,

managerREF (employee),

projectsSET (REF (project)),

childrenLIST (REF (PERSON)),

hobbiesMULTISET (VARCHAR (20)))

ad