Fondamenti delle basi di dati

Corso MySQL a cura del prof. Pietro De Paolis

Soluzione seconda prova scritta 

Esame di Stato 2004/05

Di questa pagina esiste una versione completa di software funzionante in rete.

Arrivati a questo punto dovremmo essere in grado di svolgere in modo autonomo il tema di informatica industriale e applicazioni tecnico-scientifiche assegnato agli esami di Stato per l'indirizzo informatica industriale, corso di ordinamento. La traccia assegnata nel 2005 è stata: Seconda prova informatica industriale Anno 2004-05

Tecnica di risoluzione

E' bene acquisire una tecnica di risoluzione che sia valida per qualunque traccia indicata dal ministero. Analizzate le tracce degli anni precedenti possiamo notare che, in ogni caso, è richiesta la costituzione di una banca dati e più interrogazioni sulla banca dati creata.

Dividiamo quindi la procedura di risoluzione in tre punti:

1 - Costruzione delle tabelle

La costituzione della banca dati richiede la ideazione e costruzione di un numero adeguato di tabelle o relazioni; per ricavare il numero ed il tipo di tabelle occorre dapprima leggersi e rileggersi la traccia diverse volte fino ad acquisire la piena consapevolezza degli elementi che influenzano la banca dati.

 

2 - Scrittura del codice MySQL

Successivamente, una volta create tutte le tabelle, si procede alla implementazione in linguaggio MySQL delle interrogazioni richieste sulle tabelle appena create.

3 - Rilettura traccia

Potrebbe succedere, in tale fase, che il numero di tabelle create sia insufficiente; si rilegge di nuovo la traccia e si aggiungono le tabelle mancanti.

4 - Verifica finale 

Verifica totale della soluzione, partendo da una nuova rilettura della traccia e verificando che la soluzione da noi adottata sia conforme a quanto richiesto.

1 - Costruzione delle tabelle

Leggendo più volte la traccia notiamo:

Le scelte editoriali dell’etichetta sono relative a diversi generi musicali ciascuno comprendente

diversi sottogeneri come, ad esempio:

1. Genere Popolare

Sottogenere

a) Avanguardia

b) Blues

c) Elettronica

d) Folk

e) Jazz

f) New Age

g) Rap

h) Rock

i) ………

2. Genere classico

Sottogenere

a) Musica da camera

b) Concerto

c) Opera

d) Sinfonia

e) Musica corale

f) ……………..

 

Questo ci induce a creare una tabella di nome: generi del tipo:

codicegenere nomegenere sottogenere
01 popolare jazz
02 popolare avanguardia
     
30 popolare rap

 

Leggendo, ancora, la traccia notiamo:

L’organizzazione della casa discografica prevede che:

un artista o un gruppo musicale o un’orchestra possano registrare musica di generi diversi o,nell’ambito dello stesso genere, di diversi sottogeneri;

possano essere rilasciate più edizioni di uno stesso album ciascuna con una diversa copertina;

un artista o un gruppo o un’orchestra possano non essere più attivi sul mercato discografico.

Intanto ci serve una tabella per memorizzare i dati degli artisti; la possiamo chiamare: artisti con la seguente struttura:

codiceartista nomeartista attivo
01 Gianni Morandi si
02 Domenico Modugno no
     
30 Renato Zero si

Ci serve una tabella per memorizzare i dati degli album; la possiamo chiamare: album con la seguente struttura:

codicealbum codiceartista titolo edizione
01 01 fatti mandare 1968
02 05 nel blu 1960
       
3000 100 .... 2000

questa è una prima bozza delle tabelle; leggiamo ancora la traccia:

Si chiede, in particolare, che si possano archiviare i seguenti dati:

a) il nome dell’artista e/o del gruppo musicale e/o dell’orchestra;

b) il periodo (in anni) di attività sul mercato discografico;

c) il titolo dell’album;

d) il nome del direttore d’orchestra;

e) la data (giorno - mese – anno) di pubblicazione della/e edizione/i;

f) il titolo dei brani musicali presenti nell’album;

g) la durata (minuti – secondi) dell’album;

h) la durata (minuti – secondi) dei singoli brani dell’album;

i) il nome dell’autore o degli autori dei brani;

j) brevi notizie biografiche dell’artista e/o del gruppo musicale e/o del direttore d’orchestra;

k) l’immagine della copertina dell’album.

 

Questo ci induce a completare la tabella degli album, aggiungendo la data di pubblicazione, la immagine di copertina,  la durata in minuti e secondi; per cui la tabella degli album diventa:

