Friday, July 6, 2018

Basi di Dati: Il modello concettuale

1 DATABASE

Cosa e' un sistema informativo?
  • Durante qualunque attivita' e' necessario avere a disposizione una quantita' di informazioni, per cui le organizzazioni si dotano di un sistema informativo per gestire le informazioni.

Cosa sono i dati?

  • Le informazioni vengono codificate e scambiate. Quando le informazioni vengono codificate, nei sistemi informativi, non si parla piu' di informazione, ma si parla di dati; a differenza delle informazioni, i dati devono essere interpretati per fornire delle informazioni.

Cosa sono le basi di dati?

  • Le basi di dati sono una collezione di dati, raccolti allo scopo di rappresentare le informazioni usate in un sistema informativo. In altre parole, un database e' un insieme di archivi integrati che descrivono una specifica realta' di interesse.

Esempi:

  • quando facciamo una operazione allo sportello dell'ufficio postale, l'operatore in inserisce dei dati dal terminale che sono registrati in un database, il database dei versamenti.
  • quando andiamo in banca e facciamo delle operazioni, l'operatore inserisce dei dati, parte una transazione e i dati immessi popolano un database.
  • voi vi sieti iscritti a questo corso, i vostri dati sono stati registrati in un database.
  • tutti i dati che descrivono una realta' costituiscono un database.

2 DBMS

Il Data Base Management System DBMS e' il software che gestisce il database, che mi permette di inserire dati, modificare dati e fare delle operazioni sui dati. Quindi ha senso realizzare un data base se io non ho uno strumento che lo gestisce.

Esempi di DBMS a pagamento sono: Oracle e Microsoft SQL Server, open source: MySQL e PostgreSQL. Microsoft Access e' un DBMS per database di piccole dimensioni e per uso personale.

Le caratteristiche che un DBMS deve avere sono:
  • indipendenza logica dei dati
  • indipendenza fisica dei dati
  • eliminazione delle ridondanze
  • multiutenza
  • accesso rapido alle informazioni
  • sicurezza
  • gestione delle transazioni
  • linguaggio per la gestione dei dati

Indipendenza logica dei dati significa che se io aggiungo o rimuovo un campo al database le applicazioni che usano il database continuano a funzionare. Indipendenza fisica significa che se cambio l'organizzazione fisica dei file sul supporto di memorizzazione l'applicazione continua a funzionare. Per realizzare una applicazione web oriented c’è bisogno di un database che sia multiutente, cioe' che permetti l'accesso concorrente ai dati.

Un database deve essere progettato in modo tale da eliminare le ridondanze, cioe' i dati ripetuti. Ad esempio, se scriviamo in un foglio excel una serie di informazioni come nome e cognome dello studente e il corso che frequenta, ho delle informazioni ripetute; infatti se Mario Rossi frequenta tre corsi, nome e cognome di Mario Rossi sono ripetuti tre volte nel foglio excel. Se si introducono le ridondanze e' piu' facile che si avranno delle incongruenze nel database. Infatti, se si modifica il cognome, si deve modificarlo in tutte e tre le righe, altrimenti ci sono delle anomalie: il contenuto della base di dati non e' piu' coerente.

Sicurezza significa che il database deve offirire all'amministratore strumenti per il backup e restore dei dati, l'amministratore effettua delle copie settimanali o mensili del database.

La transazione e' una insieme di operazioni viste come una singola procedura. Ad esempio, quando si va allo sportello ATM della banca per fare un prelievo, il DBMS effettua una transazione sul database dei movimenti dei conti correnti che consiste nel sottrarre al saldo la cifra prelevata, la transazione parte quando si clicca sul bottone ESEGUI e termina quando le banconote escono dallo sportellino. Se c’è un malfunzionamento e non escono i soldi, la transazione deve essere annullata.

Durante gli anni 70-80, quando i DBMS erano in fase di sviluppo, i linguaggi per la gestione dei dati erano diversificati. E tuttora nella letteratura si tende a diversificare i linguaggi di gestione dei dati in diversi sottolinguaggi. Successivamente, tutti i sottolinguaggi sono stati unificati in solo linguaggio: lo Structured Query Language (SQL).
Il linguaggio SQL contiene i comandi per creazione di tabelle (Data Definition Language), comandi per l'inserimento e modifica di dati in tabella (Data Manipulation Language), comandi per il controllo dell'accesso dei dati (Data Control Language) usati dagli amministratori dei database.

