M070-2008-Olimpiadi Olimpiadi Internazionali di Informatica Analisi … da sviluppare Modello c concettuale Alcune osservazioni: Entità Gara, attributo record: è stato previsto solo perché richiesto nella query “aggiornare, per ciascuna fase (scolastica, regionale, nazionale, internazionale) gli eventuali punteggi record”. L’uso del termine “aggiornare” fa pensare al fatto che questo valore debba essere memorizzato nel database e modificato quando necessario. Daa notare comunque che in generale è sconsigliato l’inserimento di attributi derivati, ed in questo caso in effetti il valore del record potrebbe essere calcolato a partire dai punteggi. Entità Gara, attributo Fase:: deve assumere uno dei seguenti valori: scolastica, scolastica, regionale, nazionale, internazionale Entità Squadra, attributo CodSquadra: Il nome della squadra può essere considerato univoco e quindi si può sceglierlo come chiave primaria. Si preferisce però, inserire un codice numerico come chiave primaria, primari perché risulta più efficiente la gestione delle chiavi esterne. 1 Schema logico della base di dati Squadra(CodSquadra, NomeSquadra) Nazione(CodNazione, Nome) Atleta (CodAtleta, Cognome, Nome, DataNascita, fkSquadra, fkNazione) Gara(CodGara, Data, Fase, Record) Sede(CodSede, Denominazione, Indirizzo, Citta, Regione, fkNazione) PunteggioAtleta(fkAtleta, fkGara, punteggio) PunteggioSquadra(fkSquadra, fkGara punteggio) GaraSede(fkGara, fkSede) Sono stati sottolineati i campi chiave principale, mentre le chiavi straniere sono scritte in corsivo. Non si discutono qui i vincoli di integrità che saranno comunque esplicitati in fase di definizione delle relazioni in SQL. Si osserva che lo schema logico proposto rispetta le prime tre forme normali. 2 Definizione delle relazioni della base di dati in linguaggio SQL DBMS di riferimento : MySQL 5.6, utilizzato su Altervista nelle esercitazioni durante l’anno scolastico con motore INNODB. Database: my_mirprof Tabella: Squadra Tabella: Nazione Nell’esempio sono utilizzati alcuni codici ISTAT degli Stati esteri 3 Tabella: Atleta 4 Tabella: Gara Tabella: PunteggioAtleta 5 Tabella: PunteggioSquadra 6 Interrogazioni espresse in linguaggio SQL 1. stampare l’elenco degli atleti raggruppati per squadre per ogni singola fase 2. dato il nome di un atleta stampare i risultati ottenuti nelle diverse gare alle quali ha partecipato Il testo viene interpretato nel seguente modo: elencare i risultati delle gare a cui l’atleta ha partecipato come singolo, in quanto nell’altro caso i risultati sono della squadra, non dell’atleta. 3. stampare il calendario delle gare SELECT CodGara, Data, Fase FROM Gara ; 7 Si può migliorare questa query in due modi. • Aggiungere un campo alla tabella gara per indicare se si tratti di una individuale o una a squadre • Aggiungere i dati delle sedi dove si svolgono le gare --- 4. stampare una scheda informativa (cognome, nome, istituto scolastico di provenienza, nazionalità) del vincitore e della squadra vincitrice • 5. stampare la classifica per ciascuna gara (a parità di punteggio vengono privilegiati gli atleti più giovani) 6. aggiornare, per ciascuna fase (scolastica, regionale, nazionale o internazionale) gli eventuali punteggi record Si può migliorare questa query andando a calcolare il massimo dei punteggi ottenuti nella gara 7. calcolare il punteggio medio ottenuto durante la prima selezione, per ciascun istituto scolastico 8. stampare per ciascuna squadra il numero di “atleti” partecipanti e l’età media 8 Nota: i dati si riferiscono alle olimpiadi 2016 (invece che a quelle 2008). 9