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.
No comments:
Post a Comment