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