codicealbum codiceartista titolo immagine edizione data durata
01 01 fatti mandare copertina1.jpg 1968 10/10/1968 30
02 05 nel blu copertina2.jpg 1960 15/02/1960 8
             
3000 100 .... copertina3000.jpg 2000 10/05/2000 15

Tuttavia, poiché nello stesso album ci sono più brani, occorre creare una nuova tabella per i brani; tale tabella la chiamiamo brani e può avere la seguente struttura:

codicebrano codicealbum codiceartista autori titolo durata
01 01 01 Pilade fatti mandare 8
02 02 01 Pace - Panzeri nel blu 6
           
3000 100 .... Modugno .... 5

 

La traccia, a questo punto, ci induce a completare la tabella degli artisti aggiungendo il periodo di attività, la biografia; la struttura diventa la seguente:

codiceartista nomeartista attivita periodo biografia
01 Gianni Morandi attivo 15 nato a
02 Domenico Modugno non attivo 20 nato a
         
30 Renato Zero attivo 6 nato a

Rivedendo, ora, le tabelle create sarebbe opportuno, per semplicità, eliminare la tabella dei generi:

codicegenere nomegenere sottogenere
01 popolare jazz
02 popolare avanguardia
     
30 popolare rap

 

inserendola o in quella degli album o in quella dei brani; dato che un album potrebbe contenre brani di generi diversi è preferibile inserirla in quella dei brani.

Pertanto la tabella brani diventa:

codicebrano codicealbum codiceartista autori titolo genere sottogenere durata
01 01 01 Pilade fatti mandare popolare jazz 8
02 02 01 Pace - Panzeri nel blu popolare avanguardia 6
               
3000 100 .... Modugno .... popolare rap 5

 

 

Definizione delle relazioni della base di dati in linguaggio MySQL

Supponendo di aver già un base di dati a disposizione su cui creare le nuove tabelle possiamo passare direttamente alla creazione delle relative tabelle già esposte sopra.

Per la tabella artisti il nostro comando  in MySQL sarà:

CREATE TABLE artisti (codiceartista  INT(7) not null AUTO_INCREMENT, nomeartista CHAR(50), attivita CHAR(50), periodo CHAR(50), biografia TEXT,   PRIMARY KEY(codiceartista) ) 

Per la tabella album il nostro comando  in MySQL sarà:

CREATE TABLE album (codicealbum  INT(7) not null AUTO_INCREMENT, codiceartista INT(7), titolo CHAR(50), immagine CHAR(100), edizione CHAR(50), data CHAR(50), durata CHAR(50),   PRIMARY KEY(codicealbum) ) 

Per la tabella brani il nostro comando  in MySQL sarà:

CREATE TABLE brani (codicebrano  INT(7) not null AUTO_INCREMENT, codicealbum INT(7), codiceartista INT(7), autori CHAR(50), titolo CHAR(50), genere CHAR(50), sottogenere CHAR(50), durata CHAR(50),  PRIMARY KEY(codicebrano) ) 

 

Le tabelle possono essere create tutte con una unica pagina web in php che le crea.

La traccia ci chiede, inoltre,

4. implementi in linguaggio SQL la seguente interrogazione:

Dato il titolo di un brano, quali sono le date di pubblicazione, la durata, l’artista e/o il

gruppo musicale e/o l’orchestra con il relativo periodo di attività nonché gli autori e

l’album di appartenenza.

Possiamo utilizzare una istruzione SELECT del tipo:

SELECT album.data, brani.durata, artisti.nomeartista, artisti.attivita, brani.autori, album.titolo FROM artisti, album, brani WHERE brani.titolo ='$titolo' AND brani.codicealbum=album.codicealbum AND artisti.codiceartista =brani.codiceartista 

dove con $titolo abbiamo indicato la variabile di ingresso del titolo del brano da cercare, nell'ipotesi di usare un linguaggio di programmazione in php.

La traccia ci chiede, inoltre,

Opzionalmente, supponendo che la base di dati sia disponibile su di un server on line, il candidato implementi una directory per il web che consenta, a partire da una pagina con l’elenco dei generi musicali, di ottenere:

con un click sul nome di un genere musicale, una pagina con l’elenco dei nomi dei sottogeneri musicali;

La pagina può avere il seguente aspetto:

Casa discografica indipendente

La nostra casa discografica si è specializzata sui seguenti generi musicali:

Genere popolare

Genere classico

 

il cui listato è il seguente:

<p><font face="Verdana" size="5" color="#FF00FF">Casa discografica indipendente</font></p>

