Esempio di progettazione database: Gare e Concorrenti

Nella teoria classica di progettazione dei database relazionali si parte da una descrizione informale del problema, si procede poi alla creazione del modello concettuale o schema E/R ed infine si traduce il modello concettuale nel modello logico. La parte teorica è stata affrontata in questo post, adesso invece vediamo un esempio pratico di database, relativo ad un campionato internazionale in cui vi sono concorrenti che partecipano a delle gare.

Il modello concettuale

Partiamo dalla seguente descrizione del problema in esame.

Si vogliono raccogliere le informazioni relative ai risultati nelle gare sportive di un campionato mondiale che si svolge in diverse sedi in date diverse dell’anno. In ogni gara i concorrenti arrivano in una certa posizione ed in base ad essa possono guadagnare punti, che alla fine dell’anno determineranno il vincitore.

Provando ad ottenere un modello concettuale, si individuano immediatamente le entità Concorrenti e Gare. A questo punto sorge una domanda fondamentale, ovvero come tenere traccia dei punteggi di ciascun concorrente? Il punteggio di ciascun concorrente non può essere un attributo di Concorrenti né di Gare. Infatti, nel primo caso dovremmo duplicare tutte le informazioni personali del concorrente solamente per assegnargli un punteggio. Nel secondo caso dovremmo prima inserire in Gare gli attributi relativi al concorrente e poi duplicare tutte le informazioni sulle gare, per ciascun concorrente a cui assegnare un punteggio.

Una possibile soluzione di modellazione consiste invece nell’introdurre una entità non immediatamente visibile, l’entità Risultati, che lega appunto il risultato di quel concorrente in quella determinata gara. Il modello E/R è quello in figura, in cui si evidenziano le associazioni di tipo 1:N che legano sia le istanze dell'entità Concorrenti a quelle di Risultati, sia le istanze di Gare Risultati.

modello concettuale E/R

Il modello logico

A questo punto, applicando le regole di derivazione, otteniamo il cosiddetto modello logico, in cui evidenziamo le chiavi primarie e le chiavi esterne. 

In particolare, le chiavi primarie vengono sottolineate mentre le chiavi esterne vengono indicate con un'asterisco.

Concorrenti(Codice, Cognome, Nome, Giorno, Mese, AnnoNasc, Nationality)
Gare(IdGara, Giorno, Mese, Anno, Luogo, Descrizione, Nome)
Risultati(CodRis, Posizione, Punteggio, IdGara*, Codice*)

A questo punto, dopo aver individuato il corretto tipo di dato per ogni attributo, possiamo scegliere il DBMS o l'applicazione che preferiamo per poter realizzare la nostra base di dati. Le scelte possibili sono tante, si va da semplici applicazioni come Access a soluzioni più complesse come MySQL, MariaDB o PostreSQL, in cui si può utilizza direttamente il linguaggio SQL per la creazione delle varie tabelle.