Esame stato 2013: seconda prova informatica ITC e Sirio, una possibile soluzione

Il tema di informatica (seconda prova scritta alla maturità 2013 per i ragionieri programmatori e l’indirizzo sirio) chiedeva di progettare un sistema oline per la vendita biglietti di un museo e di spiegare quali contromisure possono essere prese per tutelare la sicurezza informatica di una azienda (riferendosi in particolare ad attacchi via internet)

Per quanto riguarda il tema sulla sicurezza della rete, molto brevemente, i rischi possono essere:

  • intrusioni non autorizzate
  • attacchi di virus e spyware (malware in generale)
  • attacchi di tipo denial of service che possono portare al blocco della rete

le contromisure:

  • utilizzo dispositivi hardware  e software di protezione (es:firewall, antivirus,antispyware)
  • implementazione politiche di accesso ai dati basati su password, profili con accessi ad aree dati diverse, etc
  • utilizzo della crittografia nelle comunicazioni
  • utilizzo sistemi di backup dei dati e utilizzo di sistemi di ridondanza

Per quanto riguarda il sistema di gestione della biglietteria, le soluzioni possibili sono diverse , una mia proposta, in base alle richieste del testo è la seguente:

Utilizzare le seguenti entita:

Biglietto  = contiene gli attributi del biglietto: codice_biglietto, data_emissione..

Servizi_aggiuntivi = i servizi aggiuntivi che possono essere associati al biglietto

Promozioni = descrive gli sconti per varie tipologie di utenti (es:anziani,bambini, docenti) , tra i suoi attributi avremo dunque: idpromo, tipologia_visitatore , sconto_applicato ,etc..

Eventi = descrive gli eventi (esposizioni tematiche) con relativi attributi(prezzo_biglietto ,titolo mostra, data mostra, etc)

il prezzo del biglietto ha una tariffa base (gestibile in fase di creazione delle tabelle usando DEFAULT ) che viene aggiornata con il  prezzo fissato per ogni singola esposizione tematica


Sempre seguendo le richieste del testo, tra l’entità Biglietto e  Eventi la molteplicità è N:1 , tra Biglietto e Servizi_aggiuntivi è N:N , tra Biglietto e Promozioni è N:1 .

Da questo schema E/R poi è facile derivare le tabelle e fare le query richieste (l’unica query complessa era la quarta )

1) select ID_Biglietto from biglietto where data_emissione.biglietto = [inserire data emissione] ;

2) select titolo, data_inizio, data_fine from eventi where
data_inizio between ’1/1/2013′ and ’31/12/2013′ ;

3) select count(id_biglietto) from biglietto, eventi where biglietto.id_evento = eventi.id_evento and  eventi.titolo = [inserire titolo esposizione] ;

per la quarta query dobbiamo considerare che ad ogni biglietto puo’ essere applicato un certo sconto, ignoreremo invece il fatto che ad un biglietto possono essere associati dei gadget (visto che il testo della query non ne parla)

una soluzione semplice che non tiene conto degli sconti puo’ essere del tipo:

select  eventi.titolo_evento , sum ( eventi.prezzo_biglietto)    AS ricavato from eventi
where eventi.titolo = [inserire titolo esposizione] and  biglietto.id_evento = eventi.id_evento

nella query proposta nel testo dell’esame andava considerato ovviamente anche lo sconto (considerando che nella tabella promozioni verrà memorizzato lo sconto in percentuale da applicare), complicando ulteriormente la query.

SELECT titolo, SUM(eventi.prezzobiglietto – ( eventi.prezzobiglietto/100 * promozioni.sconto ) ) AS ricavato,
FROM biglietto, eventi, promozioni
WHERE biglietto.id_evento = eventi.id_evento
AND biglietto.idpromo = promozioni.idpromo and eventi.titolo = [inserire titolo esposizione]

 

Per qualsiasi dubbio o perplessità, commentate pure 🙂

PS: un ringraziamento a ob.noxious che mi ha fatto notare alcuni errori nella quarta query.. a mia parziale discolpa posso dire che avevo scritto le query  all’una di notte

 

 

4 pensieri su “Esame stato 2013: seconda prova informatica ITC e Sirio, una possibile soluzione”

  1. L’unica cosa che non mi quadra è il fatto che non ci sia un’anagrafica visitatori, il testo dice di una gestione di vendita on line, da quando io ricordi una transazione di pagamento on line ha richiesto un nominativo con relativo indirizzo, per un’eventuale ricevuta ecc…
    E’ vero che il biglietto non è nominativo, ma a monte una gestione anagrafica ci vorrebbe..
    Tutte le altre entità per me sono ok e relative relazioni.
    Ant.

  2. La tua osservazione è giustissima, secondo me il problema non richiede di sviluppare anche l’anagrafica visitatori, probabilmente per non complicare ulteriormente il modello E/R aggiungendo una ulterioire entità (che avrebbe un’associazione N:N con l’entità BIGLIETTO nel nostro caso)

  3. No, il fatto è che non vedo di buon occhio la relazione tra biglietti e promozioni.
    Io sono abituato a considerare una “Categoria” associata a dei “Clienti”.. e non un categoria a un biglietto …
    Non so lei ma per me senza una identità del visitatore non avrei modo di appoggiare una categoria, quale identificazione di una tipologia di utenza.
    Come risolverebbe lei la quarta query? giusto un suggerimento …
    Grazie
    Ant.

  4. No, il fatto è che non vedo di buon occhio la relazione tra biglietti e promozioni.
    Io sono abituato a considerare una “Categoria” associata a dei “Clienti”.. e non un categoria a un biglietto …
    L’osservazione è giustissima, nel senso che una biglietteria online nella realtà dovrebbe prevedere un’ anagrafica utenti.
    Ho parlato con alcuni studenti che hanno svolto il tema di informatica e mi dicevano che il commissario durante la prova ha detto loro che non era necessario inserire l’anagrafica perchè il problema non lo chiedeva.

    Per gestire le promozioni associate ad una certa categoria di cliente, si potrebbe, nell’interfaccia web semplicemente prevedere un form che, senza bisogno di memorizzare le generalità dell’utente (quindi senza bisogno di ricorrere ad una anagrafica) chieda all’utente se appartiene ad una categoria che ha diritto allo sconto (es: anziani, bambini, disoccupati, etc) applicando lo sconto corrispondente.

    per quanto riguarda le query :

    1) select ID_Biglietto from biglietto where data_emissione.biglietto = [inserire data emissione] ;

    2) select titolo, data_inizio, data_fine from eventi where
    data_inizio between ‘1/1/2013′ and ’31/12/2013′

    3) select count(id_biglietto) from biglietto, eventi where biglietto.id_evento = eventi.id_evento and titolo.eventi = [inserire titolo esposizione]

    per la quarta query dobbiamo considerare che ad ogni biglietto puo’ essere applicato un certo sconto, ignoreremo invece il fatto che ad un biglietto possono essere associati dei gadget (visto che il testo della query non ne parla)

    una soluzione semplice che non tiene conto degli sconti puo’ essere del tipo:

    select eventi.titolo_evento , sum ( eventi.prezzo_biglietto) AS ricavato from eventi
    where eventi.titolo = [inserire titolo esposizione] and biglietto.id_evento = eventi.id_evento

I commenti sono chiusi.