<p><font face="Verdana">Pagina dimostrativa come </font><a href="soluzione2005.shtml"><font face="Verdana">soluzione seconda prova esami di stato 2003-04</font></a></p>

<p><font size="4" face="Verdana">La nostra casa discografica si è specializzata

sui seguenti generi musicali:</font></p>

<p><a href="pagina2.shtml"><font size="4" face="Verdana">Genere popolare</font></a></p>

<p><a href="pagina3.shtml"><font size="4" face="Verdana">Genere classico</font></a></p>

<p>&nbsp;</p>

listato di pagina1.shtml

essa richiama due pagine successive, l'una riguarda il genere popolare e l'altra il genere classico; Infatti la traccia richiedeva:

con un click sul nome di un sottogenere musicale, una pagina con l’elenco dei nomi degli artisti;

La pagina riguardante il genere popolare ha il seguente aspetto:

 

Casa discografica indipendente

Genere popolare

Disponiamo dei seguenti sottogeneri:

 

a) Avanguardia

b) Blues

c) Elettronica

d) Folk

e) Jazz

f) New Age

g) Rap

h) Rock

i) ………

 

il cui listato è il seguente:

<p><font face="Verdana" size="5" color="#FF00FF">Casa discografica indipendente</font></p>

<p><font face="Verdana">Pagina dimostrativa come </font><a href="soluzione2005.shtml"><font face="Verdana">soluzione seconda prova esami di stato 2003-04</font></a></p>

<p><font face="Verdana" size="4" color="#008000">Genere popolare</font></p>

<p><font face="Verdana" size="4">Disponiamo dei seguenti sottogeneri:</font></p>

<p ALIGN="LEFT">&nbsp;</p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>a) <a href="cercodatiartisti.php?sottogenere=avanguardia"> Avanguardia</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>b) <a href="cercodatiartisti.php?sottogenere=blues">Blues</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>c) <a href="cercodatiartisti.php?sottogenere=elettronica">Elettronica</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>d) <a href="cercodatiartisti.php?sottogenere=folk">Folk</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>e) <a href="cercodatiartisti.php?sottogenere=jazz">Jazz</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>f) <a href="cercodatiartisti.php?sottogenere=new age">New

Age</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>g) <a href="cercodatiartisti.php?sottogenere=rap">Rap</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>h) <a href="cercodatiartisti.php?sottogenere=rock">Rock</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>i) ………</i></font></p>

<p>&nbsp;</p>

listato di pagina2.shtml

 

Analogamente per il genere classico abbiamo:

Casa discografica indipendente

Genere classico

Disponiamo dei seguenti sottogeneri:

a) Musica da camera

b) Concerto

c) Opera

d) Sinfonia

e) Musica corale

f) ……………..

 

il cui listato è il seguente:

<p><font face="Verdana" size="5" color="#FF00FF">Casa discografica indipendente</font></p>

<p><font face="Verdana">Pagina dimostrativa come </font><a href="soluzione2005.shtml"><font face="Verdana">soluzione seconda prova esami di stato 2003-04</font></a></p>

<p><font face="Verdana" size="4" color="#008000">Genere classico</font></p>

<p><font face="Verdana" size="4">Disponiamo dei seguenti sottogeneri:</font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>a) <a href="cercodatiartisti.php?sottogenere=musica da camera">Musica

da camera</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>b) <a href="cercodatiartisti.php?sottogenere=concerto">Concerto</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>c) <a href="cercodatiartisti.php?sottogenere=opera">Opera</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>d) <a href="cercodatiartisti.php?sottogenere=sinfonia">Sinfonia</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>e) <a href="cercodatiartisti.php?sottogenere=musica corale">Musica

corale</a></i></font></p>

<p ALIGN="LEFT"><font size="4" face="Verdana"><i>f) ……………..</i></font></p>

listato di pagina3.shtml

 

Notiamo che ogni collegamento ad un sottogenere viene fatto con una istruzione html del tipo:

 <a href="cercodatiartisti.php?sottogenere=avanguardia"> Avanguardia</a>

cioè si passa alla pagina cercodatiartisti.php una variabile di nome sottogenere, che in php diventerà $sottogenere, il cui contenuto è appunto quello del relativo sottogenere; nel nostro caso:

$sottogenere="avanguardia".

Il listato di cercodatiartisti.php è il seguente:

<script language="php">

if (!$sottogenere) return;

$nomehost = "miohost";

$utente = "mionome";

$parola = "miapasswors";

$nome = "nomedeldatabase";