3 MODELLI DEI DATI

Un modello di dati e' un insieme di concetti adatti ad organizzare dei dati di interesse allo scopo di renderli comprensibili ad un elaboratore. Ogni modello dispone di propri meccanismi per strutturare i dati, allo stesso modo dei linguaggi di programmazione che forniscono i propri costrutti per creare nuovi tipi di dati a partire dai tipi elementari. I modelli usati per strutturare i dati su database sono detti modelli logici e sono disponibili nei DBMS in commercio.

Esempi di modelli logici sono:

  • il modello relazionale, che usa la relazione
  • il modello gerarchico, che usa strutture ad albero
  • il modello reticolare, che usa i grafi
  • il modello a oggetti, che usa oggetti ispirati al paradigma di programmazione ad oggetti

Il modello relazionale dei dati definisce nuovi tipi per mezzo della relazione, che permette di rappresentare i dati come insiemi di record a struttura fissa. Una relazione viene rappresentata per mezzo di una tabella: ogni riga della tabella rappresenta un record e le colonne della tabella rappresentano specifici campi del record; l'ordine delle righe e delle colonne non e' importante.

Ad esempio i dati relativi ai corsi universitari possono essere organizzati con la relazione CORSI.

                   __________________________________
                  |    NOME     |   CFU    |   ANNO  |
                  |_____________|__________|_________|
                  | ANALISI I   |    6     |    1^   |
                  |_____________|__________|_________|
                  | GEOMETRIA   |    4     |    1^   |
                  |_____________|__________|_________|
                  | MECCANICA   |    4     |    2^   |
                  | RAZIONALE   |          |         |

I modelli concettuali si utilizzano per descrivere i concetti del mondo reale durante la fase iniziale di progettazione della base di dati, indipendentamente dal modello logico scelto. I modelli concettuali non servono per organizzare i dati sulle basi di dati e non sono disponibili sui DBMS in commercio. In particolare si studia il modello Entity-Relationship.

Schemi e istanze

Nelle basi di dati esiste una parte costante e una parte variabile nel tempo.

  • lo schema del database rappresenta una descrizione dei dati e non varia nel tempo
  • l'istanza o stato rappresenta i valori assunti dai dati e puo' variare nel tempo

Nell'esempio precedente, la relazione CORSI viene rappresentata con una tabella di tre colonne. Lo schema della relazione CORSI e' il nome della relazione seguito dai nomi dei suoi attributi:

  CORSI(NOME,CFU,ANNO)

L'istanza della relazione CORSI e' rappresentata dal contenuto delle righe della tabella.

Lo schema logico del database rappresenta la descrizione dell'intera base di dati attraverso il modello logico adottato per rappresentare in dati su database.

4 PROGETTAZIONE DI UNA BASE DI DATI

Come nella programmazione si fa l'analisi, il design e l'implementazione, lo stesso processo si ha anche nella progettazione dei database. Nella progettazione dei database si parte da una specifica realta' di interesse che il committente vuol fare informatizzare da parte di una societa' di sviluppo software.

Le software-house si specializzano in campo di interesse e creano database per uno speficico campo applicativo.
La Buffetti crea gestionali che sono pacchetti software integrati (che contengono un proprio database): Buffetti gestione magazzino, Buffetti gestione contabilita', ecc.
Ci sono software house specializzate nella creazione di database cartografici che contengono mappe, foto e informazioni collegate a punti su delle mappe geografiche: per esempio, se faccio click su una cartina mi appaiono le informazioni su un negozio.

