4- Basi di dati Object Oriented

54
1 4- Basi di dati 4- Basi di dati Object Oriented Object Oriented

description

4- Basi di dati Object Oriented. Limiti delle basi di dati relazionali. I sistemi di gestione di basi di dati relazionali (RDBMS) hanno permesso la realizzazione efficace ed efficiente di applicazioni di tipo gestionale, caratterizzate da: – persistenza, condivisione, affidabilità - PowerPoint PPT Presentation

Transcript of 4- Basi di dati Object Oriented

Page 1: 4- Basi di dati  Object Oriented

1

4- Basi di dati 4- Basi di dati Object Object OrientedOriented

Page 2: 4- Basi di dati  Object Oriented

2

Limiti delle basi di dati relazionaliLimiti delle basi di dati relazionali

• I sistemi di gestione di basi di dati relazionali (RDBMS) hanno permesso la realizzazione efficace ed efficiente di applicazioni di tipo gestionale, caratterizzate da:– persistenza, condivisione, affidabilità– dati a struttura semplice, con dati di tipo numerico/simbolico– transazioni concorrenti di breve durata (OLTP)– interrogazioni complesse, espresse mediante linguaggi

dichiarativi e con accesso di tipo “associativo”

• La rapida evoluzione tecnologica (miglioramento di prestazioni, capacità, costi dell’hardware, ecc.) ha fatto emergere, fin dalla metà degli anni '80, nuove aree applicative (CASE, CAD, CAM, Gestione Documentale, ecc.)— per le quali la tecnologia relazionale è inadeguata.

Page 3: 4- Basi di dati  Object Oriented

3

Esempi di nuove applicazioni• un archivio di 40.000 fotografie, con didascalie, coordinate

geografiche ed esigenze di interrogazioni complesse:– "trova le foto con un tramonto scattate a Roma o

dintorni"• archivio sinistri di una compagnia assicurativa (con foto,

grafici, luogo) finalizzato alla ricerca delle frodi• archivio del personale con informazioni sul curriculum,

foto, residenza per una gestione integrata ( riconoscimento, valutazione delle competenze, proposta di "car-pool")

• gestione di "codici parlanti" (ad esempio il codice fiscale)

Page 4: 4- Basi di dati  Object Oriented

4

Caratteristiche delle nuove Caratteristiche delle nuove aree applicativearee applicative

• Oltre alle caratteristiche consuete di persistenza, condivisione e affidabilità, possiamo individuare:– dati a struttura complessa

• dati non-numerici — immagini, dati spaziali, sequenze temporali, ...

• tipi pre-definiti e tipi definiti dall'utente (e riutilizzati)• relazioni esplicite ("semantiche") tra i dati (riferimenti),

aggregazioni complesse

– operazioni complesse• specifiche per i diversi tipi di dato — es. multimedia• associate anche ai tipi definiti dall'utente• transazioni di lunga durata

Page 5: 4- Basi di dati  Object Oriented

5

Basi di dati a oggetti

• Alcune delle precedenti caratteristiche suggeriscono l'utilità di introdurre, nel mondo delle basi di dati, idee proprie del paradigma orientato agli oggetti.

• A partire dalla metà degli anni '80, sono stati realizzati numerosi sistemi di gestione di basi di dati a oggetti (ODBMS) — di tipo prototipale o commerciale.

Page 6: 4- Basi di dati  Object Oriented

6

Tecnologia degli ODBMSTecnologia degli ODBMS• La prima generazione di ODBMS è composta dai linguaggi

di programmazione a oggetti persistenti, che realizzano solo alcune caratteristiche delle basi di dati, senza supporto per l’interrogazione, in modo incompatibile con gli RDBMS.

• Gli ODBMS della seconda generazione realizzano un maggior numero di caratteristiche delle basi di dati, e generalmente forniscono un supporto all’interrogazione.

• Due tecnologie di ODBMS– OODBMS (Object-Oriented): una tecnologia

rivoluzionaria rispetto a quella degli RDBMS– ORDBMS (Object-Relational): una tecnologia

evoluzionaria rispetto a quella degli RDBMS

Page 7: 4- Basi di dati  Object Oriented

7

Un modello dei dati a oggettiUn modello dei dati a oggetti

