CORSO DI BASI DI DATI Secondo Compitino
Transcript
CORSO DI BASI DI DATI Secondo Compitino
CORSO DI BASI DI DATI Secondo Compitino 22 maggio 2008 Esercizio 1 Si vuole automatizzare la gestione di un tennis club. Per ogni socio del club, identificato univocamente da un numero di tessera, si vuole memorizzare il nome, il cognome, l’indirizzo, uno o più recapiti telefonici, il livello e la scadenza dell’iscrizione. Il livello dei soci indica la loro qualità di gioco (1 scarso, 2 medio, 3 bravo) e può variare nel tempo. Il club gestisce diversi campi. Ogni campo è identificato univocamente da un numero ed è caratterizzato da una particolare superficie (in terra battuta, sintetica, in cemento). I campi sono utilizzati dai soci per lezioni private con istruttori o allenamenti individuali con amici/altri soci. La prenotazione del campo viene in ogni caso fatta a nome di un socio fissando data e ora di inizio della prenotazione (la durata della prenotazione è sempre di un’ora). Inoltre, i campi possono essere prenotati/utilizzati per le partite dei tornei che il club organizza e ai quali i soci possono partecipare. Ogni torneo è identificato da un nome, ha diverse edizioni (annuali) e può essere rivolto a uno o più livelli, per ognuno dei quali è previsto un premio per i primi tre classificati (che restano uguali per le diverse edizioni dello stesso torneo). Per ogni torneo si vuole memorizzare l’elenco dei soci iscritti ed il relativo livello di iscrizione. Inoltre, per ogni partita del torneo si vuole memorizzare la data, l’ora, il campo utilizzato, i due giocatori e il risultato finale. Si definisca uno schema Entità-Relazioni che descriva il contenuto informativo del sistema, illustrando con chiarezza le eventuali assunzioni fatte. Lo schema dovrà essere completato con attributi ragionevoli per ciascuna entità (identificando le possibili chiavi) e relazione. Vanno specificati accuratamente i vincoli di cardinalità e partecipazione di ciascuna relazione. Esercizio 2 Apportare le necessarie modifiche di ristrutturazione allo schema ER prodotto nell’esercizio precedente e tradurlo nello schema logico relazionale. Esercizio 3 Sia dato un file con 300.000 record memorizzati su un disco con dimensione del blocco di 2.048 byte. Supponiamo che i record di tipo unspanned abbiano lunghezza fissa di 300 byte, la dimensione del campo chiave primaria sia di 25 byte e quella di un secondo campo chiave candidata (non primaria) sia 20 byte, mentre quella del puntatore a blocco sia di 5 byte. 1. Assumendo che il file sia ordinato rispetto al campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave primaria con indice primario a singolo livello 2. Assumendo che il file sia ordinato rispetto al campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave primario con indice primario multilivello statico 3. Assumendo che il file sia ordinato rispetto al campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave candidata (non primaria) con indice secondario a singolo livello 4. Assumendo che il file sia ordinato rispetto al campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave candidata (non primaria) con indice secondario multilivello statico Esercizio 4 Sia dato un disco con dimensione del blocco di 2048 byte. Si consideri un B-albero che abbia come campo di ricerca un campo di dimensione 15 byte e la dimensione dei puntatori ai record dei dati sia 12 byte e quelli ai blocchi sia 10 byte. 1. Si calcoli l’ordine p del B-albero che massimizza l’occupazione dei blocchi 2. Si calcoli gli ordini p e pleaf del B+ -albero che massimizzano l’occupazione dei blocchi 3. Si calcoli l’ordine p del B-albero che massimizza l’occupazione dei blocchi nel caso la dimensione del campo di ricerca sia 10 byte 4. Si calcoli gli ordini p e pleaf del B+ -albero che massimizzano l’occupazione dei blocchi nel caso la dimensione del campo di ricerca sia 10 byte SOLUZIONI Esercizio 1 OSSERVAZIONI SUGLI ERRORI/IMPRECISIONI FREQUENTI: • Il club è il contesto/ambiente che la base di dati che si vuole progettare deve gestire e quindi non deve essere modellata come un’entità • La modellazione delle prenotazioni (fatte dai soci o relative ai tornei) attraverso una relazione non permette di controllare che non ci siano prenotazioni sovrapposte, questo invece può essere fatto utilizzando un’entità debole prenotazione (chiave debole data e ora) legata all’entità campo con una relazione identificante e al’entità socio con un’altra relazione uno a molti. • Si dice “Ogni torneo è identificato da un nome, ha diverse edizioni (annuali)...” e questo sta a indicare che dato un torneo posso definire un’entità debole che ne descrive le diverse edizioni. Entità sarà identificata dall’attributo nome ed ogni sua edizione è identificata dall’anno (oltre che dal nome del torneo di cui è edizione). La distinzione fra torneo ed edizione è necessaria in quanto per mantener traccia delle iscrizioni e delle partite bisogna costruire una relazione con l’entità edizione (con la particolare edizione del torneo a cui si riferiscono) mentre, si dice che i premi restano uguali nelle varie edizioni di un torneo e quindi devono essere riferiti all’entità torneo • “...per ogni partita del torneo si vuole memorizzare la data, l’ora, il campo utilizzato, i due giocatori e il risultato finale. Definita l’entità partita, le proprietà che si riferiscono ad altre entità dello schema, vedi giocatori (sono dei soci), campo, data e ora (se definiti attraverso un’entità prenotazione) non devono essere modellate come attributi ma attraverso delle relazioni con tali entità. • Le specializzazioni sono utilizzate per distinguere sottoclassi che presentano caratteristiche diverse. Non è corretto definire diverse specializzazioni di un’entità con nessun attributo o relazione che le distingue o tutte con gli stessi attributi. • I livelli possono essere modellati con un’entità che ad esempio ha il codice (1,2,3) e la relativa descrizione (scarso, medio, bravo) ma in tal caso, ogni volta che all’interno dello schema si fa riferimento al livello bisogna inserire una relazione con tale entità. • La partecipazione/cardinalità min:max di un’entità E rispetto ad una relazione R deve essere letta come “ogni istanza di entità E deve partecipare ad almeno min ed al più max istanze della relazione R”. Esercizio 2 Schema ristrutturato: Traduzione nel modello relazionale: CAM P O(numero, superf icie) N OT N U LL superf icie P REN OT AZION E(data, ora, campo, tipo, socio) N OT N U LL tipo f k (campo) ref erences CAM P O(numero) SOCIO(numeroT essera, nome, cognome, indirizzo, livello, scadenza) N OT N U LL nome, cognome, indirizzo, livello, scadenza T ELEF ON O(socio, numeroT elef ono) f k (socio) ref erences SOCIO(numeroT essera) T ORN EO(nome) P REM I(torneo, livello, primo, secondo, terzo) N OT N U LL primo, secondo, terzo f k (torneo) ref erences T ORN EO(nome) EDIZION E(torneo, anno) f k (torneo) ref erences T ORN EO(nome) EISCRIT T O(socio, torneo, edizione, livello) N OT N U LL livello f k (torneo, edizione) ref erences EDIZION E(torneo, edizione) f k (socio) ref erences SOCIO(numeroT essera) P ART IT A(campo, data, ora, giocatore1, punteggio1, giocatore2, punteggio2, torneo, edizione) N OT N U LL giocatore1, giocatore2, torneo, edizione f k (campo, data, ora) ref erences P REN OT AZION E(campo, data, ora) f k (torneo, edizione) ref erences EDIZION E(torneo, edizione) f k (giocatore1) ref erences SOCIO(numeroT essera) f k (giocatore2) ref erences SOCIO(numeroT essera) OSSERVAZIONI SUGLI ERRORI/IMPRECISIONI FREQUENTI: • Se la chiave di un’entità a cui fa riferimento un vincolo di chiave esterna è composto da più di un attributo devo specificare tutti gli attributi: Esempio non corretto: nella tabella EISCRITTO per descrivere il torneo a cui si riferisce la relazione non devo specificare un solo attributo edizione ma la coppia di attributi torneo, edizione Inoltre, su di esso non vanno definiti due distinti vincoli di chiave esterna, ma un solo vincolo di chiave esterna su due attributi: Esempio non corretto: f k (torneo) ref erences EDIZION E(torneo) e f k (edizione) ref erences EDIZION E(edizione) La versione corretta è riportata nella soluzione. Esercizio 3 1. Assumendo che il file sia ordinato rispetto il campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave primaria con indice primario a singolo livello: Calcoliamo il blocking factor: 2.048 bf r = b B R c = b 300 c = b6, 83c = 6 record per blocco B 2.048 bf ri = b V 1+V 2 c = b 25+5 c = b68, 23c = 68 entry per blocco Calcoliamo il numero di blocchi necessari: nb = d bfr r e = d 300.000 e = d50.000e = 50.000 blocchi per il file dei dati 6 nbi = d bfriri e = d bfnbri e = d 50.000 68 e = d735, 29e = 736 blocchi per il file indice Una ricerca binaria sul file indice primario richiede in media: dlog2 nbi e + 1 = dlog2 736e + 1 = d10e + 1 = 11 accessi 2. Assumendo che il file sia ordinato rispetto il campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave primario con indice primario multilivello statico: Calcoliamo il blocking factor: 2.048 bf r = b B R c = b 300 c = b6, 83c = 6 record per blocco B 2.048 bf ri = b V 1+V 2 c = b 25+5 c = b68, 27c = 68 entry per blocco Calcoliamo il numero di blocchi necessari: nb = d bfr r e = d 300.000 e = d50.000e = 50.000 blocchi per il file dei dati 6 Costruiamo l’indice multilivello: 50.000 primo livello: d ne f o e = d 68 e = d735, 29e = 736 blocchi 736 1 secondo livello: d ne f o e = d 68 e = d10, 82e = 11 blocchi 11 2 terzo livello: d ne f o e = d 68 e = d0, 16e = 1 blocco Una ricerca binaria sul file indice primario multilivello richiede: numero livelli + 1 = 3 + 1 = 4 accessi 3. Assumendo che il file sia ordinato rispetto il campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave candidata (non primaria) con indice secondario a singolo livello: Calcoliamo il blocking factor: 2.048 bf r = b B R c = b 300 c = b6, 83c = 6 record per blocco B 2.048 bf ri = b V 1+V 2 c = b 20+5 c = b81, 93c = 81 entry per blocco Calcoliamo il numero di blocchi necessari: nb = d bfr r e = d 300.000 e = d50.000e = 50.000 blocchi per il file dei dati 6 nbi = d bfriri e = d bfrri e = d 300.000 63 e = d3.703, 70e = 3.704 blocchi per il file indice Una ricerca binaria sul file indice secondario richiede in media: dlog2 nbi e + 1 = dlog2 3.704e + 1 = d12e + 1 = 13 accessi 4. Assumendo che il file sia ordinato rispetto il campo chiave primaria, determinare il numero di accessi a blocco richiesti da una ricerca sul campo chiave candidata (non primaria) con indice secondario multilivello statico Calcoliamo il blocking factor: 2.048 bf r = b B R c = b 300 c = b6, 83c = 6 record per blocco B 2.048 bf ri = b V 1+V 2 c = b 20+5 c = b81, 93c = 81 entry per blocco Calcoliamo il numero di blocchi necessari: nb = d bfr r e = d 300.000 e = d50.000e = 50.000 blocchi per il file dei dati 6 Costruiamo l’indice multilivello: 300.000 primo livello: d ne f o e = d 81 e = d3.703, 70e = 3.704 blocchi 3.704 1 secondo livello: d ne f o e = d 81 e = d45, 73e = 46 blocchi 46 2 terzo livello: d ne f o e = d 81 e = d0, 57e = 1 blocco Una ricerca binaria sul file indice secondario multilivello richiede: numero livelli + 1 = 3 + 1 = 4 accessi Esercizio 4 1. Si calcoli l’ordine p del B-albero che massimizza l’occupazione dei blocchi Ogni nodo di un B-albero contiene al più p puntatori a nodi dell’albero (P ) e p − 1 entry, cioè campo di ricerca (V ) più puntatore al blocco dei dati (Pr ) che devono essere contenuti in un blocco, quindi: p ∗ P + (p − 1) ∗ (Pr + V ) ≤ B p ∗ 10 + (p − 1) ∗ (12 + 15) ≤ 2.048 10p + 27p − 27 ≤ 2.048 37p ≤ 2.075 = 56, 08 p ≤ 2.075 37 Assumendo che p sia il massimo valore che soddisfa la disuguaglianza: p = 56 2. Si calcoli l’ordine p del B+ -albero che massimizza l’occupazione dei blocchi Ogni nodo di un B+ -albero contiene al più p puntatori a nodi dell’albero (P ) e p − 1 entry, cioè campo di ricerca (V ) che devono essere contenuti in un blocco, quindi: p ∗ P + (p − 1) ∗ V ≤ B p ∗ 10 + (p − 1) ∗ 15 ≤ 2.048 10p + 15p − 15 ≤ 2.048 25p ≤ 2..063 p ≤ 2.063 = 82, 52 25 Assumendo che p sia il massimo valore che soddisfa la disuguaglianza: p = 82 Ogni nodo di un B+ -albero contiene al più p entry, cioè campo di ricerca (V ), e un puntatore al nodo successivo che devono essere contenuti in un blocco, quindi: plef t ∗ (V + Pr ) + P ≤ B plef t ∗ (15 + 12) + 10 ≤ 2.048 27plef t + 10 ≤ 2.048 27plef t ≤ 2.038 plef t ≤ 2.038 = 75, 48 28 Assumendo che plef t sia il massimo valore che soddisfa la disuguaglianza: plef t = 75 3. Si calcoli l’ordine p del B-albero che massimizza l’occupazione dei blocchi nel caso del campo con dimensione 10 byte Ogni nodo di un B-albero contiene al più p puntatori a nodi dell’albero (P ) e p − 1 entry, cioè campo di ricerca (V ) più puntatore al blocco dei dati (Pr ) che devono essere contenuti in un blocco, quindi: p ∗ P + (p − 1) ∗ (Pr + V ) ≤ B p ∗ 10 + (p − 1) ∗ (12 + 10) ≤ 2.048 10p + 22p − 22 ≤ 2.048 32p ≤ 2.070 p ≤ 2.070 = 64, 69 32 Assumendo che p sia il massimo valore che soddisfa la disuguaglianza: p = 64 4. Si calcoli l’ordine p del B+ -albero che massimizza l’occupazione dei blocchi nel caso del campo con dimensione 10 byte Ogni nodo di un B+ -albero contiene al più p puntatori a nodi dell’albero (P ) e p − 1 entry, cioè campo di ricerca (V ) che devono essere contenuti in un blocco, quindi: p ∗ P + (p − 1) ∗ V ≤ B p ∗ 10 + (p − 1) ∗ 10 ≤ 2.048 10p + 10p − 10 ≤ 2.048 20p ≤ 2.058 p ≤ 2.058 = 102, 90 20 Assumendo che p sia il massimo valore che soddisfa la disuguaglianza: p = 102 Ogni nodo di un B+ -albero contiene al più p entry, cioè campo di ricerca (V ), e un puntatore al nodo successivo che devono essere contenuti in un blocco, quindi: plef t ∗ (V + Pr ) + P ≤ B plef t ∗ (10 + 12) + 10 ≤ 2.048 22plef t + 10 ≤ 2.048 22plef t ≤ 2.038 plef t ≤ 2.038 = 92, 64 22 Assumendo che plef t sia il massimo valore che soddisfa la disuguaglianza: plef t = 92