La progettazione di un database si articola in tre fasi: progettazione concettuale, progettazione logica e progettazione fisica:

                  ____________________________________
                 |                                    |
                 |   realta di interesse specifica    |
                 |____________________________________|
                                  |
                                  |  1.progettazione concettuale 
                  ________________V___________________
                 |                                    |
                 |        modello concettuale         |
                 |____________________________________|
                                  |
                                  |  2.progettazione logica
                  ________________V___________________
                 |                                    |
                 |           schema logico            |
                 |____________________________________|
                                  |
                                  |  3.progettazione fisica
                  ________________V___________________
                 |                                    |
                 |             database               |
                 |____________________________________|

  1. Nella progettazione concettuale si analizza la realta di interesse e si rappresentano le specifiche in termini di una descrizione formale e completa. Il prodotto di questa fase e' detto lo SCHEMA CONCETTUALE e fa riferimento al modello concettuale dei dati. Uno schema E-R viene rappresentato come un diagramma.
  2. Nella progettazione logica si traduce lo schema concettuale, definito precedentemente, in uno SCHEMA LOGICO equivalente. Lo schema logico e' basato su un modello logico, ad esempio il modello relazionale.
  3. Nella progettazione fisica, lo schema logico viene tradotto nello SCHEMA FISICO del database, che descrive il tipo e la dimensione dei campi.

Negli anni 70, Peter Chen introdusse il modello Entity–Relationship per progettazione dei database e il matematico Edgar F. Codd la propose il modello relazionale per la rappresentazione dei dati di una database.

5 PROGETTAZIONE CONCETTUALE

La progettazione concettuale consiste nel creare un modello astratto su carta che rappresenta/schematizza una specifica realta' di interesse. Nel fare cio' si usa un processo di astrazione.

Esistono tre tipi di astrazione:

  • astrazione per classificazione
  • astrazione per aggregazione
  • astrazione per generalizzazione

Ad esempio, se si vuole fare un programma per la gestione di una biblioteca, un oggetto da modellizzare e' il libro. Quindi, classificare l'oggetto libro, significa attribuire all'oggetto tutte le sue caratteristiche (codice ISBN, titolo, autore, casa editrice). Se voglio fare un programma per la gestione di un negozio di ricambi auto, l'oggetto principe e' l'automobile, per cui se voglio classficare l'auto si conferiscono all'oggetto auto le proprieta' che le contraddistinguono (numero telaio, marca, modello, cilindrata, anno di immatricolazione).

5.1 Il Modello E-R

Il modello ER (in inglese Entity Relationship model) e' un modello concettuale dei dati piu' utilizzato nell’ambito della progettazione di una base di dati, sviluppato da P. Chen nel 1976. Il modello ER viene utilizzato per costruire degli schemi che descrivono la struttura dei dati.

Il modello E-R offre i seguenti costrutti per descrivere la realta' di interesse:

  • entità = rappresenta classi di oggetti, nello schema viene rappresentato graficamente con un rettangolo
    esempio: l'automobile per un database di un negozio di ricambi auto
  • attributo = caratteristica che descrive l'entità, rappresentato graficamente con delle linee uscenti dall'entità
    esempio: il numero di telaio dell'auto
  • associazione = legame logico tra due o piu' entità
    esempio: l'associazione tra le due entità auto e proprietario dell'auto
  • vincoli = condizione per la coerenza del database espressa per un campo di un database
    esempio: il campo anno di produzione per l'entità automobile usata non puo' essere antecedente ad una certa data
5.2 Le entità

Una entità viene rappresentata graficamente da un rettangolo, gli attributi sono rappresentati graficamente come delle linee che escono dall'entità. Se una entità ha molti attributi, in fase di progettazione concettuale non si scrivono tutti, ma ci si riserva di elencarli dopo nella fase di progettazione logica.

  __________________
 |                  |
 |       LIBRO      | 
 |__________________|
   \        \       \
   codice   titolo  autore  
    ISBN

  ____________________
 |                    |
 | CLASSE DI STUDENTI |
 |____________________|
   \        \        \
  numero   sezione  specializzazione

Ad esempio, (8829827924, Informatica Generale, Piero Gallo e Fabio Salerno) e' un esempio di occorrenza dell'entità Libro; (5^, A, informatica) e' un esempio di occorrenza dell'entità Classe di Studenti.

5.3 Gli Attributi

Gli attributi possono essere semplici o atomici, composti, multipli. Un attributo semplice non e' ulteriormente scomponibile (es: codice ISBN).

L'attributo indirizzo dell'entità persona e' un esempio di attributo composto. L'attributo indirizzo che e' composto da via, numero, CAP e città. A livello concettuale non ci si interessa di renderlo semplice. Poi, a livello di progettazione logica si spezza l'attributo composto in tanti attributi semplici.