• Una base di dati a oggetti è una collezione di oggetti

• Ciascun oggettooggetto ha un identificatore, uno stato, e un comportamento– l’identificatore (OID) garantisce l’individuazione in

modo univoco dell’oggetto, e permette di realizzare riferimenti tra oggetti

– lo stato è l’insieme dei valori assunti dalle proprietà dell’oggetto — è in generale un valore a struttura complessa

– il comportamento è descritto dall’insieme dei metodi che possono essere applicati all’oggetto

Page 8: 4- Basi di dati  Object Oriented

8

Modello di dati a oggettie modello relazionale

• Due differenze fondamentali– struttura complessa:

• nidificata

• con identificatori gestiti dal sistema

– comportamento

Page 9: 4- Basi di dati  Object Oriented

9

Tipi Tipi —— Parte statica:schema Parte statica:schema• Un tipo descrive le proprietà di un oggetto - la parte statica

e l’interfaccia dei suoi metodi - la parte dinamica

• parte statica: i tipi vengono costruiti a partire da

– un insieme di tipi atomici (numeri, stringhe, ...)

– un insieme di costruttori di tipo, tra loro ortogonali

• record-of(A1:T1, ..., An:Tn)

• set-of(T), bag-of(T), list-of(T)

– un riferimento ad altro tipo definito nello schema è considerato un tipo, utilizzato per rappresentare relazioni tra oggetti (associazioni)

Page 10: 4- Basi di dati  Object Oriented

10

Un esempio di tipo complessoAutomobile: record-of(

Targa: string, Modello: string,Costruttore: record-of(

Nome: string, Presidente: string, Stabilimenti: set-of(

record-of(Nome: string, Citta: string,Addetti: integer))),

Colore: string, Prezzo: integer,PartiMeccaniche: record-of(

Motore: string, Ammortizzatore: string))

Page 11: 4- Basi di dati  Object Oriented

11

Un esempio di valore complesso• E’ possibile definire dei valori complessi

compatibili con un tipo complessoV1: [Targa: “DB123MS”, Modello: “Punto”,

Costruttore: [Nome: “FIAT”, Presidente: “Agnelli”,Stabilimenti: {

[Nome: “Mirafiori”, Citta: “Torino”, Addetti: 10000],[Nome: “Trattori”, Citta: “Modena”, Addetti: 1000]}],

Colore: “blu”, Prezzo: 9500,PartiMeccaniche: [

Motore: “1100CC”, Ammortizzatore: “Monroe”]]

Page 12: 4- Basi di dati  Object Oriented

12

Tipi e valori complessi• L’uso di tipi e valori complessi permette di

associare ad un singolo oggetto una struttura qualunque. Viceversa, nel modello relazionale alcuni concetti devono essere rappresentati tramite più relazioni.

• Tuttavia, la rappresentazione proposta per il tipo Automobile non è "normalizzata“ cioè presenta ridondanze: per ogni oggetto automobile, per esempio, ripetiamo il costruttore con tutte le informazioni:– Vediamo come decomporla utilizzando

riferimenti tra tipi di oggetti.

Page 13: 4- Basi di dati  Object Oriented

13

Riferimenti nello schema

AutomobileAutomobile: record-of(Targa: string, Modello: string,

Costruttore: **CostruttoreCostruttore, Colore: string, Prezzo: integer,PartiMeccaniche: record-of(

Motore: string,Ammortizzatore: string))

CostruttoreCostruttore: record-of(Nome: string, Presidente: string,

Stabilimenti: set-of(*StabilimentoStabilimento))

StabilimentoStabilimento: record-of(Nome: string, Citta: string,Addetti: integer)

Page 14: 4- Basi di dati  Object Oriented

14

Valori e OID

• Un oggettooggetto è una coppia ((OID, ValoreOID, Valore),), dove OID (object identifier) è un valore atomico definito dal sistema e trasparente all’utente, e Valore è un valore complesso conforme al tipo dell’oggetto

• Il valore assunto da una proprietà di un oggetto può essere l’OID di un altro oggetto realizzando così un riferimento.

Page 15: 4- Basi di dati  Object Oriented

15

Riferimenti tra oggetti

• Un insieme di oggetti compatibili con lo schema

