Anteprima
Vedrai una selezione di 3 pagine su 7
Informatica Generale Applicazioni - Soluzione Pag. 1 Informatica Generale Applicazioni - Soluzione Pag. 2
Anteprima di 3 pagg. su 7.
Scarica il documento per vederlo tutto.
Informatica Generale Applicazioni - Soluzione Pag. 6
1 su 7
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

TEMA DI INFORMATICA

Prof.ssa Alessandra Valpiani

Prof. Antonio Garavaglia

Docenti di informatica presso ITIS LAGRANGE di Milano

SOLUZIONE

Si tratta di un classico problema di progettazione ed implementazione di un database che richiede

da parte del tecnico un’analisi puntuale dei bisogni in modo da ottimizzare non solo i tempi di

accesso, ma anche l’occupazione di spazio sul supporto di memorizzazione.

In particolare risulta fondamentale analizzare lo schema logico del database in modo da ridurre al

minimo la duplicazione dei dati, mantenendo però una struttura che, in caso di crash, consenta di

recuperare, se non tutti, almeno buona parte dei dati.

Trattandosi di un archivio piuttosto complesso in cui gli elementi fondamentali, libri e clienti,

risultano essere presenti in numero piuttosto consistente appare indispensabile prevedere per il

sistema un sistema di backup automatico che consenta di ridurre al minimo le possibilità di perdite

di dati (ad esempio prevedendo l’esistenza di un secondo server di supporto, su cui periodicamente

viene aggiornata una copia del database con le variazioni apportate nell’ultimo periodo).

a.1)

Da un punto di vista logico, dopo aver adeguatamente analizzato la traccia, appare evidente che

l’intero database si articola intorno alle seguenti entità fondamentali:

Libro, contenente tutti i dati relativi al libro in giacenza

Cliente, contenente tutti i dati relativi al cliente abilitato agli acquisti on line

Ordine, contenente i dati relativi agli ordini

Questa prima conclusione deriva dal fatto che i dati relativi ai reparti possono concettualmente

essere visti come attributi del singolo libro, mentre il carrello Acquisti è chiaramente collegato al

singolo ordine che, contabilmente, riprende i medesimi dati.

La traccia ministeriale, comunque, fornisce di per sé alcune utili indicazioni sulla linea da seguire

nell’ottimizzare lo sviluppo del database, suddividendo le entità fondamentali in entità più semplici

correlate tra loro mediante relazioni 1:1 e 1:N.

In base a queste considerazioni possiamo individuare le seguenti entità:

Reparto Tipologia Tipologia carta

Codice Codice Codice

Descrizione Descrizione Descrizione

Libro Cliente Ordine

ISBN Codice fiscale Numero

Titolo Cognome Data

Autore Nome codice fiscale cliente

Prezzo Indirizzo stato dell’ordine

Codice Tip

Cod Rep Cap scadenza prevista

Dati supplementari Città

Anno Nazione

Editore Telefono/Fax Voce ordine

Collana Email Numero ordine

Data archiviazione Password ISBN

Foto Codice carta Quantitativo

Numero carta Disponibile/In attesa

Scadenza

Possiamo notare che, nonostante le singole entità proposte non prevedano direttamente tutti gli

attributi previsti dalla traccia, attraverso adeguate relazioni ed opportune query è possibile

rispondere a tutte le richieste della traccia. Ad esempio per visualizzare il prezzo scontato di un

libro sarà sufficiente applicare, nella visualizzazione dei dati, l’opportuno parametro di sconto

derivante dalla categoria di appartenenza. Risulta evidente che il sistema potrebbe essere

ulteriormente complicato consentendo al gestore del negozio di personalizzare lo sconto per ogni

titolo: in tal caso occorrerebbe prevedere un campo specifico all’interno dell’entità libro.

Evidenziando le relazioni esistenti tra le varie entità possiamo schematizzare il database nel modo

seguente:

Reparto Tipologia

1:n 1:n

Libro 1:n n:1

Voce ordine Ordine

Cliente 1:n

Tipologia carta

a.2)

Definiamo ora nei suoi aspetti principali, a titolo esemplificativo, una delle relazioni contenute nel

database, dato che risulterebbe semplicemente nozionistica la definizione di tutte le tabelle.

Abbiamo scelto una tabella che contiene anche chiavi esterne di correlazione in modo da

evidenziarne le caratteristiche.

CREATE TABLE libro