Gli attributi possono essere multipli. Ad esempio l'autore di un libro puo' essere uno solo o puo' essere piu' di una persona. In questo caso l'attributo autore ha due valori. In un database fatto bene, gli attributi multipli si portano fuori dall'entità e si crea una entità a parte, relazionata con l'entità di origine: nel caso dell'entità libro si crea l'entità autori. Gli attributi multipli vanno estrapolati altrimenti ho un problema per la ricerca. Ad esempio, consideriamo il libro "informatica generale" scritto da Piero Gallo e Fabio Salerno; se voglio cercare nel database tutti i libri di Piero Gallo, sarebbe scomodo andare a fare una ricerca per parte di campo.

Domanda: cosa succede se ho una persona che ha due email?
Risposta: se una persona ha due email, il campo email fa parte sempre dell'anagrafica. Di solito la tabella Anagrafica-persona ha i campi: (telefono, fax, cellulare, email). In alcuni casi puo' servire scrivere nella tabella Anagrafica: cellulare-1, cellulare-2, ecc. ma comunque restano nell'entità e non creo una nuova entità, perche' su questo attributo non andro' a fare operazioni di ricerca.

Gli attributi possono essere obbligatori o opzionali.

  • Un attributo e' obbligatorio quando e' necessario valorizzarlo e ogni istanza di quella entità deve avere un valore per quell'attributo, si dice un campo obbligatorio.
  • Un attributo e' opzionale quando nell'istanza puo' essere valorizzato o non valorizzato. Il fatto che non e' valorizzato si traduce nel database nel fatto che il campo e' NULL. NULL vuol dire informazione mancante. Ad esempio, quando ci si inscrive in sito web si riempie un form html che ha dei campi obbligatori e dei campi opzionali; spesso si riempiono solo i campi obbligatori e si clicca sul bottone invio del form. Questo si traduce nel fatto che nel database viene riempita una riga relativa alla mia iscrizione con i campi obbligatori valorizzati e gli campi opzionali NULL.
5.3.1 Attributo Chiave

Ogni entità deve avere un attributo speciale detto attributo chiave. Nella teoria dei database, l'attributo chiave e' per definizione uno o piu' attributi che identificano in maniera univoca una istanza dalle altre. Pero' oggi, non si usa piu' prendere una lista di campi per creare un attributo chiave, ma se ne prende uno solo.

Ad esempio, l'entità libro ha una serie di istanze: "Informatica Generale" e' una istanza dell'entità libro, e l'attributo chiave dell'entità libro e' il codice ISBN.

Nel diagramma ER le chiavi sono sottolineate.

Esempi di chiave sono: la matricola per l'entità dipendente, la matricola per l'entità studente, il codice fiscale per la persona fisica, la partita IVA per l'azienda.

Tutti gli oggetti hanno naturalmente un attributo chiave, e se non lo ha, se ne introduce uno in modo artificiale:
Il codice fiscale e' un operazione introdotta artificialmente, perche' e' una concatenazione di campi.
Per l'entità articolo del negozio, si inventa il codice dell'articolo. Il codice non e' un attributo che descrive l'articolo ma e' stato introdotto in maniera ridondante, ma necessaria, per creare l'attributo chiave.
Se non ne troviamo uno si usa un ID, ad esempio il circolo sportivo individua il socio con il numero tessera, che e' un numero progressivo.

5.4 Le Associazioni

Le entità sono legate tra di loro. Ad esempio nel database del concessionario di automobili l'entità automobile e' collegata al cliente tramite l'associazione ACQUISTO, nel DB del ministero delle finanze l'entità versamento e' collegata al contribuente tramite l'associazione PAGAMENTO.

Nel diagramma E-R le associazioni sono schematizzate utilizzando il rombo, al cui interno si scrive il nome dell'associazione.

Esempi di associazioni



                             / \
  _____________             /   \             _____________                        
 |             |           /     \           |             |
 |   PRESIDE   |_________ DIREZIONE _________|   SCUOLA    |
 |_____________|           \     /           |_____________|
                            \   /                         
                             \ /


                              /\
  _____________              /  \             _____________          
 |             |            /    \           |             |
 |   PERSONA   |_________  POSSESSO _________|     AUTO    |
 |_____________|            \    /           |_____________|
                             \  /                        
                              \/


                               /\
  ______________              /  \              _____________          
 |              |            /    \            |             |
 |   CLIENTE    |________ PRENOTAZIONE ________|    STANZA   |
 |______________|            \    /            |_____________|
                              \  /                        
                               \/

                             

