Tesina SIS
Antonello Scarano
Luigi Tullio
Compito Assegnato




Svolgere sei compiti d’esame di basi di dati in
modo autonomo.
Progettare lo schema globale insieme.
Svolgere il lavoro di integrazione dei dati.
Presentare il lavoro svolto ed eventuali
osservazioni.
Prime Osservazioni



Specifiche troppo dettagliate.
Schemi da integrare troppo simili.
Modifiche alla traccia iniziale.
Mapping GAV
Global as View: lo schema globale è definito in
termini di viste sugli schemi sorgente (locali).


Pregi e difetti
Quando una sorgente cambia è necessario
modificare il mapping o ripensare lo schema
globale
L’elaborazione delle query in genere è molto
semplice (unfolding)
Mapping LAV
Local as View: gli schemi locali sono definiti in termini di
viste sullo schema globale.



Pregi e difetti
Consentono un’alta modularità e riusabilità: se cambia
una sorgente è necessario modificare solo la sua
definizione
Facile estensibilità: aggiungere una sorgente al sistema
di integrazione consiste solo nel definire una nuova
vista
La valutazione delle query è difficile (è necessaria una
riformulazione delle query a run-time)
Separazione Compiti



Diversificazione punti di vista
Analisi e commenti indipendenti
Redazione tesina come punto d’incontro
Il mio compito



Focalizzare l’attenzione su GAV
Aspetto critico sul lavoro compiuto
Carpire concetti e trarre conclusioni
Esercizio 1(schema globale)
Esercizio 1(Sorgente A)
Esercizio 1(sorgente B)
Problema!





Specifiche stringenti
Schemi speculari
Nessuna rilevanza mapping
GAV e LAV immediati
La realtà è diversa!!
Mapping (banale!)

[ Prototipo,

[Collaudo,

[Pista,

[Banco,
………
Prototipo(X,Y,Z) :- PrototipoA(X,Y,Z)
Prototipo(X,Y,Z) :- PrototipoB(X,Y,Z) ]
Collaudo(X,Y,Z,K) :- CollaudoA(X,Y,Z,K)
Collaudo(X,Y,Z,K) :- CollaudoB(X,Y,Z,K) ]
Pista (X,Y,Z,K,Q,W,H,J) :- Pista(X,Y,Z,K,Q,W,H,J)
Pista (X,Y,Z,K,Q,W,H,J) :- Pista(X,Y,Z,K,Q,W,H,J) ]
Banco(X,Y,Z,K,Q) :- BancoA(X,Y,Z,K,Q)
Banco(X,Y,Z,K,Q) :- BancoB(X,Y,Z,K,Q) ]
Uno spunto
A partire dalla definizione dei mapping sia
GAV che LAV forse abbiamo l’opportunita
di comprendere meglio quello che si
nasconde dietro la struttura dei dati stessi.
Esempio troppo chiaro in questo caso con
l’entità “Autorizzazione” della sorgente A.
Esercizio 2(schema globale)
Esercizio 2(sorgente A)
Esercizio 2(sorgente B)
Mapping GAV





Progettazione mirata (schema globale dettagliato)
Come si comporta il mapping?
GAV immediato
Granularità non un problema
Difficoltà: dispersione dell’informazione o
mancanza
Mapping GAV/2




[Prenotazione, Prenotazione(X,Y) :- PrenotazioneA(X,Y,Z,K)
Prenotazione(X,Y) :- PrenotazioneB(X,Y,Z,K) ]
[Effettua, Effettua(X,Z,Y) :- PrenotazioneA(X,A,Y,Z)
Effettua(X,Z,Y) :- PrenotazioneB(X,A,Y,Z)]
[Collettiva, Collettiva(X,Z,Y,K) :- CollettivaA(X,Y,Z,K,A)
Collettiva(X,Z,Y,K) :- CollettivaB(X,Y,Z,K,A)]
[Singola,
Singola(X) :- SingolaA(X,Y,Z,K,A,B)
Singola(X) :- SingolaB(X,Y,Z,K,A,B)]
………
Mapping LAV
[PrenotazioneA,
PrenotazioneA(X,Y,Z,K) :Prenotazione(X,Y),Effettua(X,Z,K) ]
 [CollettivaA,
CollettivaA(X,Y,Z,K,A) :Collettiva(X,Z,Y,K),Quale(X,A) ]
 [SingolaA, SingolaA(X,Y,Z,K,A,B) :- PSP(K,Z,A,Y,X),
Per(X,B)]
………