( ISBN CHAR(10),

titolo CHAR(10) not null,

autore CHAR(10) not null,

prezzo FLOAT not null,

codice_tipologia INT,

codice_reparto INT,

...

primary key (ISBN),

foreign key (codice_tipologia) references tipologia,

foreign key (codice_reparto) references reparto,

on delete restrict,

on update cascade);

b.1)

La prima query richiesta e' un'interrogazione parametrica, nella quale i parametri dipendono

dall’interpretazione che si può dare al quesito. Se si vogliono evidenziare, come appare logico

supporre, tutti i dettagli del libro il codice SQL risulta essere del tipo:

SELECT libro.titolo, libro.autore, libro.prezzo, tipologia.descrizione

FROM reparto, tipologia, libro

WHERE libro.tipologia = tipologia.codice AND libro.reparto = reparto.codice AND

(tipologia.descrizione = 'da non perdere' OR tipologia.descrizione = 'piu' venduti)'

AND reparto.descrizione = [inserire il nome del reparto]

ORDER BY tipologia.descrizione;

se invece si volesse optare per una soluzione più semplice, che si limita a fornire il numero dei libri

appartenenti ad una certa categoria, potremmo scrivere:

SELECT COUNT(*)

FROM reparto, tipologia, libro

WHERE libro.tipologia = tipologia.codice AND libro.reparto = reparto.codice AND

tipologia.descrizione = 'da non perdere'

GROUP BY reparto.descrizione = [inserire il nome del reparto];

b.2)

La query richiesta può essere realizzata nel modo seguente:

SELECT ordine.numero, ordine.data, ordine.stato,

ordine.scadenza, ordine.isbn, ordine.quantitativo, ordine.disponibile/in attesa

FROM ordine, cliente

WHERE ordine.stato='in corso' AND

cliente.codicefiscale=ordine.codicefiscale AND

cliente.codicefiscale = [inserire il codice del cliente]

ORDER BY ordine.numero;

c)

Dato che viene richiesto un negozio on line, il database deve essre disponibile su un server on line.

Per organizzare il sito di presentazione del negozio si può pensare di utilizzare uno dei tanti tool

presenti sul mercato per generare la parte grafica e uno dei tanti linguaggi attualmente esistente per

la realizzazione di pagine dinamiche per il codice.

Molte sono le opzioni disponibili per lo sviluppo della componente server-side. Nella soluzione che

presentiamo, abbiamo deciso di utilizzare il linguaggio di programmazione PHP che consente di

arricchire le pagine Web di codice script che sarà eseguito direttamente sul server.

In particolare, PHP consente di implementare un motore di scripting server side molto diffuso e

multipiattaforma con un buon supporto della connettività verso database diversi (ad es. dBase,

Oracle, MySQL) attraverso componenti standard.

Nello specifico ipotizzeremo di interfacciarsi verso un DBMS MySQL, anch’esso multipiattaforma

e piuttosto semplice da utilizzare

Ovviamente, per potere utilizzare PHP è necessario aver installato sul proprio sistema un Web

Server.

<html>

<head>

<title> Accesso al database negozio on line libri </title>

</head>

<body>

<?php $host = 'localhost'; //ipotizzando di accedere ad un server locale.

$database = 'libri';

$db = mysql_connect($host)

or die (“Impossibile connettersi al server $host”);

mysql_select_db($database, $db)

or die (“Impossibile connettersi al database $database”);

$query = “select nome_reparto from reparto”;

$dbResult = mysql_query($query, $db);

print “<table border=\”1\”>\n”;

while ($line = mysql_fetch_array($dbResult, MYSQL_NUM))

{ print “\t<tr>\n”;

foreach ($line as $col_value)

{ print “\t\t<td>$col_value</td>\n”;

}

print “\t<tr>\n”;

}

print “</table>\n”;

mysql_free_result($dbResult);

mysql_close($db);

?>

</body>

</html>

Nello script, abbiamo utilizzato la funzione che riceve come parametro il nome dell'host

$db = mysql_connect($host)

per effettuare il collegamento con un host su cui gira un'istanza di MySQL.

Questa funzione restituisce un oggetto che rappresenta integralmente il nostro host e con il quale è

possibile utilizzare la funzione

mysql_select_db($database, $db)

per selezionare l'istanza corretta del database (essenziale in quanto l'istanza del database server può

contenere più di un database).

Dettagli
Publisher
7 pagine
1704 download