Un'occorrenza di una associazione e' una n-pla costituita da occorrenze di entità, un'occorrenza per ogni entità che partecipa all'associazione. Ad esempio (Mario Rossi; fiat punto 1.2 EL) puo' essere un'occorrenza della associazione possesso del database del Pubblico Registro Automobilistico.
Una associazione binaria lega due entità, una associazione ternaria lega tre entità. Di solito negli schemi ER, si cerca di fare associazioni binarie, perche' quelle ternarie sono complicate; comunque le associazioni ternarie si possono spezzare in due associazioni binarie.

Anche le associazioni possono avere attributi propri: le due entità studente e corso hanno i loro attributi, l'associazione ESAME ha data e voto.

 

                            / \
   ______________          /   \          ______________  
  |              |        /     \        |              | 
  |   STUDENTE   |------   ESAME   ------|    CORSO     |
  |______________|        \     /        |______________|
    /        \            /\   /\           /     \     
 matricola  nome       data \ / voto      nome   anno di corso

Un'associazione unaria o auto associazione lega una entità a se stessa. Partita e' un esempio di auto associazione.

                                       / \                                                         
   _________________                  /   \                
  |                 |                /     \        
  |     SQUADRA     | ______________ PARTITA 
  |_________________|                \     /
           |                          \   /         
           |                           \ /      
           |                            |
           |____________________________|
                        

L'associazione fornitura e' un esempio di associazione ternaria.

 
                           / \
  ______________          /   \          ______________            
 |              |        /     \        |              |
 | DIPARTIMENTO |______ FORNITURA ______|   PRODOTTO   |
 |______________|        \     /        |______________|
                          \   /                        
                           \ / 
                            |
                     _______|_______
                    |               |
                    |   FORNITORE   |
                    |_______________|

Per esempio, un insieme di occorrenze dell'associazione Fornitura stabilisce che:

    la ditta SamsungItalia fornisce cellulari al diparimento Marketing e stampanti al dipartimento Amministrazione
    la ditta ComputerPro fornisce notebook al dipartimento Ricerca e stampanti al dipartimento Vendite.

Nota: di solito nello diagramma ER per le entità si usano i nomi al singolare, mentre nello modello relazionale per le tabelle si usano i nomi al plurale, ma nessuno ci vieta di cambiare la convenzione.

Nota: in esempi di modelli ER, se vedete che la chiave primaria e' una combinazione di campi, allora significa che quell'esempio deve essere migliorato in modo che la chiave primaria sia un singolo campo. Ogni entità deve avere un solo attributo chiave.

5.4.1 Cardinalita' delle associazioni

La cardinalita' di una associazione viene specificata per ogni entità che partecipa ad una associazione. La cardinalita' dice quante volte una istanza di una entità puo' essere legata ad istanze di altre entità coinvolte nella associazione; in particolare la cardinalita' specifica il numero minimo ed il numero massimo di occorrenze di una associazione a cui una istanza di una entità puo' partecipare.

Per esempio, se in una relazione Insegnamento specifichiamo per l'entità Docente una cardinalita' minima pari ad uno ed una cardinalita' massima pari a tre, vogliamo indicare che un docente puo' partecipare ad un minimo di una occorrenza e ad un massimo di tre occorrenze della relazione Insegnamento. In altre parole, un docente deve insegnare almeno una materia ma non piu' di tre.
Se per l'entità Materia specifichiamo una cardinalita' minima pari a zero e una cardinalita' massima pari a 5 imponiamo che, in una scuola, una certa materia puo' partecipare o a nessuna occorrenza o la massimo a 5 occorrenze della relazione Insegnamento. Quindi un certa materia puo' non essere insegnata da nessun docente oppure puo' essere insegnata da un numero di docenti inferiore o uguale a 5. In uno schema E-R, la cardinalita' minima e massima delle partecipazioni di entità a relazioni si specificano tra parentesi, come nella figura sotto.


                              /\
  _____________              /  \               _____________                        
 |             |            /    \             |             |
 |   DOCENTE   |________ INSEGNAMENTO _________|   MATERIA   |
 |_____________|  (1,3)     \    /    (0,5)    |_____________|
                             \  /                         
                              \/