O1: <OID1, [Targa: “DB123MS”, Modello: “Punto”, Costruttore: OID2, Colore: “blu”, Prezzo: 9500, Motore: “1100CC”, Ammortizzatore: “Monroe”]>

O2: <OID2, [Nome: “Fiat”, Presidente: “Agnelli”, Stabilimenti: {OID3,OID4}]>

O3: <OID3, [Nome: “Mirafiori”, Citta: “Torino”, Addetti: 10000]>

O4: <OID4, [Nome: “Trattori”, Citta: “Modena”, Addetti: 1000]>

Page 16: 4- Basi di dati  Object Oriented

16

Identità e uguaglianza• Tra gli oggetti sono definite le seguenti relazioni

– identità (O1=O2) — richiede che gli oggetti abbiano lo stesso identificatore

– uguaglianza superficiale (O1==O2) — richiede che gli oggetti abbiano lo stesso stato, cioè stesso valore per proprietà omologhe

– uguaglianza profonda (O1===O2) — richiede che le proprietà che si ottengono seguendo i riferimenti abbiano gli stessi valori ( non richiede l’uguaglianza dello stato infatti, nel caso in esame, è OID3 OID4)

• O1 = <OID1, [a, 10, OID3]>• O2 = <OID2, [a, 10, OID4]>• O3 = <OID3, [a,b]>• O4 = <OID4, [a,b]>

Page 17: 4- Basi di dati  Object Oriented

17

Esempio schema ad oggetti

Page 18: 4- Basi di dati  Object Oriented

18

Semantica dei riferimenti

• Il concetto di riferimento presenta analogie con quello di puntatore nei linguaggi di programmazione, e con quello di chiave esterna in un sistema relazionale. Tuttavia– i puntatori possono essere corrotti (dangling, appesi);

i riferimenti a oggetti (in un buon ODBMS) vengono invalidati automaticamente in caso di cancellazione di un oggetto referenziato

– le chiavi esterne sono visibili, in quanto realizzate tramite valori; gli identificatori d’oggetto non sono associati a valori visibili dall’utente

– modificando i valori degli attributi di una chiave esterna, è possibile perdere riferimenti; modificando il valore di un oggetto referenziato, il riferimento continua ad esistere

Page 19: 4- Basi di dati  Object Oriented

19

Tipi — Parte dinamica : metodi• Il paradigma OO deriva dal concetto di tipo di dato astratto• Un metodo è una procedura utilizzata per incapsulare lo

stato di un oggetto, ed è caratterizzato da una interfaccia (o segnatura) e una implementazione– l’interfaccia comprende tutte le informazioni che permettono di

invocare un metodo (il tipo dei parametri)– l’implementazione contiene il codice del metodo

• Il tipo di un oggetto comprende, oltre alle proprietà, anche le interfacce dei metodi applicabili a oggetti di quel tipo

• Ipotizziamo che i metodi siano assimilabili a funzioni, ovvero possono avere più parametri di ingresso ma un solo parametro di uscita

Page 20: 4- Basi di dati  Object Oriented

20

Metodi• In prima approssimazione, i metodi possono

essere dei seguenti tipi– costruttori — per costruire oggetti a partire da

parametri di ingresso (restituendo l’OID dell’oggetto costruito)

– distruttori — per cancellare gli oggetti, ed eventuali altri oggetti ad essi collegati

– accessori — funzioni che restituiscono informazioni sul contenuto degli oggetti (proprietà derivate)

– trasformatori — procedure che modificano lo stato degli oggetti, e di eventuali altri oggetti ad essi collegati

• Un metodo può essere pubblico o privato

Page 21: 4- Basi di dati  Object Oriented

21

Esempio metodiEsempio metodiautomobile: record-of(

targa: string, modello: string,costruttore: *costruttore,colore: string, prezzo: integer,partiMeccaniche: record-of(

motore: string,ammortizzatore: string),

public Init( // costruttore targa_par: string, modello_par: string, colore_par:

string, prezzo_par: integer): automobile,

public Prezzo(): integer, // accessorepublic Aumento( //

trasformatore ammontare: integer)) // void

Page 22: 4- Basi di dati  Object Oriented

22

