Analisi dei dati
Entità
Le entità che possono essere individuate nel problema sono:
Rivista, per rappresentare le pubblicazioni della Casa editrice;
Disciplina, per rappresentare gli ambiti disciplinari di riferimento per le riviste;
Abbonato, per rappresentare le persone fisiche che sottoscrivono abbonamenti;
Punto vendita, per rappresentare i negozi che distribuiscono le riviste in Centri di ricerca.
Il legame tra abbonato e rivista è rappresentato dalla stipula di un abbonamento, mentre il legame tra punto vendita e rivista è rappresentato dall’ordinazione.
Conviene quindi, per maggiore chiarezza di rappresentazione del modello, introdurre da subito altre due entità:
Abbonamento
Ordine
che risolvono anticipatamente la scomposizione delle associazioni molti a molti tra Abbonato e Rivista e tra Punto Vendita e Rivista in associazioni uno a molti.
Per esigenze di normalizzazione è opportuno introdurre anche l’entità Nazione che serve per rappresentare le provenienze geografiche sia di abbonati che di Istituti di ricerca.
Per semplicità si suppone che gli ordini dei Punti vendita riguardino ciascuno una sola rivista. In ogni caso la soluzione completa prevederebbe l’uso dell’entità DettaglioOrdine per rappresentare le righe dell’ordine.
Attributi
Gli attributi di Nazione sono: IDNazione, Descrizione.
Gli attributi di Disciplina sono: IDDisciplina, Descrizione.
Gli attributi di Rivista sono: IDRivista, Titolo, Periodicità, Prezzo unitario.
Gli attributi di Abbonato sono: IDAbbonato, Cognome, Nome, Telefono, Genere (M/F), email.
Gli attributi di Abbonamento sono: ID (numerico progressivo), DataRegistrazione, Durata.
Gli attributi di PuntoVendita sono: IDPuntoVendita, Denominazione, Telefono, email, Tipologia.
Gli attributi di Ordine sono: ID, DataRegistrazione, Quantità.
La periodicità della rivista può essere quindicinale (Q), mensile (M), bimestrale (B), semestrale (S).
La durata dell’abbonamento può essere annuale (1) oppure triennale (3). Conviene rappresentare la durata come numero per poter usare questo attributo nel calcolo della data di scadenza: in questo modo la data di scadenza non è un attributo di abbonamento, ma un campo calcolato.
La tipologia del punto vendita descrive le caratteristiche del centro dove è dislocato: istituto di ricerca, alta formazione, ecc.
Associazioni
Tra le entità Nazione e Abbonato esiste un’associazione uno a molti, perché una nazione è la residenza di più abbonati e ogni abbonato risiede in una sola nazione.
Tra le entità Nazione e PuntoVendita esiste un’associazione uno a molti, perché una nazione è la sede di più punti vendita presso i centri di ricerca e ogni punto vendita è collocato in una sola nazione.
Tra le entità Disciplina e Rivista esiste un’associazione uno a molti, perché una disciplina è un ambito di riferimento per più riviste e ogni rivista tratta una sola disciplina.
Tra le entità Rivista e Abbonamento esiste un’associazione uno a molti, perché una rivista è oggetto di più abbonamenti e ogni abbonamento si riferisce a una sola rivista.
Tra le entità Abbonato e Abbonamento esiste un’associazione uno a molti, perché un abbonato può sottoscrivere più abbonamenti e ogni abbonamento è intestato a un solo abbonato.
Tra le entità Rivista e Ordine esiste un’associazione uno a molti, perché una rivista è oggetto di più ordinazioni e ogni ordine si riferisce a una sola rivista (nell’ipotesi semplificativa posta all’inizio).
Tra le entità PuntoVendita e Ordine esiste un’associazione uno a molti, perché un punto vendita può ordinare più riviste e ogni ordine è intestato a un solo punto vendita.
Modello E/R
Regole di lettura
Ogni nazione può raggruppare uno o più abbonati, ogni abbonato deve essere raggruppato in una sola nazione.
Ogni nazione può dislocare uno o più punti vendita, ogni punto vendita deve essere dislocato in una sola nazione.
Ogni disciplina può classificare una o più riviste, ogni rivista deve essere classificata in una sola disciplina.
Ogni rivista può registrare uno o più abbonamenti, ogni abbonamento deve essere registrato per una sola rivista.
Ogni abbonato può sottoscrivere uno o più abbonamenti, ogni abbonamento deve essere sottoscritto da un solo abbonato.
Ogni rivista può ricevere uno o più ordini, ogni ordine deve essere ricevuto per una sola rivista.
Ogni punto vendita può inviare uno o più ordini, ogni ordine deve essere inviato da un solo punto vendita.
Tabelle
Nazioni (IDNazione, Descrizione)
Discipline (IDDisciplina, Descrizione)
Riviste (IDRivista, Titolo, Periodicità, Prezzo unitario, CodDisciplina).
Abbonati (IDAbbonato, Cognome, Nome, Telefono, Genere, email, CodNazione).
Abbonamenti (ID, DataRegistrazione, Durata, CodAbbonato, CodRivista).
PuntiVendita (IDPuntoVendita, Denominazione, Telefono, email, CodNazione).
Ordini (ID, DataRegistrazione, Quantità, CodPuntoVendita, CodRivista)
Le associazioni 1:N sono state rappresentate aggiungendo nelle tabelle vicino a molti le chiavi esterne (indicate in corsivo).
Interrogazioni
1. elenco con nome, cognome e telefono degli abbonati di genere femminile residenti in
Spagna.
Select A.Cognome, A.Nome, A.Telefono
From Abbonati As A Inner Join Nazioni As N On N.IDNazione = A.CodNazione
Where A.Genere = ‘F’ And N.Descrizione = ‘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
(usa le funzioni Date_Add e Date_Format di MySQL)
Select A.Cognome, A.Nome, A.email,
Date_Format(Date_Add(B.DataRegistrazione, Interval B.Durata Year), '%d/%m/%Y')As DataScadenza
From Abbonati As A Inner Join Abbonamenti As B On A.IdAbbonato=B.CodAbbonato
Where Month(B.DataRegistrazione) = 6 And Year(B.DataRegistrazione) = 2009;
In Access la data di scadenza si calcola con la funzione DateAdd:
DateAdd('yyyy',B.Durata,B.DataRegistrazione) AS DataScadenza
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.
Select Distinct P.Denominazione, P.Telefono, P.email
From ((((PuntiVendita As P Inner Join Nazioni As N On N.IDNazione=P.CodNazione)
Inner Join Ordini As O On P.IDPuntoVendita=O.CodPuntoVendita)
Inner Join Riviste As R On R.IDRivista=O.CodRivista)
Inner Join Discipline As D On D.IDDisciplina=R.CodDisciplina)
Where N.Descrizione = ‘Francia’ And Year(O.DataRegistrazione) = 2008
And R.Periodicità = ‘B’ And D.Descrizione = ‘Chimica industriale’;
4. numero complessivo delle riviste ordinate dal Politecnico di Torino nell’anno in corso.
Select Sum(O.Quantità) As NumeroOrdinate
From PuntoVendita As P Inner Join Ordini As O On P.IDPuntoVendita=O.CodPuntoVendita
Where P.Descrizione = ‘Politecnico di Torino’
And Year(O.DataRegistrazione) = Year(Now());
Per MySQL l’ultima riga diventa:
And Year(O.DataRegistrazione) = Year(CurDate());
|