Ossevazioni sul LAV



Opposto al GAV
Semplici join sui dati
Ancora: il problema è la dispersione dei dati
GAV e LAV assieme
Si intuisce che analizzando i mapping possiamo
ricavare informazioni su quello che si sta
cercando di mappare.
Esempio
“PostoAssegnato” non mappato in nessuno dei
due schemi.
Informazione spalmata su troppe tabelle
Illustrazione esercizio 3






Specifiche molto vaghe (solo alcune linee guida)
Risultato: basi dati differenti
Attenzione sul GAV
Schema globale molto dettagliato (contiene tutte
le informazione di entrambe le sorgenti)
Politica del reperimento “per forza” di tutti i dati
Assunzione iniziale: inserimenti leciti delle basi
Esercizio 3(schema globale)
Esercizio 3(sorgente A)
Esercizio 3(sorgente B)
Il mapping GAV
1.
Mapping diretto. Oss: chiavi differenti!
Partita(DataOra, Stadio, Città,SquadraA, SquadraB, CFArbitro) GLOB
Partita(DataOra, SquadraA, SquadraB, CFArbitro, Luogo, Citta) SORG A
Partita(DataOra, Stadio, Città,SquadraA, SquadraB, NomeArbitro,
CognomeArbitro) SORG B
Possiamo reperire il CFArbitro anche per la sorgente B
con meccanismo chiarito in seguito
2.
Entità coinvolte identiche
Squadra(X, Y, Z, A, B) :- SquadraA(X, Y, Z, A, B)
Squadra(X, Y, Z, A, B) :- SquadraB(X, Y, Z, A, B)]
Il mapping GAV/2
3. Ricerca attraverso query specifiche dell’informazione
sui gol marcati:
Risultato(DataOraPartita, StadioPartita, CittàPartita, NGolA, NGolB)GLOB
Partita(DataOra, SquadraA, SquadraB, Arbitro, Luogo, Citta) SORG A
Marcatura(DataOra, SquadraA, SquadraB, Minuto, CFGiocatore) SORG A
[NumeroGolA: F = Count(Marcatura(X, Y, Z, M, A), Partita(X, Y, Z, N, O, P),Giocatore(A, Y) )]
[NumeroGolB: G = Count(Marcatura(X, Y, Z, M, A), Partita(X, Y, Z, N, O, P),Giocatore(A, Z))]
Il mapping con la sorgente B è immadiato
Oss: le chiavi differenti non sono un problema; assunzione inserimenti leciti!!
Il mapping GAV/3
4. Mapping immediato con la sorgente A
Problema sorgente B:differenza chiavi.Generazione di un
valore fittizio univoco per non perdere informazione.
Conseguenza: non stiamo inserendo l’informazione reale
desiderata, ma meglio che perdere dati.
Persona(CF, Nome, Cognome, Età) GLOB
Giocatore(NMaglia, NomeSquadra, Nome, Cognome, Ruolo, Eta) SORG B
Arbitro(Nome, Cognome, Partite, Città) SORG B
Oss: i dati per popolare l’entità Persona del globale, le andiamo a reperire dalle
tabelle Arbitro e Giocatore della sorgente B: è chiaro che noi siamo a
conoscenza del significato logico del contenuto delle tabelle.
Il mapping GAV/4
5. Vale anche qui il ragionamento fatto al punto 4.
Chiaramente si riusano gli identificativi generati al passaggio
precedente.
Nel mapping con la sorgente A mancanza informazione: ignorare
inserimenti su quei campi, oppure “sporcare” il GAV con un
GLAV (forzando a NULL gli inserimenti sui dati mancanti)
Giocatore(CF, NMaglia, Ruolo, NomeSquadra) GLOB
Giocatore(CF, NomeSquadra) SORG A
Giocatore(NMaglia, NomeSquadra, Nome, Cognome, Ruolo, Eta) SORG B
Il mapping GAV/5
6. Stesso ragionamento utilizzato per i punti 4e5.
Mapping diretto con la fonte A
Arbitro(X, Y) :- ArbitroB(A, C, Y, D)
7. Mapping possibile solo sulla fonte A: (differenza
sostanziale dai punti precedenti)
Allenatore (X) :- AllenatoreA(X)
8. Mapping diretto
Stadio(X, Y) :- LuogoA(X, Y)
Stadio(X, Y) :- CentroSportivoB(X, Y)]
Il mapping GAV/6
9.
Mapping diretto
Città(X) :- Città A(X)
Città(X) :- Città B(X)
10. Mapping su A con semplice join.
Mapping su B a patto di rispettare vincolo di chiave esterna sui
codici auto-generati dal sistema.
Marcatura(DataOraPartita, StadioPartita, CittàPartita, CFMarcatore,Minuto)GLOB
Partita(DataOra, SquadraA, SquadraB, Arbitro, Luogo, Città) SORG A
Marcatura(DataOra, SquadraA, SquadraB, Minuto, CFGiocatore) SORG A
Marcatura(DataOraPartita, StadioPartita, CittàPartita, NMagliaMarcatore,
NomeSquadraMarcatore, Minuto) SORG B
Il mapping LAV
1.
2.
3.
4.
Controllare se “Partita” ha un “Risultato”
Partite “nonGiocate” come differenza tra
“Partite” e “Giocate”
Il campo “Allenatore” inteso come nome e
cognome dell’allentare. Sufficiente un join per
reperire l’informazione
Perdita informazione (irreperibile all’interno
del globale)
Conclusioni









