ESAME DI STATO I.T.E. A.S. 2008-2009 Una casa editrice pubblica riviste prevalentemente rivolte a specialisti di varie discipline operanti in ambiente scientifico. Sapendo che: le pubblicazioni, che possono essere quindicinali, mensili, bimestrali, semestrali, sono diverse tra loro per l ambito disciplinare a cui sono rivolte e per il prezzo unitario di ciascuna; sono inviate ad abbonati che abbiano sottoscritto un abbonamento di durata annuale o triennale; sono distribuite, su ordinazione, ad alcuni punti vendita dislocati all interno di istituti di ricerca e di alta formazione italiani e stranieri; A) definire e documentare adeguatamente la struttura di una base di dati che possa rispondere ad interrogazioni del tipo: 1. elenco con nome, cognome e telefono degli abbonati di genere femminile residenti in Spagna; 2. elenco con la data di scadenza degli abbonamenti stipulati in giugno 2009 e con il nominativo e l indirizzo di posta elettronica dei relativi abbonati; 3. elenco con la denominazione e il recapito degli istituti francesi che, nel 2008, hanno emesso ordini per la fornitura di riviste bimestrali di Chimica industriale; 4. numero complessivo delle riviste ordinate dal Politecnico di Torino nell anno in corso. B) descrivere le caratteristiche del software che si intende utilizzare per la realizzazione della base di dati; C) spiegare nei dettagli come effettuare almeno una delle quattro interrogazioni proposte dalla traccia; D) realizzare una pagina web, scegliendola a piacere tra quelle che potrebbero essere ragionevolmente presenti in un ipotetico sito della casa editrice. I dati mancanti possono essere opportunamente scelti dal candidato. SOLUZIONE ENTITÀ: ANALISI DEI DATI Rivista: informazioni relative alle riviste pubblicate; Disciplina: ambiti disciplinari cui le riviste fanno riferimento; Abbonato: anagrafica degli abbonati alle varie riviste; Istituto: informazioni sugli istituti di ricerca presso i quali sono dislocati i punti vendita delle riviste specializzate. ATTRIBUTI: Rivista: IDRivista (PK), NomeRivista, Prezzo, Periodicità. IDRivista contiene numeri interi ad auto-incremento; Prezzo è un campo di tipo valuta; NomeRivista e Periodicità sono campi di tipo testo. Prof. Sergio Scarano Pagina 1
Disciplina: IDDisciplina (PK), NomeDisciplina. IDDisciplina contiene numeri interi ad autoincremento; NomeDisciplina è un campo di tipo testo. Abbonato: IDAbbonato (PK), Cognome, Nome, Genere, Indirizzo, Città, Nazione, Telefono, Mail. IDAbbonato contiene numeri interi ad auto-incremento; tutti gli altri campi sono di tipo testo. Istituto: IDIstituto (PK), Denominazione, Indirizzo, Città, Nazione, Telefono, Mail. IDIstituto contiene numeri interi ad auto-incremento; tutti gli altri campi sono di tipo testo. ASSOCIAZIONI E REGOLE DI LETTURA Disciplina Rivista: (1 a Molti). Ad ogni disciplina è possibile associare una o più riviste; ogni rivista deve essere associata ad un unica disciplina. Istituto Rivista: (Molti a Molti). In ogni istituto possono essere vendute una o più riviste; ogni rivista può essere venduta in uno o più istituti. Abbonato Rivista (Molti a Molti). Un abbonato deve aver sottoscritto un abbonamento a una o più riviste; ad ogni rivista possono abbonarsi uno o più abbonati. MODELLO E/R DISCIPLINA RIVISTA ABBONATO ISTITUTO MODELLO LOGICO Poiché si intende utilizzare, in fase di implementazione un DBMS relazionale (Access o MySql), le relazioni Molti a Molti saranno sostituite da relazioni 1 a Molti attraverso l introduzione di tabelle di collegamento. RIVISTA RIVISTA ABBONATO ORDINE ABBONAMENTO ISTITUTO Prof. Sergio Scarano Pagina 2
ARCHIVIO CAMPO CHIAVE FORMATO DIMENSIONE OPZIONALITA Discipline IDDisciplina PK Numerico AutoIncremento NO NomeDisciplina Testo 20 NO IDRivista PK Numerico AutoIncremento NO NomeRivista Testo 30 NO Riviste Prezzo Valuta Euro NO Periodicità Testo 20 NO IDDisciplina FK Numerico Intero Lungo NO IDAbbonato PK Numerico AutoIncremento NO Cognome Testo 20 NO Nome Testo 20 NO Genere Testo 1 NO Abbonati Indirizzo Testo 30 NO Città Testo 20 NO Nazione Testo 20 NO Telefono Testo 15 NO Mail Testo 40 NO IDIstituto PK Numerico AutoIncremento NO Denominazione Testo 30 NO Indirizzo Testo 30 NO Istituti Città Testo 20 NO Nazione Testo 20 NO Telefono Testo 15 NO Mail Testo 40 NO IDAbbonato FK Numerico Intero Lungo NO IDRivista FK Numerico Intero Lungo NO Abbonamenti DataAbbonamento Data Data in Cifre NO DataScadenza Data Data in Cifre NO IDIstituto FK Numerico Intero Lungo NO Ordini IDRivista FK Numerico Intero Lungo NO DataOrdine Data Data in Cifre NO NumeroRiviste Numerico Byte NO CARATTERISTICHE DEL DBMS MySQL è un Relational Database Management System (RDBMS) disponibile sia per sistemi Unix che per Windows. Si tratta di un software libero (open source) sviluppato per essere il più possibile conforme al linguaggio SQL. I sistemi e i linguaggi di programmazione che supportano MySQL sono molto numerosi: Java,.NET, PHP, Python e molti altri. Le piattaforme EasyPHP e WAMP incorporano MySQL per l'implementazione di server per gestire siti web dinamici, inoltre molti Content Management System di successo come WordPress e Joomla nascono proprio con il supporto predefinito a MySQL. Vantaggi di MySql: è piuttosto veloce, anche con DB di grandi dimensioni e un numero elevato di utenti; è abbastanza semplice da usare; è multipiattaforma, quindi utilizzabile in diversi sistemi: Unix, Linux, Windows, Mac OS; i DB possono essere facilmente spostati da un sistema all'altro; il sistema dei permessi è estremamente raffinato. Prof. Sergio Scarano Pagina 3
Svantaggi di MySql: non supporta le transazioni; non effettua automaticamente i controlli sull'integrità referenziale; non supporta le subquery. SELECT Cognome, Nome, Telefono FROM Abbonati WHERE Genere = F AND Nazione = Spagna ; INTERROGAZIONI SELECT NomeRivista, DataScadenza, Cognome, Nome, Mail FROM Riviste, Abbonamenti, Abbonati WHERE Riviste.IDRivista = Abbonamenti.IDRivista AND Abbonamenti.IDAbbonato = Abbonati.IDAbbonato AND DataAbbonamento BETWEEN #06/01/2009 AND #06/30/2009; SELECT Denominazione, Indirizzo, Città FROM Discipline, Riviste, Ordini, Istituti WHERE Discipline.IDDisciplina = Riviste.IDDisciplina AND Riviste.IDRivista = Ordini.IDRivista AND Istituti.IDIstituto = Ordini.IDIstituto AND Nazione = Francia AND DataOrdine BETWEEN #01/01/2008 AND #12/31/2008 AND Periodicità = Bimestrale AND NomeDisciplina = Chimica Industriale ; SELECT SUM(NumeroRiviste) AS [Numero Totale Riviste] FROM Istituti, Ordini WHERE Istituti.IDIstituto = Ordini.IDIstituto AND Denominazione = Politecnico di Torino AND DataOrdine BETWEEN #01/01/2018 AND #12/31/2018; Prof. Sergio Scarano Pagina 4
PAGINA WEB Si intende progettare una pagina web che permetta di visualizzare tutte le riviste appartenenti ad una disciplina scelta dall utente. Di seguito il codice HTML relativo a tale pagina: <!doctype html> <html lang="it"> <head> <meta charset="utf-8" /> <title> Ricerca Riviste </title> </head> <body bgcolor="yellow" text="blue" topmargin="50"> <div align="center"> <h2> RICERCA RIVISTE </h2> <font size="5"> <form action="ricerca.php" method="get"> <table border="0" cellspacing="20"> <tr> <td> Inserisci Disciplina </td> <td> <input type="text" size="20" name="txtdisciplina" /> </td> </tr> <tr> <td> <input type="submit" name="cmdcerca" value="cerca" /> </td> <td> <input type="reset" name="cmdcancella" value="cancella" /> </td> </table> </form> </font> </div> </body> </html> Alla pressione del pulsante CERCA viene richiamata la pagina PHP che provvederà ad eseguire la query di ricerca nel database progettato. Il codice di tale pagina è il seguente: <!doctype html> <html lang="it"> <head> <meta charset="utf-8" /> <title> Esito ricerca riviste </title> </head> <body bgcolor="yellow" text="blue" topmargin="5"> <div align="center"> <h2> ESITO RICERCA </h2> Prof. Sergio Scarano Pagina 5
<?php // recupero disciplina dal form $disciplina=$_get["txtdisciplina"]; // connessione a MySql Server $conn=mysql_connect("localhost","root","") or die("connessione non riuscita"); // selezione del database su MySql mysql_select_db("dbriviste",$conn) or die("database non trovato"); // creazione query SQL $sql="select NomeRivista,Prezzo,Periodicita FROM Discipline,Riviste "; $sql.="where Discipline.IDDisciplina=Riviste.IDDisciplina "; $sql.="and NomeDisciplina='$disciplina'"; // esecuzione query e creazione recordset $rs=mysql_query($sql,$conn) or die("query fallita"); // conteggio record trovati $numrecord=mysql_num_rows($rs); if ($numrecord==0) echo "<h3> Nessun risultato trovato </h3>"; else { echo "<font size=5>"; echo "<table cellspacing=10>"; echo "<tr> <th> RIVISTA </th> <th> PREZZO </th> <th> PERIODICITA' </th> </tr>"; while ($riga=mysql_fetch_array($rs)) { echo "<tr><th>".$riga["nomerivista"]."</th><th>".$riga["prezzo"]." </th><th>". $riga["periodicita"]."</th></tr>"; } echo "</table>"; echo "</font>"; } // chiusura connessione a MySql Server mysql_close($conn);?> </div> </body> </html> Prof. Sergio Scarano Pagina 6