Βάσεις
Sponsored Links
This presentation is the property of its rightful owner.
1 / 65

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


  • 140 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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

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)

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

  • Η βασική ιδέα πίσω από τον 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 statementBEGIN…END;

  • variable declarationDECLARE var CHAR (6)

  • if statementIF subject (var) <> ‘urgent’ THEN … ELSE…;

  • case statementCASE subject (var)

  • WHEN ‘SQL’ THEN…

  • WHEN …;

  • loop statementLOOP <SQL statements list> END LOOP;

  • while statementWHILE i < 100 DO … END WHILE;

  • repeat statementREPEAT … UNTIL i<100 END REPEAT;

  • for statementFOR result AS … DO … END FOR;

  • leave statementLEAVE …;

  • return statementRETURN ‘urgent’;

  • call statementCALL procedure_x (1, 3, 5,);

  • assignment statementSET x = ‘abc’;

  • signal / resignalSIGNAL 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

    (streetchar (30),

    citychar (20),

    statechar (2),

    zipinteger);


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


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 – Περαιτέρω χαρακτηριστικά

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)

  • Ορίζονται από τον χρήστη χωρίς ενθυλακωμένη εσωτερική δομή

    CREATE ROW TYPE account_t

    (acctnoINT,

    custREF (customer_t),

    typeCHAR (1),

    openedDATE,

    rateDOUBLE PRECISION,

    balanceDOUBLE PRECISION);

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

    CREATE TABLE account OF account_t

    (PRIMARY KEY acctno );


Τύποι αναφοράς (Reference Types)

  • Διευκολύνουν τη συσχέτιση τύπων γραμμής

    CREATE ROW TYPE account_t

    (acctnoINT,

    custREF (customer_t),

    typeCHAR (1),

    openedDATE,

    rateDOUBLE PRECISION,

    balanceDOUBLE PRECISION);

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

    CREATE TABLE account OF account_t

    (PRIMARY KEY acctno,

    SCOPE OF cust IS customer );

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


Account(account_t)

Customer(customer_t)

Τύποι αναφοράς (Reference Types)

  • Mόνο top level rows σε πίνακες μπορούν να γίνουν referenced

    • η reference value ποτέ δεν αλλάζει, όσο τα αντίστοιχα tuples “ζουν”

    • οι reference values είναι μοναδικές μέσα στη βάση δεδομένων


Εκφράσεις μονοπατιών - 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 Types ≠Περιορισμών Ακεραιότητας

  • Οι περιορισμοί ακεραιότητας επιβάλλουν την ύπαρξη target

  • Είναι απολύτως ασαφές από ποιον πίνακα απαντάται το προηγούμενο query!


Περιεχόμενα

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

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

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

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

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

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

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

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

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


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)

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

  • Προς το παρόν, υποστηρίζονται μόνο arrays.

    CREATE TABLE time_info(

    weekdaysVARCHAR(10) ARRAY[7],

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


  • Login