Sunday, July 8, 2018

Esempio di Progettazione Concettuale: la concessionaria di automobili multimarca

Esempio di Progettazione Concettuale: la concessionaria di automobili multimarca

Il sistema per la concessionaria di automobili gestisce vendite di auto nuovo ed usato. Per l'usato si ha una gestione delle riparazioni, per il nuovo si ha una gestione degli optional venduti. Si suppone che l'utente possa acquistare piu' automobili. Si hanno i seguenti vincoli sulle auto usate: 1) non devono esistere riparazioni con spese inferiori ai 1000 eur, 2) non si devono vendere auto immatricolate prima del 2008, 3) non si possono vendere auto che abbiano percorso piu' di 100.000 Km.

 

Gli attributi dell'entità cliente sono i soliti: nome, cognome, indirizzo, tel., con attributo chiave il codice fiscale.
L'associazione Acquista, di tipo uno a molti, tra le entita' Cliente ed Automobile, contiene gli attributi data acquisto e sconto.
Sia l'automobile nuova che l'auto usata viene descritta dagli attributi: N.telaio, marca, modello, prezzo e anni di garanzia (di solito 1 anno per l'usato e 2 anni per il nuovo), per cui questi attributi li generalizzo e li porto sull'entità padre. Un'auto usata ha degli attributi in piu' rispetto a quella nuova, che sono km percorsi ed anno di immatricolazione; le auto nuove sono immatricolate dal concessionario al momento della vendita.
L'associazione opzionale Usato:Riparazione di tipo M:N, con codice, tipo (ad es. frizione, freni), descrizione (cosa ho fatto alla macchina) e il costo. In questo modo potro' fare delle ricerche su database del tipo: quante auto ho venduto che hanno richiesto una riparazione ai freni.
L'associazione opzionale Nuovo:Optional di tipo M:N, con codice, descrizione (ad es. cerchi in lega) e prezzo. L'auto nuova puo' avere 0...N optional, un optional puo' avere 1...N auto.
Se io voglio sapere le auto vendute che motorizzazione hanno, ad es. la cilindrata, se e' diesel o benzina, allora devo introdurre una nuova entità che chiamo motorizzazione. L'associazione Auto:Motorizzazione e' di tipo 1:N. Poiche' il prezzo dell'auto dipende dalla motorizzazione, sposto l'attributo prezzo dall'entità Automobile a quella Motorizzazione.
Il prezzo finale dell'auto e' dato da: P = (prezzo dell'auto) + (prezzo optional) + (costo riparazione) - (sconto).
In questo modello la parte della vendita non prende in considerazione la fatturazione, ovviamente questa e' una semplificazione della realta' di un concessionario auto.

Saturday, July 7, 2018

Esempio di progettazione concettuale: la gestione dei prestiti dei libri di una bilioteca

Esempio di progettazione concettuale: la gestione dei prestiti dei libri di una bilioteca

I lettori hanno una tessera su cui e' scritto un numero progressivo, il nome, il cognome, l'indirizzo, e il numero di telefono. I libri hanno un codice ISBN, un titolo, una lista di autori e possono esistere in piu' copie. I lettori effettuano richieste di prestito per le copie dei libri che sono catalogati nella biblioteca. A seguito di una richiesta, viene prima consultato l'archivio delle copie disponibili, cioe' non in prestito. Se la copia e' disponibile, si procede alla ricerca della copia nello scaffale, poi la copia viene classificata come in prestito e consegnata al lettore. Terminata la consultazione, la copia viene inserita in biblioteca e nuovamente classificato come disponibile. Per un prestito si tiene nota di ora e data di acquisizione e di riconsegna.

 

Il diagramma ER contiene tre entità: Utente, Copia e Libro: Utente ha come attributo chiave il numero della tessera della biblioteca. Libro ha come attributo chiave l'ISBN. Copia non ha un attributo chiave naturale, per cui introduciamo un numero progressivo. L'associazione Utente:Copia di tipo M:N e si chiama PrendeInPrestito. PrendeInPrestito ha attributi propri: data prestito e data consegna. L'associazione PrendeInPrestito e' opzionale in entrambi i versi, perche' l'utente puo' prendere in prestito nessun libro e ci possono essere dei libri che non sono mai consultati. L'attributo data prestito e' obbligatorio, l'attributo data consegna e' opzionale. Quando l'utente prende in prestito un libro il campo data consegna e' NULL e sara' valorizzato quando lo consegna. Quindi per vedere i prestiti attualmente aperti per un utente, io faccio una ricercare per utente e vedo quanti valori NULL ha in prestito.

Allo schema si possono aggiungere dei vincoli definiti dall'utente.

  • data consegna >= data prestito.
  • un utente non puo' prendere in prestito piu' di quattro libri
  • il tempo massimo di prestito sia di 30 giorni. In pseudocodice si scrive:
    IF dataConsegna == NULL
        IF (dataAttuale - dataPrestito) > 30
        THEN Sollecito Utente
    

Operazioni sul sistema biblioteca

  • inserimento tesserato
  • inserimento libro
  • inserimento copia libro
  • ricerca di un libro tramite titolo e autore
  • controllo della disponibilita' di una copia di un libro
  • ricerca della collocazione delle copie di un libro
  • registrazione di un prestito e di una restituzione
  • ricerca di tutte le copie prestate

Errori su database e chiavi primarie

Anche Il Ministero delle Finanze fa dei controlli sul proprio database: se il contribuente non ha presentato il 730, c’è un campo con valore NULL e il Ministero invia una cartella. Se avviene un errore sul codice fiscale, il ministero manda la cartella lo stesso. Infatti, un operatore che riempie una base di dati commette statisticamente un errore ineliminabile del 2 per mille. Se vi arriva una cartella ICI e' possibile che un operatore abbia sbagliato il codice_comune o il codice_fiscale, ad esempio ha inserito una F invece di una P. Alcuni incongruenze si possono risolvere corregendo i vincoli di integrita' tra le entità, in modo che se un contribuente paga le tasse da 10 anni sul database devono risultare tutti e 10 i versamenti.