In linea di principio, e' possibile assegnare un qualunque intero maggiore o uguale a zero alla cardinalita' di una associazione con l'unico vincolo che la cardinalita minima deve essere minore o uguale alla cardinalita massima. Nella maggior parte dei casi, e' sufficiente utilizzare solo tre valori: zero, uno e il simbolo N, che indica un intero maggiore di uno. In particolare:

  • CARDINALITA MINIMA = 0|1
    nel primo caso si dice che la partecipazione dell'entità relativa e' opzionale, nel secondo caso si dice che la partecipazione e' obbligatoria.
  • CARDINALITA MASSIMA = 1|N
    nel primo caso la partecipazione della seconda entità puo' essere vista come una funzione che associa ad una occorrenza dell'entità una sola occorrenza (o nessuna) dell'altra entità; nel secondo c'e' invece una associazione con un numero arbitrario di occorrenze dell'altra entità.

Nella figura sotto, sono riportati diversi casi di cardinalita per associazioni.



                             / \
  _____________             /   \             _____________
 |             |           /     \           |             |
 |   PRESIDE   |_________ DIREZIONE _________|   SCUOLA    |
 |_____________|   (1,1)   \     /   (0,1)   |_____________|
                            \   /                         
                             \ /


                             /\
  _____________             /  \             _____________
 |             |           /    \           |             |
 |   PERSONA   |_________ POSSESSO _________|     AUTO    |
 |_____________|  (0,N)    \    /    (1,1)  |_____________|
                            \  /                        
                             \/


                               /\
  ______________              /  \              _____________
 |              |            /    \            |             |
 |   CLIENTE    |________ PRENOTAZIONE ________|    STANZA   |
 |______________|  (1,N)     \    /     (0,N)  |_____________|
                              \  /                        
                               \/


5.4.2 Classificazione delle associazione binarie

Osservando le cardinalita massime, e' possibile classifcare le associazioni binarie in base al tipo di corrispondenza che viene stabilita tra le occorrenze delle entità coinvolte:

Uno ad uno (1:1)

Le associazioni che hanno cardinalita massima pari ad uno per entrambe le entità coinvolte, definiscono una corrispondenza uno ad uno tra le occorrenze di tali entità e vengono quindi denominate relazioni uno ad uno. Le associazioni uno ad uno sono rare, esempi di associazioni di tipo 1:1 sono persona-codice fiscale, preside-scuola. Le associazioni 1:1 sono delle schematizzazioni a livello concettuale di pura accademia.

Uno a molti (1:N)

Le relazioni aventi una entità con cardinalita massima pari ad uno e l'altra con cardinalita massima pari ad N sono denominate relazioni uno a molti. Ad esempio, le cardinalita della associazione Persona-Auto ci dice che una persona puo' non possedere un'auto e ne puo' possedere anche piu' di una. Un'auto puo' essere intestata al massimo a una sola persona.
L'associazione calciatore-squalifica e' una associazione opzionale 1:N, l'associazione squalifica-calciatore e' una associazione obbligatoria N:1. Durante il campionato un calciatore puo' essere soggetto a una o piu' squalifiche. Se esiste una squalifica deve necessariamente esistere qualche calciatore a cui l'ho data, altrimenti si avrebbe una anomalia su database.

Molti a molti (N:N)

Le relazioni aventi cardinalita massima pari ad N per entrambe le entità coinvolte, come la relazione PRENOTAZIONE, vengono denominate relazioni molti a molti. Ad esempio, l'associazione persona fisica-immobile: una persona puo' possedere piu' immobili e un immobile puo' essere posseduto da piu' persone, come marito e moglie hanno una comproprieta del 50% oppure tre fratelli sono comproprietari al 33% di un immobile.

Per le cardinalita minime va detto che e' raro avere una caso di partecipazione obbligatoria per tutte le entità coinvolte, perche quando si aggiunge una nuova occorrenza di una entità, spesso non sono note (o non esistono) le corrispondenti occorrenze delle entità ad essa collegate. Per esempio, nell'associazione VENDITA che lega le entità ordine e fattura, quando si riceve un nuovo ordine, non esiste ancora una fattura ad esso relativa, per cui non e' possibile costruire una occorrenza della associazione VENDITA che contiene il nuovo ordine.