Classi — estensioni dei tipi• Una classe è un contenitore di oggetti, che possono

essere dinamicamente aggiunti o tolti alla classe (tramite costruttori e distruttori)

• Ad una classe è associato un solo tipo, quindi gli oggetti in una classe sono tra loro omogenei (hanno le stesse proprietà e rispondono agli stessi metodi)

• Due alternative:– una classe raccoglie tutti gli oggetti di uno stesso tipo– più classi possono avere lo stesso tipo

• Una classe definisce anche l’implementazione dei metodi, che va specificata in qualche linguaggio di programmazione

Page 23: 4- Basi di dati  Object Oriented

23

Implementazione e invocazione di metodiImplementazione e invocazione di metodi

body Init(targa_par: string, modello_par: string,colore_par: string, prezzo_par: integer):automobile in class automobile

co2{self->targa = targa_par;self->modello = modello_par;self->colore = colore_par;self->prezzo = prezzo_par;return(self);

}$

execute co2{ // in un programmao2 automobile X; // dich. di variabile O2X = new(automobile);[X Init(“Mi56T778”, “Panda”, “blu”, 12M)]; }$

Page 24: 4- Basi di dati  Object Oriented

24

Disadattamento di impedenzaDisadattamento di impedenza• In un RDBMS, esiste un “disadattamento (mismatch) di

impedenza” tra i linguaggi con i quali vengono scritte le applicazioni (che manipolano variabili scalari) e l’SQL, che estrae insiemi di ennuple. Si usano allo scopo i cursori

• Si dice che gli ODBMS risolvono questo problema, in quanto gli oggetti persistenti possono essere manipolati direttamente tramite le istruzioni del linguaggio di programmazione (procedurale)

• Il linguaggio di programmazione di un ODBMS deve permettere l’accesso alle componenti di un valore complesso — ad esempio, i record con l’operatore dot “.”“.”, i riferimenti con l’operatore “->““->“, le collezioni con opportuni iteratori.

Page 25: 4- Basi di dati  Object Oriented

25

Altre caratteristiche del paradigma ad Altre caratteristiche del paradigma ad oggettioggetti

• Tra i tipi (e le classi) di una base di dati a oggetti, è possibile definire una gerarchia di ereditarietà, con le usuali relazioni di sottotipo, l’ereditarietà dei metodi, la possibilità di overloading, overriding, late binding, ereditarietà multipla, ...

• Tutto funziona come nei linguaggi di programmazione oggetti

• Esiste tuttavia una importante differenza: gli oggetti di un programma sono oggetti di breve durata, gli oggetti di una base di dati sono oggetti di lunga durata, con conseguenze non banali...

Page 26: 4- Basi di dati  Object Oriented

26

Migrazione tra classiMigrazione tra classi• Nel corso della propria esistenza, un oggetto deve mantenere la

propria identità, in modo che sia possibile riferirsi ad esso in modo univoco

• Tuttavia, è possibile che un oggetto cambi tipo: – una persona diviene uno studente, poi uno studente lavoratore, poi un

lavoratore, poi una persona sposata, ...

• Sembra quindi necessario un meccanismo di acquisizione e perdita di tipi, normalmente tramite operazioni di – specializzazione (si diventa membri di una sotto-classe)– generalizzazione (si perde l’appartenenza a una sotto-

classe)

Page 27: 4- Basi di dati  Object Oriented

27

PersistenzaPersistenza• Gli oggetti possono essere temporanei (come nei

programmi tradizionali) o persistenti. • La persistenza può essere specificata in vari modi

(non sempre tutti disponibili in uno stesso sistema):– inserimento in una classe persistente– raggiungibilità da oggetti persistenti (garantisce

l’integrità referenziale, ma richiede un garbage collector)

– "denominazione": si può definire un nome ("handle") per un oggetto.

Page 28: 4- Basi di dati  Object Oriented

28

The O-O Database Manifesto(Atkinson, Bancilhon, DeWitt, Dittrich, Maier, Zdonik)

• Una lista di funzionalità per la definizione e la valutazione di OODBMS.

• Include:– Funzionalità obbligatorie (the "golden rules")– Funzionalità opzionali– Scelte aperte

Page 29: 4- Basi di dati  Object Oriented

29

Funzionalità obbligatorie“The golden rules”

• Oggetti complessi• Identità di oggetto• Incapsulamento• Tipi e/o classi• Gerarchie di classi o di tipi• Overriding, overloading e late binding• Completezza computazionale• Estensibilità• Persistenza• Gestione della memoria secondaria• Concorrenza• Recovery• Linguaggio o interfaccia di interrogazione

Page 30: 4- Basi di dati  Object Oriented

30

The Golden RulesThe Golden Rules• Thou shalt support complex objects• Thou shalt support object identity• Thou shalt encapsulate thine objects• Thou shalt support types or classes• Thine classes or types shalt inherit from their ancestors• Thou shalt not bynd prematurely• Thou shalt be computationally complete• Thou shalt be extensible• Thou shalt remember thy data• Thou shalt manage very large databases• Thou shalt accept concurrent users• Thou shalt recover from hardware and software failures• Thou shalt have a simple way of querying data

Page 31: 4- Basi di dati  Object Oriented

31

Funzionalita' quasi obbligatorie

("no consensus")

• Dati derivati e definizione di viste

• Funzionalità DBA

• Vincoli di integrità

• Funzionalità per la modifica di schemi

Page 32: 4- Basi di dati  Object Oriented

32

Funzionalità opzionaliFunzionalità opzionali

• Ereditarietà multipla

• Verifica dei tipi ed inferenza su di essi

• Distribuzione

• "Design transactions" (transazioni lunghe e nidificate)

• Gestione delle versioni

Page 33: 4- Basi di dati  Object Oriented

33

Scelte libereScelte libere

• Paradigma di programmazione

• Realizzazione

• Sistema di tipi

• Uniformità

Page 34: 4- Basi di dati  Object Oriented

34

Object Database Management Object Database Management Group e ODMG-93Group e ODMG-93

• ODMG è composto da partecipanti di tipo accademico e industriale, ed in particolare i principali produttori di OODBMS.

• ODMG-93 è una proposta di standard per OODBMS, che i partecipanti intendono realizzare o supportare– un modello a oggetti– ODL, un linguaggio di definizione basato su IDL

(standard ISO)– OQL, un linguaggio di interrogazione, “basato” su

SQL3– Language bindings per C++, Smalltalk e Java

• ODMG-93 non è uno standard formale né una specifica di OODBMS

Page 35: 4- Basi di dati  Object Oriented

35

Un esempio di schema ODLinterface Automobile( extent Automobili key Targa ) { attribute String Targa;

attribute String Modello; attribute String Colore; attribute String Prezzo; attribute Structure PartiMeccaniche

{String Motore, String Ammortizzatore}; relationship <Costruttore> Costruttore inverse Costruttore::Costruisce; Automobile init(in String Targa_par, in String Modello_par, in String Colore_par, in String Prezzo_par); void Aumento(in Integer Ammontare) raises(PrezzoEccessivo);}

interface AutoSportiva: Automobile{ attribute Integer MaxVelocita }

Page 36: 4- Basi di dati  Object Oriented

36

Il modello ODMG-93• Le proprietà e le operazioni di un tipo sono chiamate

caratteristiche• E’ possibile definire una gerarchia di tipi, alcuni dei quali

sono astratti (non istanziabili)• L’estensione di un tipo è l’insieme di tutte le sue istanze• Un tipo ha una o più implementazioni (classi) — ad

esempio, una classe può richiedere di implementare una proprietà di tipo Set come Set_as_Btree

• Alcuni oggetti possono avere un nome, per riferirsi ad essi esplicitamente nei programmi — altri possono essere identificati mediante interrogazioni

Page 37: 4- Basi di dati  Object Oriented

37

OQL — Object Query LanguageOQL — Object Query Language

• Linguaggio SQL-like per basi di dati a oggetti, inizialmente sviluppato per O2, adottato (con modifiche) da ODMG, basato sui seguenti principi– non è computazionalmente completo, ma può invocare

metodi, e i metodi possono includere interrogazioni– permette un accesso dichiarativo agli oggetti– si basa sul modello ODMG– ha una sintassi astratta — ed almeno una sintassi

concreta, simile a SQL– ha primitive di alto livello per le collezioni– non ha operatori di aggiornamento

Page 38: 4- Basi di dati  Object Oriented

38

Interrogazioni OQLInterrogazioni OQL

• OQL permette di interrogare interattivamente oggetti, partendo dai loro nomi

• Alternativamente, comandi OQL possono essere immersi in un linguaggio di programmazione — utilizzandoli come argomenti (di tipo String) di metodi che li eseguono e ne restituiscono il risultato

Page 39: 4- Basi di dati  Object Oriented

39

Un esempio ODL-OQLUn esempio ODL-OQL

ATTOREFILM

STUDIO

titolo

anno

lunghezza tipo_pellicola

attori

recitaIn

posseduto da

possiedenome

indirizzo

nome

indirizzo

via città

lunghezza_in_ore ( )nomiAttori (out Set<string>)

altrifilm ( in Attore, out Set <Film>)

Da Ulmann e Widom – Introduzione ai database – Jackson Libri 2000

Page 40: 4- Basi di dati  Object Oriented

40

Interfaccia FilmInterfaccia Filminterface Film (extend Films

Key (titolo, anno))

attribute string titolo;

attribute integer anno;

attribute enum Pellicola (colore, biancoEnero) tipoPellicola;

relationship Set <Attore> attori

inverse Attore ::recitain;

relationship Studio posseduto_da

inverse Studio:: possiede;

float lunghezza_in_ore ( )

raises(NessunaLunghezzaTrovata);

nomiAttori ( out Set <string>);

altrifilm ( in Attore, out Set <Film>)

raises(noTaleAttore);

Page 41: 4- Basi di dati  Object Oriented

41

Interfaccia AttoreInterfaccia Attore

interface Attore

(extend Attori

Key nome)

attribute string nome;

attribute Struct Indir string via, string città indirizzo;

relationship Set <Film> recitaIn

inverse Film :: attori;

Page 42: 4- Basi di dati  Object Oriented

42

Interfaccia StudioInterfaccia Studio

interface Studio

(extend Studi

Key nome)

attribute string nome;

attribute string indirizzo;

relationship Set <Film> possiede

inverse Film :: posseduto da;

Page 43: 4- Basi di dati  Object Oriented

43

Espressioni di camminoEspressioni di cammino• Se p è un attributo allora oo.p è il valore di tale

attributo per l’oggetto oo– Es: miofilm.lunghezza

• Se p è un’associazione allora oo.p è l’oggetto o collezione di oggetti con cui oo è in associazione attraverso p– Es: miofilm.attori

• Se p è un metodo allora oo.p è il risultato dell’applicazione di p ad oo– Es : miofilm.lunghezza_in_ore()– Es: miofilm.nomiAttori(mieiAttori)

Page 44: 4- Basi di dati  Object Oriented

44

Select...From...Where... (Sintassi)Select...From...Where... (Sintassi)• La parola chiave SELECT seguita da una lista di espressioni

• La parola chiave FROM seguita da una lista di una o più dichiarazioni di variabili. Una variabile è specificata con:

• Un’espressione il cui valore è di tipo collezione (set, bag,…)

• La parola chiave opzionale as• Il nome della variabile

• La parola chiave WHERE seguita da un’espressione boolean. Usa le variabili e/o costanti dichiarate nella clausola FROM.

Ad. Esempio:SELECT f.annoFROM FILMS [as] fWHERE f.titolo=“Via col vento”

Page 45: 4- Basi di dati  Object Oriented

45

Select...From...Where...(Semantica)Select...From...Where...(Semantica)• L’interrogazione produce in uscita un bag di oggetti• Il bag è calcolato per tutti i possibili valori delle variabili nel per tutti i possibili valori delle variabili nel

FROM in cicli annidati. in cicli annidati.• Se una qualsiasi delle combinazioni di valori per queste variabili

soddisfa la condizione della clausola WHERE allora l’oggetto descritto nella clausola SELECT è aggiunto al BAG.

Nell’esempio:

SELECT f.anno FROM Films f WHERE f.titolo =“Via col vento”• SEMANTICA

FOR EACH f IN FILMS DO IF f. titolo = “Via col vento” ADD f.anno TO output_bag

Page 46: 4- Basi di dati  Object Oriented

46

Select...From...Where... in OQLSelect...From...Where... in OQL• Query: Ritrovare il nome degli attori del

film “Casablanca”. SELECT a.nome FROM Films f , f.attori a WHERE f.titolo= “Casablanca”

SEMANTICAFOR EACH f IN Films DO FOR EACH a IN f.attori DO IF f. titolo = “Casablanca” THEN ADD a.nome TO output_bag.

Page 47: 4- Basi di dati  Object Oriented

47

Eliminazione di duplicati

• Query: Cerca i nomi degli attori di Film della “Disney”.

SELECT DISTINCT a.nome

FROM Films f, f.attori a

WHERE f.possedutoDa.nome=“Disney”.

Page 48: 4- Basi di dati  Object Oriented

48

Tipi di output complessiQuery: Coppie di attori che vivono allo stesso indirizzo:

SELECT DISTINCT Struct(attore1:a1, attore2:a2) FROM Attori a1, Attori a2

WHERE a1.indirizzo=a2.indirizzo AND a1.nome<a2.nome

– l’ordine di comparsa degli attori nella coppia non interessa (cioè si tratta della stessa coppia che va pertanto eliminata).

– tipo del risultato: SET ( Struct N attore1:Attore,attore2:Attore)

Page 49: 4- Basi di dati  Object Oriented

49

Sotto-interrogazioni

• Query: Trova gli attori dei film di DISNEY

SELECT DISTINCT a.nome FROM(SELECT f FROM FILMS f WHERE f.posseduto_da.nome=“Disney”) d, d.attori a

La clausola FROM contiene due cicli annidati:• nel primo la variabile d varia su tutti i film della “Disney”• nel secondo la variabile a varia su tutti gli attori del film d.

Page 50: 4- Basi di dati  Object Oriented

50

Ordinamento del risultato• Il risultato di questa interrogazione è una lista di

oggetti della classe (extend) Films ordinata per:– Lunghezza del film– Titolo del film

come in SQL l’ordine, per default è crescente:

SELECT fFROM Films fWHERE f.posseduto_da.nome=“Disney”ORDER BY f.lunghezza, f.titolo

Page 51: 4- Basi di dati  Object Oriented

51

Operatori insiemistici• UNION per ; INTERSECT per ; EXCEPT per –• Producono BAG a meno che non sia espressamente

indicato il DISTINCT(SELECT DISTINCT f

FROM Films f, f.attori a

WHERE a.nome= “Harrison Ford”)

EXCEPT

(SELECT DISTINCT f

FROM Films f

WHERE f.possedutoDa.nome=“Disney”)

in questo caso il tipo del risultato è: SET < Film>

Page 52: 4- Basi di dati  Object Oriented

52

Espressioni di aggregazione• COUNT: Può essere applicato a qualsiasi collezione• SUM e AVG: Applicabile a collezioni di tipi aritmetici come interi• MIN e MAX : Collezioni qualsiasi i cui valori possono essere confrontati AVG( SELECT f. lunghezza FROM Films f ) La sottointerrogazione estrae le componenti

lunghezza dai Films. Il risultato è il bag delle lunghezze.

A tale bag viene applicato l’operatore AVG che restituisce la lunghezza media di tutti i films.

Page 53: 4- Basi di dati  Object Oriented

53

Espressioni con quantificatori• E’ possibile controllare se tutti ( o almeno uno) i

membri di un insieme soddisfano una condizione.• Posto:

• x: variabile• S: insieme• C(x) condizione sulla variabile

– FOR ALL x in S : C(x)

True se ogni xS soddisfa C(x), False altrimenti

– EXISTS x in S : C(x)

True se almeno un x S soddisfa C(x), False altrimenti

Page 54: 4- Basi di dati  Object Oriented

54

Espressioni con quantificatori (Esempio)Espressioni con quantificatori (Esempio)• Trovare tutti gli attori dei film della DISNEY

SELECT a FROM Attori a

WHERE EXISTS f IN a.recitaIn:

f.posseduto_da .nome=“Disney”

• Trovare gli attori che recitano solo in film della DISNEY

SELECT a FROM Attori a

WHERE FOR ALL f IN a.recitaIn:

f.posseduto_da .nome= “Disney”