GAV e LAV non sempre bastano
GAV “sfacciato”: globale come vista sulle sorgenti (difficile)
LAV più “modesto”: sorgenti viste sul globale
Buono strumento di analisi
E’ necessario derivare le relazioni interschema tra le varie
sorgenti (GAV).
Le relazioni interschema tra le sorgenti possono essere dedotte
dai mapping (LAV).
Impossibilità a volte di soluzione per alcuni problemi
Analizzare bene la tecnica da usare
Difficoltà di automatizzare: bisogna conoscere il rapporto con la
realtà di quanto si vuole manipolare
Presentazione Luigi Tullio

DB 3 “Invenzioni”:



DB 4 “Ordini”:



Specifica dettagliata  Schemi Simili
Caso in cui si usa una chiave differente
Specifica dettagliata  Schemi Simili
Caso in cui una relazione viene ricostruita da altre
DB 5 “Prenotazioni”:




Specifiche generiche  Schemi differenti
Schema globale con alcune informazioni più dettagliate 
Gav più complesso.
Schema gobale con alcune informazioni mancanti  Lav più
complesso
4 casi di Gav e 4 casi di Lav
DB 3 – “Invenzioni”
Globale
Campo
Data
(1,n)
Invenzione
(1,1)
BrevettataIn
(0,1)
InvenzioneUtile(Unicod, NBrevetto,
NomeNazione, Finanziamento,
CFVaglia, IstScolastico)
N.Brevetto
Ideata
PIL
Selezionata
CF
Nome
Cognome
Nome
(0,n)
Età
(0,n)
Persona
Nazione
(0,n)
Vaglia
(0,n)
(1,1)
InvenzioneUtile(Cod.Univoco.IU, NBrevetto,
NomeNazione, Finanziamento, CF,
CodiceIstScolastico)
Finanziamento
(1,1)
InvenzioneUtile
Sesso
Unicod
(1,1)
Campo
Sorgente A
(1,1)
StudiatoIn
DataPres
(1,n)
Proponente
Invenzione
Sita
(1,1)
DovePresenta
(0,1)
Codice
(0,n)
Nome
N.Brevetto
ChiPresenta
(0,n)
Ist.Scolastica
Associata
(1,1)
CF
[InvenzioneUtile,
InvenzioneUtile(X, Y, Z, K, A, B) :InvenzioneUtile(X, Y, Z, K, A, B) ]
GAV
Nome
(0,n)
Età
Nazione
(0,n)
Nome
[InvenzioneUtile,
InvenzioneUtile(X, Y, Z, K, A, B) :InvenzioneUtileA(X, Y, Z, K, A, B)
InvenzioneUtile(X, Y, Z, K, A, B) :InvenzioneUtileB(X, Y, Z, K, A, B) ]
PIL
Persona
Cognome
(0,n)
(0,n)
ChiVaglia
(1,1)
Finanziamento
(1,1)
InvenzioneUtile
Cod.Univoco.IU
(1,1)
Sesso
(1,1)
Diploma
Riferita
Proponente
LAV
Codice
(0,n)
(0,n)
Nome
Ist.Scolastica
(1,1)
DB 4 – “Ordini”
Data Ora
Globale
(1,1)
Ordine
(0,1)
N.Tel
Quantità
(1,n)
Ordinato
(0,1)
Cliente(Nome, DataNascita, Reddito, AnniDaCliente)
Processato(DataOrd, OraOrd, NomeCli,
DataNasCli, DataCon, OraCon, NomeCorr)
Effettuato
ISA-PO
(1,n)
ISA-NO
AnniDaCliente
Cliente
IndirizzoConsegna
RedditoAnnuo
(0,n) (0,1)
ConsegnaPer(NomeC, DataNC, Data, Ora,
NomeCorriere)
Sorgente A
(1,1)
(1,1)
Data Ora
NonProcess.
DataNascita Nome
(1,1)
Processato
(0,n)
(1,1)
CodiceIdentif.
Prodotto
Prezzo
Associato
(0,1)
Ordinato
(0,1)
ISA-PO
ISA-NO
AnniDaCliente
(1,1)
Consegna
Usa
Cliente
(0,n)
ServizioCorriere
N.Tel
Data Ora
Nome
IndirizzoConsegna
RedditoAnnuo
(1,1)
(0,1)
Durata
(1,n)
Perc.Iva
(1,n)
(1,n)
Quantità
Effettuato
(1,n)
ConsegnaPer
Ordine
N.Tel
(1,1)
NonProcess.
Nome DataNascita
Processato
(0,n)
(1,1)
[ConsegnaPer,
GAV
ConsegnaPer(Z, K, A, B, C) :ProcessatoA(X, Y, Z, K, A, B, C),
OrdineA(X, Y, Z, K, D)
ConsegnaPer(X, Y, Z, K, A) :- PerB(X, Y, Z, K, A)]
CodiceIdentif.
Prodotto
Prezzo
Associato
Perc.Iva
(1,n)
(1,1)
Consegna
Usa
(0,n)
ServizioCorriere
N.Tel
Durata
Data Ora
Nome
DB 5 – Differenze A
Globale
Categoria
Nazione
CF
Sta
(1,1)
Nome Cognome DataNascita
Nome
Nome Cognome DataNascita
Albergo
(0,n)
Contiene
Sorgente A
Nome
(0,n)
Cliente
PerChi
(0,n)
(0,n)
Nome
Presente
(0,n)
Cliente
(1,1)
PerChi
(0,n)
Pacchetto
Effettua
Data Durata
DataOraP DataOraA
Prenotazione
(0,n)
Partenza
(0,N)
IdViaggio
Arrivo
Con
(1,1)
DataOraPartenza
(1,1)
(1,1)
(0,n)
Luogo
Viaggio
Nome
(0,n)
Nome
Partenza
Sito
Codice
(0,n)
Sito
Relativo
(0,n)
(1,1)
(1,1)
(0,n)
Nome
Città
(0,1)
Città
(1,n)
(1,1)
(1,1)
(1,n)
(1,1)
(1,1)
Biglietto
Presente
Costo
(1,1)
(1,1)
Codice
Effettua
Nome
Prezzo
Sconto
(0,n)
DataOra
(1,1)
ISA-P
(0,n)
Nazione
Arrivo
(1,1)
(1,1)
(0,n)
(0,n)
(0,n)
Luogo
(0,1)
(0,1)
(0,1)
Con
Nome
(0,n)
(0,1)
(0,1)
ISA-Ae
ISA-Po
Tel
Compagnia
(1,1)
(1,1)
(0,1)
Porto
(1,n)
ISA-A
(1,1)
ISA-A
(1,1)
(0,n)
ISA-St
Nome
(1,1)
Aereoporto
(0,1)
Stazione
(0,1)
(0,1)
AereaOpera
(1,n)
ISA-A
(1,1)
Tel
Compagnia
ISA- A
(1,1)
(1,n)
ISA-F
ISA-N
(1,1)
(1,1)
NavaleOpera
Aerea
(1,1)
(1,n)
Ferroviaria
Ferroviaria
Aerea
Navale
(1,1)
AereaOpera
Della
Navale
(1,n)
NavaleOpera
(1,n)
Della
(0,n)
DB 5 – Differenze B
Globale
Categoria
Sorgente B
Nome
Categoria
Contiene
Contiene
Nome Cognome DataNascita
Sta
(1,1)
Nome Cognome DataNascita
Nome
(0,n)
Cliente
Nazione
PerChi
(0,n)
Pacchetto
Durata
DataOra
(1,1)
(0,n)
Effettua
Codice
Effettua
Data Durata
DataOraP DataOraA
Prenotazione
(1,1)
(0,1)
ISA-PP
Nome
Prezzo
(1,1)
Prenotazione
(1,n)
(0,1)
Città
(1,1)
(0,1)
(0,1)
(0,n)
(0,1)
(0,n)
(1,1)
(1,1)
Compagnia
Presente
Costo
(1,1)
PerChi
(0,n)
Pacchetto
DataOra
(1,1)
ISA-P
(0,n)
(0,n)
Cliente
(1,1)
Data
(1,1)
Sta
(1,1)
Albergo
(0,n)
Nome
Albergo
(0,n)
ISA-PN
Partenza
ISA-PA
ISA-PF
Sito
Codice
Nome
DataOraP DataOraA
(1,1)
DataOraA
Arrivo
(1,1)
(0,n)
(0,n)
Con
PreNavale
Luogo
(0,1)
(0,1)
(1,1)
(0,1)
(1,1)
DataOraP PreFerroviaria (1,1) DataOraP
(1,1)
(1,n)
(1,1)
DataOraA
(1,1)
PreAerea
(1,1)
(1,1)
Nome
ParP
(0,n)
(0,1)
Compagnia
(0,1)
ISA-Ae
ISA-Po
Tel
(1,1)
(1,1)
(0,1)
Porto
ArrP
(1,1)
Aereoporto
(0,n)
Stazione
(0,n)
(1,n)
ISA-A
ISA-A
ParS
(1,n)
(0,n)
Porto
(1,1)
(1,1)
ISA-A
(1,1)
Ferroviaria
(1,1)
Nome
Nome
StaS
StaA
Navale
(0,n)
(1,1)
(1,n)
AereaOpera
Aereoporto
(1,1)
StaP
(1,n)
(0,n)
NavaleOpera
Aerea
ArrA
ParA
(0,n)
Stazione
Nome
(1,1)
ArrS
ISA-St
(0,n)
(0,n)
Città
(0,n)
Della
Nome
Nazione
(0,n)
GAV – 1
Informazione Mancante + Chiave Diversa
Globale:
Sorgente A:
Sorgente B:
Cliente(Nome, Cognome, DataNascita, Tel)
Cliente(Nome, Cognome, DataNascita, CF)
Cliente(Nome, Cognome, DataNascita, Tel)
[Cliente,
Cliente(X, Y, Z, NULL) :- ClienteA(X, Y, Z, A),
Cliente(X, Y, Z, K) :- ClienteB(X, Y, Z, K) ]
Il NULL sul campo “Tel” è stato necessario perchè nella sorgente A
questa informazione non è presente.
I vincoli di chiave sul globale vengono rispettati dai dati della
sorgente B dato che fa uso della stessa chiave, per quelli
provenienti dalla sorgene A teoricamente non è garantati che gli
elementi abbiano i campi nome, cognome e data di nascita
univoci.
GAV – 2a
Informazione su più relazioni
Globale
Prenotazione(Codice, DataOraPrenotazione, DataOraPartenza, DataOraArrivo, Costo, NomeLuogoPartenza,
CittàPartenza, NomeLuogoArrivo, CittàArrivo, NomeCompagnia, NomeChiCompra, CognomeChiCompra,
DataNascitaChiCompra)
Sorgente A
Cliente(Nome, Cognome, DataNascita, CF)
Biglietto(Codice, Prezzo, Sconto, CFChiCompra, IdViaggio)
Viaggio(IdViaggio, NomeLuogoPartenza, NomeCittàPartenza, NomeLuogoDestinazione, NomeCittàDestinazione,
NomeCompagnia, DataOraPartenza)
[Prenotazione,
Prenotazione(A, NULL, B, NULL, E, F, G, H, I, L, M, N, O) :BigliettoA(A, E, Y, CF, D), ClienteA(M, N, O, CF), ViaggioA(D, F, G, H, I, L, B)
Prenotazione(A, B, C, D, E, F, G, H, I, L, M, N, O) :- PrenotazioneB(A, B, L, E, M, N, O), PreAereaB(A, C, F, G, D, H, I)
Prenotazione(A, B, C, D, E, F, G, H, I, L, M, N,O) :- PrenotazioneB(A, B, L, E, M, N, O), PreNavaleB(A, C, F, G, D, H, I)
Prenotazione(A, B, C, D, E, F, G, H, I, L, M, N,O) :- PrenotazioneB(A, B, L, E, M, N, O), PreFerroviariaB(A, C, F, G, D, H,
I) ]
Nella sorgente A le informazioni per la relazione Prenotazioni del globale sono distribuite su tre relazioni
Biglietto, Cliente e Viaggio quindi l’asserzione deve essere composta dalle tre relazioni. Inoltre abbiamo
assunto che il codice del biglietto della sorgente A viene usato come codice della prenotazione dello
schema globale.
GAV – 2b
Globale
Prenotazione(Codice, DataOraPrenotazione, DataOraPartenza, DataOraArrivo, Costo, NomeLuogoPartenza,
CittàPartenza, NomeLuogoArrivo, CittàArrivo, NomeCompagnia, NomeChiCompra, CognomeChiCompra,
DataNascitaChiCompra)
Sorgente B
Prenotazione(Codice, DataOraPrenotazione, NomeCompagnia, Prezzo, NomeChiCompra, CognomeChiCompra,
DataNascitaChiCompra)
PreAerea(CodPrenotazione, DataOraPartenza, NomeAereoportoPartenza, NomeCittàPartenza, DataOraArrivo,
NomeAereoportoArrivo, NomeCittàArrivo)
PreNavale(CodPrenotazione, DataOraPartenza, NomePortoPartenza, NomeCittàPartenza, DataOraArrivo,
NomePortoArrivo, NomeCittàArrivo)
PreFerroviaria(CodPrenotazione, DataOraPartenza, NomeStazionePartenza, NomeCittàPartenza, DataOraArrivo,
NomeStazioneArrivo, NomeCittàArrivo)
[Prenotazione,
Prenotazione(A, NULL, B, NULL, E, F, G, H, I, L, M, N, O) :BigliettoA(A, E, Y, CF, D), ClienteA(M, N, O, CF), ViaggioA(D, F, G, H, I, L, B)
Prenotazione(A, B, C, D, E, F, G, H, I, L, M, N, O) :PrenotazioneB(A, B, L, E, M, N, O), PreAereaB(A, C, F, G, D, H, I)
Prenotazione(A, B, C, D, E, F, G, H, I, L, M, N,O) :PrenotazioneB(A, B, L, E, M, N, O), PreNavaleB(A, C, F, G, D, H, I)
Prenotazione(A, B, C, D, E, F, G, H, I, L, M, N,O) :PrenotazioneB(A, B, L, E, M, N, O), PreFerroviariaB(A, C, F, G, D, H, I) ]
Per quanto riguarda la sorgente B sono in parte presenti nella relazione Prenotazione e in parte presenti nelle relazioni
PreAerea, PreNavale e PreFerroviaria.
GAV – 3
Relazione da un’attributo
Globale:
Sorgente A:
Sorgente B:
Compagnia(Nome, Telefono)
Compagnia(Nome, Telefono)
Prenotazione(Codice, DataOraPrenotazione, NomeCompagnia,
Prezzo, NomeChiCompra, CognomeChiCompra,
DataNascitaChiCompra)
[Compagnia,
Compagnia(X, Y) :- CompagniaA(X, Y)
Compagnia(X, NULL) :- PrenotazioneB(A, B, X, C, D, E, F) ]
Nella sorgente B l’informazione su una compagnia non è mantenuta in una relazione ma
in un campo della relazione Prenotazione, quindi l’informazione sul nome della
compagnia può essere ricavato da questo campo. Per le compagnie provenienti dalla
sorgente B non è possibile ottenere l’informazione sul numero di telefono.
Per preservare il vincolo di chiave sulla relazione del globale bisogna prevedere di non
considerare una stessa compagnia che è presente in entrambe le sorgenti.
GAV – 4
Entità non presente
Globale :
Pacchetto(CodicePrenotazione, Data, Durata,
Albergo, CittàAlbergo)
Sorgente A:
---
Sorgente B:
Pacchetto(CodicePrenotazione, Data, Durata,
NomeAlbergo, CittàAlbergo)
[Pacchetto,
Pacchetto(X, Y, Z, K, A) :- PacchettoB(X, Y, Z, K, A) ]
Qui ci troviamo nel caso in cui la sorgente A non contiene per niente un
concetto, infatti nel globale è presente la relazione Pacchetto che
rappresenta un viaggio con incluso l’alloggio in un’albergo. Quindi
per questa relazione il mapping estrae le informazione sola dalla
sorgente B che contiene questi dati.
LAV – 1
Informazione su più relazioni
Globale:
Prenotazione(Codice, DataOraPrenotazione, DataOraPartenza, DataOraArrivo,
Costo, NomeLuogoPartenza, CittàPartenza, NomeLuogoArrivo, CittàArrivo,
NomeCompagnia, NomeChiCompra, CognomeChiCompra,
DataNascitaChiCompra)
Aerea(Nome, Nazione)
Sorgente B:
PreAerea(CodPrenotazione, DataOraPartenza, NomeAereoportoPartenza,
NomeCittàPartenza, DataOraArrivo, NomeAereoportoArrivo, NomeCittàArrivo)
[PreAereaB,
PreAereaB(A, B, C, D, E, F, G) :Prenotazione(A, M, B, E, N, C, D, F, G, O, P, Q, R), Aerea(O, S) ]
La relazione PreAerea rappresenta le prenotazioni aeree. Questa informazioni possono
essere prese dalle relazioni del globale Prenotazione e Aerea.
LAV – 2
Sorgente con un sottoinsieme dei dati del globale
Globale:
Prenotazione(Codice, DataOraPrenotazione, DataOraPartenza, DataOraArrivo, Costo,
NomeLuogoPartenza, CittàPartenza, NomeLuogoArrivo, CittàArrivo, NomeCompagnia,
NomeChiCompra, CognomeChiCompra, DataNascitaChiCompra)
PerChi(CodicePrenotazione, Nome, Cognome, DataNascita)
Aerea(Nome, Nazione)
Sorgente B:
PerChi(CodicePrenotazioneAereo, Nome, Cognome, DataNascita)
[PerChiB,
PerChiB(A, R, Q, P) :PerChi(A, R, Q, P), Prenotazione(A, M, B, E, N, C, D, F, G, O, P, Q, R),
Aerea(O, S) ]
Nella sorgente B l’informazione che indica a chi è rivolta una prenotazione è mantenuta solo
per le prenotazioni aeree. Dato che nel globale questa relazione mantiene i riferimenti per
qualsiasi tipo di viaggio bisogna estrarre solo le prenotazioni che afferiscono ad una
compagnia aerea.
LAV – 3a
Chiavi differenti
Globale:
PerChi(CodicePrenotazione, Nome, Cognome,
DataNascita)
Sorgente A:
PerChi(CodiceBiglietto, CF)
Cliente(Nome, Cognome, DataNascita, CF)
[PerChi,
PerChi(A, B) :- PerChi(A, C, D, E) ]
La relazione PerChi permette di associare dei clienti alla prenotazione o
al biglietto. In entrambi gli schemi abbiamo questo concetto
rappresenato ma con una differenza, nello schema globale la chiave di
un cliente è il nome, cognome e data di nascita invece nella sorgente è
dato dal suo codice fiscale. Inoltre nel globale l’informazione sul
codice fiscale non esiste. A complicare le cose c’è il fatto che questi
campi appartengolo alle chiavi delle rispettive relazioni.
LAV – 3b
Per avere un mapping più adeguato abbiamo bisogno di un
metodologia mista gioè GLAV. Con questa metodologia si
possono realizzare asserzioni su viste di etrambe gli schemi.
Nel nostro caso si può estrarre dalla relazione Cliente della
sorgente anche il nome, cognome e data di nascita che
possono essere associati ai relativi campi dello schema del
globale. L’asserzione è la seguente:
[PerChi, PerChi(A, B), Cliente(N, C, D, B) :- PerChi(A, N, C, D) ]
Da questo caso è evidene come il mapping GLAV permetta
una più facile costruzione dello stesso mapping a discapito
di una più difficile fase di riformulazione delle query.
LAV – 4
Entità differenti ma associabili
Globale:
Prenotazione(Codice, DataOraPrenotazione, DataOraPartenza, DataOraArrivo, Costo,
NomeLuogoPartenza, CittàPartenza, NomeLuogoArrivo, CittàArrivo,
NomeCompagnia, NomeChiCompra, CognomeChiCompra, DataNascitaChiCompra)
Sorgente A:
Biglietto(Codice, Prezzo, Sconto, CFChiCompra,
IdViaggio)
Cliente(Nome, Cognome, DataNascita, CF)
[Biglietto,
Biglietto(A, B, C, D, E) :Prenotazione(A, F, J, H, B, I, L, M, N, O, P, E, F) ]
Dato che il codice della relazione Prenotazione è stato associato al codice della relazione
Biglietto, questo fa si che l’asserzione sia semplice.
Come il precedente caso, nella sorgente abbiamo il CF del cliente che compra invece nel
globale il Nome, Cognome e Data di nascita. Anche qui un mapping più efficace si
può ottenere non GLAV. La vista necessaria sul locale deve essere:
Biglietto(A, B, C, D, E), Cliente(P, E, F, D)
Scarica

PresentazioneScaranoTullio