Βάσεις
Download
1 / 65

Se ed II - PowerPoint PPT Presentation


  • 177 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

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

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

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

[email protected]

Δεκέμβρης 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
Αντικειμενοστρεφής Προγραμματισμός – Object Oriented Programming (OOP)

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

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


Αντικείμενα Προγραμματισμός

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

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


Αντικείμενα Προγραμματισμός

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

  • Η συμπεριφορά καθορίζεται από τη διαπροσωπεία (interface) του αντικειμένου, ήτοι, από ένα σύνολο λειτουργιών τις οποίες το αντικείμενο μπορεί να επιτελέσει

  • Η συμπεριφορά καθορίζεται ακόμα, και από τις συγκεκριμένες τιμές που έχουν τα χαρακτηριστικά του αντικειμένου. Το διάνυσμα αυτών των τιμών είναι η τιμήτου αντικειμένου


Αντικείμενα Προγραμματισμός

  • Τα χαρακτηριστικά των αντικειμένων ονομάζονται 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 …


Τύποι ΠρογραμματισμόςκαιΚλάσεις


Τύποι και Κλάσεις Προγραμματισμός

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) αντικειμένων = παράθεση αντικειμένων, με συγκεκριμένο τρόπο


Σύνθετα Αντικείμενα Προγραμματισμός

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


Περιεχόμενα Προγραμματισμός

  • Επανάληψη αντικειμενοστρεφών εννοιών

  • Μικρή εισαγωγή στο νέο 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))


Αντικειμενοστρεφείς Επεκτάσεις των Σχεσιακών συστημάτων

  • Τύποι Ορισμένοι από τον Χρήστη

    • Διακριτοί τύποι - Distinct Types

    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)

    • Τύποι γραμμών - Row Types

    • Τύποι αναφοράς - Reference Types

  • Ιεραρχίες Τύπων και Πινάκων

  • Περαιτέρω δυνατότητες


Περιεχόμενα των Σχεσιακών συστημάτων

  • Επανάληψη αντικειμενοστρεφών εννοιών

  • Μικρή εισαγωγή στο νέο SQL:1999 στάνταρτ

  • Τύποι Ορισμένοι από τον Χρήστη

    • Διακριτοί τύποι - Distinct Types

    • Αφηρημένοι τύποι - Abstract Data Types (ADTs)

    • Τύποι γραμμών - Row Types

    • Τύποι αναφοράς - Reference Types

  • Ιεραρχίες Τύπων και Πινάκων

  • Περαιτέρω δυνατότητες


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


Συναρτήσεις - Μέθοδοι Ορισμένοι από τον Χρήστη

  • Οι δηλώσεις τους:

    • 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
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 substitutability1
ADTs - Substitutability από τον Χρήστη


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


Περιεχόμενα από τον Χρήστη

  • Επανάληψη αντικειμενοστρεφών εννοιών

  • Μικρή εισαγωγή στο νέο 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!


Περιεχόμενα από τον Χρήστη

  • Επανάληψη αντικειμενοστρεφών εννοιών

  • Μικρή εισαγωγή στο νέο 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))


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 του!


Περιεχόμενα από τον Χρήστη

  • Επανάληψη αντικειμενοστρεφών εννοιών

  • Μικρή εισαγωγή στο νέο 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)


Κατηγόρημα από τον Χρήστη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)!


Εμείς θα θέλαμε στο μέλλον και ... από τον Χρήστη

CREATE ROW TYPE employee

(idINTEGER,

nameVARCHAR(30),

addressaddress,

managerREF (employee),

projectsSET (REF (project)),

childrenLIST (REF (PERSON)),

hobbiesMULTISET (VARCHAR (20)))


ad