$connessione=mysql_connect($nomehost,$utente,$parola);

$selezione = mysql_select_db($nome, $connessione);

$richiesta="SELECT DISTINCT artisti.codiceartista, artisti.nomeartista FROM artisti, brani WHERE brani.sottogenere ='$sottogenere' AND brani.codiceartista =artisti.codiceartista ";

$risultato =mysql_query($richiesta);

$lunghezza = mysql_num_rows($risultato);

print("Le righe trovate sono: $lunghezza .<br>");

for ($t=0; $t<$lunghezza; $t++) {

$riga=mysql_fetch_array($risultato);

 

print("<a href=\"cercodatialbum.php?codiceartista=$riga[0]\">"."$riga[1]</a><br>");

};

mysql_close($connessione);

</script>

listato di cercodatiartisti.php

 

La richiesta (query) che viene fatta alla nostra base di dati è la seguente:

$richiesta="SELECT DISTINCT artisti.codiceartista, artisti.nomeartista FROM artisti, brani WHERE brani.sottogenere ='$sottogenere' AND brani.codiceartista =artisti.codiceartista ";

dove con $sottogenere abbiamo indicato la variabile di ingresso del sottogenere  da cercare.

Essa mi dà come risultato, come richiesto dalla traccia, un elenco di tutti gli artisti relativi al sottogenere; la traccia diceva:

  con un click sul nome di un artista, l’elenco degli album di quell’artista con le immagini di copertina, la durata, l’anno o gli anni di edizione, le notizie bibliografiche sull’artista ed il periodo di attività.

Il nome di ciascun artista viene contenuto nella variabile php $riga[1]

Mentre lo stesso artista ha il codice contenuto in $riga[0].

Tale nome dell'artista con la istruzione:

print("<a href=\"cercodatialbum.php?codiceartista = $riga[0]\">"."$riga[1]</a><br>");

appare come un collegamento ipertestuale che passa alla pagina: cercodatialbum.php il valore della variabile di nome: codiceartista il cui contenuto è proprio quello di $riga[0], cioè il codice del relativo artista.

La pagina cercodatialbum.php ha il seguente listato:

<script language="php">

if (!$codiceartista) return;

$nomehost = "miohost";

$utente = "mionome";

$parola = "miapasswors";

$nome = "nomedeldatabase";

$connessione=mysql_connect($nomehost,$utente,$parola);

$selezione = mysql_select_db($nome, $connessione);

$richiesta="SELECT artisti.nomeartista, album.titolo, album.immagine, album.edizione, album.data, artisti.biografia, artisti.attivita FROM artisti, album WHERE artisti.codiceartista ='$codiceartista' AND album.codiceartista =artisti.codiceartista ";

$risultato =mysql_query($richiesta);

$lunghezza = mysql_num_rows($risultato);

//print("Le righe trovate sono: $lunghezza .<br>");

for ($t=0; $t<$lunghezza; $t++) {

$riga=mysql_fetch_array($risultato);

print("$riga[0] </font><br> titolo album: $riga[1]<br> <img src=\"$riga[2]\"> <br> Edizione: $riga[3] <br> Data di lancio: $riga[4]<br> Notizie biografiche:<br> $riga[5]<br> L'artista è ora: $riga[6] <br> $riga[7] $riga[8] $riga[9]$riga[10]<br>");

};

mysql_close($connessione);

</script>

listato di cercodatialbum.php

La richiesta (query) che viene fatta alla nostra base di dati è la seguente:

$richiesta="SELECT artisti.nomeartista, album.titolo, album.immagine, album.edizione, album.data, artisti.biografia, artisti.attivita FROM artisti, album WHERE artisti.codiceartista ='$codiceartista' AND album.codiceartista =artisti.codiceartista ";

dove con $codiceartista abbiamo indicato la variabile di ingresso del codice dell'artista  da cercare.

Il funzionamento completo di questa parte facoltativa della traccia lo possiamo vedere alla pagina: Pagina dimostrativa

Applicazione completa in rete

L'intera gestione della base di dati della casa discografica può essere gestita dalla seguente pagina:

Gestione di una banca dati casa discografica

 

A questo punto la soluzione della traccia ministeriale è terminata. Possiamo, ora, collaudare in rete la soluzione proposta. Vedi: versione completa di software funzionante in rete.

luglio 2006

Corso di programmazione in MYSQL

Dizionario mysql e relativo php

Corso di programmazione in PHP

Dizionario php

prof. Pietro De Paolis

Indice Scuola Elettrica - generico


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica