Sei sulla pagina 1di 1

Basi di Dati 2 Prof. Stefano Paraboschi – 13 Febbraio 2008 – Tempo: 2h

A. Basi di dati Attive. (7 punti) Si consideri la base di dati seguente:

OSPEDALE( Nome, Città, Regione, N-Posti, Primario ) MEDICO( Matricola, Nome, Ospedale, Specialità ) PAZIENTE( NumTessera, DataN, LuogoN, Residenza, Medico-Curante ) ANALISI( NumTess-Paz, Data, Tipo, Risultato, Ospedale ) RICOVERO( NumTess-Paz, Ospedale, Data-In, Data-Out, Problema)

Scrivere un insieme di regole attive che avvertono il medico curante di un qualunque paziente non appena questi viene accettato in un ospedale, oppure ne viene dimesso, oppure infine divengono noti i risultati di una analisi. Si usi un servizio SendMail() che accetti come parametri gli opportuni valori per effettuare la comunicazione.

B. Basi di Dati Distribuite. (6 punti) Si ha una base di dati relazionale per un'università, con le seguenti tabelle:

STUDENTE( Matr, Nome, Sede )

L'università ha 3 sedi diverse (Sede1, Sede2 e Sede3), ciascuna con un proprio database; esiste poi un centro elaborazione dati di ateneo, collegato con tutte le sedi. La topologia della rete è a stella, con il centro elaborazione dati al centro. Progettare una frammentazione dei dati che non presenti ridondanza e mantenga i dati vicino agli utenti dei dati stessi, tenendo conto che nella grande maggioranza dei casi gli studenti sono iscritti a corsi della propria sede; in alcuni rari casi, gli studenti possono inserire nel proprio piano degli studi corsi di sedi diverse dalla propria.

Mostrare poi ai livelli di trasparenza di frammentazione e di linguaggio la gestione di due comandi:

(1) il trasferimento dello studente "Mario Rossi'' (matr. 623372) da Sede1 a Sede2; (2) la stampa dell'elenco degli iscritti al corso di "Basi di dati 2'' offerto presso Sede1.

CORSO( CodCorso, Titolo, Docente, Sede )

ISCRIZIONE( Matr, CodCorso, Anno )

C. XML e OQL. (11 punti)

Il seguente DTD è relativo a varie esibizioni circensi:

<!ELEMENT Spettacoli (Artista+, Clan+, Esibizione)> <!ELEMENT Esibizione (Nome, Numero+, NumeroArtistiCoinvolti)> <!ELEMENT Numero (Nome, Tipologia, RefArtista+)> <!ELEMENT Artista (NomeD'Arte, NomeVero, CognomeVero)>

<!ATTLIST Artista Id ID #REQUIRED> <!ELEMENT Clan (NomeClan, RefArtista+ )> <!ELEMENT RefArtista (EMPTY )> <!ATTLIST RefArtista ref IDREF #REQUIRED>

Gli elementi non ulteriormente specificati contengono solo PCDATA. I nomi dei numeri sono identificatori univoci, come anche i nomi delle esibizioni che li raccolgono.

1)

Estrarre in XQuery le esibizioni in cui c’è almeno un numero che coinvolge tutti gli artisti dell’esibizione. (2 p)

2)

Estrarre in XQuery tutti i numeri che si ripetono in almeno 10 esibizioni. (2 p)

3)

Estrarre in XQuery i numeri eseguiti da soli membri del clan "MacLeod" (2 p)

4)

Definire uno schema a oggetti per rappresentare gli stessi dati ed esprimere le prime due interrogazioni in OQL. (5p)

D.

Controllo di Concorrenza. (5 punti)

Si hanno 2 transazioni T1 e T2 che eseguono entrambe la coppia di operazioni r(x) w(x). L’esecuzione delle 2 transazioni in modo concorrente può dare luogo a 6 diversi schedule. Classificare ciascuno degli schedule rispetto all’appartenenza alle classi CSR, TS-multi e 2PL-strict.

E. Prevenzione del deadlock. (3 punti)

Illustrare brevemente le tecniche di prevenzione del deadlock "wait-die'' e "wound-wait''. Confrontare poi il loro comportamento in un contesto in cui la precedenza è data alle transazioni più vecchie (il timestamp viene conservato quando la transazione viene riavviata). Si illustri infine il vantaggio principale di ciascuna delle due alternative.