Per quanto riguarda le relazione n-arie, vedi ad esempio l'associazione FORNITURA, le entità conivolte partecipano quasi sempre con cardinalita massima pari ad N.

5.4.3 Associazione per generalizzazione

Ci sono casi in cui una entità e' un caso particolare di un'altra entità. Ad esempio nel caso della gestione dei tributi, si hanno tre tipi di tributi locali: ICI per la casa, TARSU per la nettezza urbana, TOSAP per i commercianti. Si puo' modellizzare una entità Imposta e poi specializzare in una serie di tributi. Si parla di associazione per generalizzazione e si modellizza il concetto creando una gerarchia ISA (is a = e' un): cioe' ICI e' una imposta, TARSU e' una imposta, ecc.

                   gerarchia ISA

                   ___________
                  |  IMPOSTA  |                 entità padre
                  |___________| 
                       | 
        _______________|_______________                              
       |               |               |
  _____|____      _____|____      _____|____
 |   ICI    |    |   TARSU  |    |   TOSAP  |   entità figlie
 |__________|    |__________|    |__________|

Nel modello concettuale si modellizzano delle entità che sono dei sottoinsiemi di una entità piu' generale.

Ad esempio, una entità Lavoratore puo' essere una generalizzazione di entità figlie come Lavoratore Dipendente, Lavoratore Autonomo, Professionista, ecc. Ogni entità figlia e' specializzata.

5.5 Vincoli di Integrita'

Un vincolo e' una regola che deve essere rispettata per il buon funzionamento del database: in particolare il vincolo e' una regola che previene incongruenze sulla base di dati. Un base di dati integra non presenta anomalie.

Dal punto di vista formale, i vincoli possono essere di tre tipi: impliciti su chiave primaria, impliciti referenziali, espliciti o regola su attributo.

  • Un vincolo implicito su chiave primaria lo si aggiunge impicitamente quando si attribuisce ad una entità un attributo che e' chiave primaria: si stabilisce che ogni istanza e' diversa da tutte le altre.
  • Un vincolo di tipo implicito referenziale lo si impone quando si fa una associazione di tipo obbligatorio, ad esempio, per una associazione E1-E2 obbligatoria 1:N, cio' vuol dire che ad un elemento dell'entità E1 deve corrispondere almeno un elemento dell'entità E2 e che ad un elemento dell'entità E2 deve corrispondere un solo elemento dell'entità E1. In altre parole, non e' possibile che un elemento in E2 non sia in relazione con un elemento dell'entità E1 e non e' possibile che un elemento dell'entità E1 non sia in relazione con uno o piu' elementi dell'entità di arrivo.
  • I vincoli espliciti sono quelli che si aggiungono sul database formulando delle restrizioni su come devono essere i dati. Ad esempio se implemento una anagrafica di una azienda, dico che l'azienda non assume persone di eta' superiore a 40 anni. Quindi il vincolo non esiste sulla base di dati ma viene formulato in base alle esigenze dell'azienda.
Esempio di progettazione concettuale: la gestione dei prestiti dei libri di una bilioteca
    indirizzo                            data consegna          soggetto  copie 
    /                                  /\/                       /         /
  _/________________                  /  \                 _____/_________/____
 |                  |                /    \               |                    |
 |      UTENTE      |______________ PRESTITO _____________|       LIBRO        |
 |__________________|\    (0,N)      \    /     (0,N)     |____________________|
  \      \       \    \               \  /                 \       \       \   
   \      \       \    \              /\/                   \       \       \
  codice cognome nome  tel       data prestito             ISBN    autore  titolo 
  -----                                                    ----

Il diagramma ER contiene le entità Utente e Libro: Utente ha come attributo chiave il codice, Libro ha come attributo chiave l'ISBN.
L'associazione Utente-Libro di tipo N:N e si chiama Prestito. Il Prestito ha attributi propri: data prestito e data consegna. L'associazione Prestito e' opzionale in entrambi i versi, perche' l'utente puo' prendere in prestito nessun libro oppure ci possono essere dei libri che non sono mai consultati.
Allo schema possono aggiungere dei vincoli di integrita' di tipo esplicito. Il vincolo piu' semplice da aggiungere e' che data consegna >= data prestito. 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 quanti libri un utente ha preso in prestito io faccio una ricercare per l'utente e vedo quanti valori NULL ha in prestito.

Altri vincoli sono che un utente non puo' prendere in prestito piu' di quattro libri oppure che il tempo massimo di prestito sia di 30 giorni. In pseudocodice si scrive:

            IF dataConsegna == NULL
                IF (dataAttuale - dataPrestito) > 30
                THEN Sollecito Utente

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. Questo problema e' legato al fatto che i valori delle chiavi sono sbagliate, perche' purtroppo il Ministero delle Finanze continua ad usare come identificativo il codice fiscale che e' soggetto ad errori. 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.

Nello schema relazionale, le associazione molti a molti vengono codificate con una nuova entità. Le associazioni molti a molti vengono spezzate in due associazioni di tipo 1:N. In pratica, si introduce una nuova entità di nome Prestito, che ha un attributo chiave ID_prestito e i campi data prestito e data consegna.


   tel  indirizzo                      data prestito  data consegna                      soggetto  copie disponibili
  _/____/__________            / \           _\________/_____           / \           ____/_________/___
 |                 |          /   \         |                |         /   \         |                  |
 |      UTENTE     |________ accesso _______|    PRESTITO    |________   ha  ________|      LIBRO       |
 |_________________|  (0,N)   \   /  (1,1)  |________________|  (1,1)  \   /  (0,N)  |__________________|
  \      \       \             \ /            /   \       \             \ /            \     \       \
  codice cognome nome                       ID  cod_ISBN  cod_utente                   ISBN  autore  titolo

Questo procedimento non e' necessario farlo nello schema ER, ma viene fatto automaticamente nello schema relazionale, utilizzando la regola che le relazioni molti a molti vengono spezzate in due relazioni 1:N e l'associazione diventa una entità che ha i propri attributi e poi viene messa in corrispondenza con le altre due entità, in questo caso Utente e Libro. In questo diagramma ER un utente ha piu' prestiti e un libro ha piu' prestiti. Le due modellazioni concettuali sono entrambe corrette.

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.

                                       indirizzo 
                                        / nome  cognome  tel     
                                      _/_/_____/________/  
                                     |                  |  
                                     |     CLIENTE      |
                                     |__________________|   
                                     /        |
                                  cod fisc    | (1,1)
                                  -------     |   
                                     sconto  / \  data acquisto 
                                           \/   \/  
                                           /     \
                                           ACQUISTO 
                                           \     /
                                            \   /
                                             \ / 
                                              |
                                              | (0,N)                 /\                 prezzo  descrizione
                                      ________|_________             /  \              ___/______/_______
                           anni di __|                  |           /    \            |                  |
                          garanzia   |    AUTOMOBILE    |_________ POSSESSO___________|  MOTORIZZAZIONE  |
                                     |__________________|  (1,N)    \    /    (1,1)   |__________________|
                                     /   /    ▲  \                   \  /              \      \         \
                              N.telaio  marca | modello               \/              codice cilindrata alimentazione
                              -------         |                                       ------
                            __________________|____________________
                           |                                       |
                   ________|_________                      ________|_________
                  |                  |                    |                  |
                  |      NUOVO       |                    |      USATO       |
                  |__________________|                    |__________________|
                           |                               /       |        \    
                           |(0,N)                         km       |(0,N)   anno di immatricolazione
                           |                                       | 
                          / \                                     / \     
                         /   \                                   /   \
                        /     \                                 /     \
                        POSSESSO                               NECESSITA    
                        \     /                                 \     /
                         \   /                                   \   /
                          \ /                                     \ /
                           |                                       |
                           |(1,N)                                  |(1,N)
                   ________|_________                      ________|_________
                  |                  |                    |                  |
                  |     OPTIONAL     |                    |    RIPARAZIONE   |
                  |__________________|                    |__________________|
                   /   \            \                     /   \    \         \      
              codice  descrizione  prezzo            codice tipo descrizione costo
              ------                                 ------

Gli attributi dell'entità cliente sono i soliti: nome, cognome, indirizzo, tel., con attributo chiave il codice fiscale.
L'associazione Acquisto, di tipo uno a molti, collega le entita' Cliente ed Automobile e 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 N: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 N: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.

No comments :

Post a Comment