Friday, July 6, 2018

Basi di Dati: Il modello concettuale

DATABASE

Un database e' un insieme di dati e corrispondenze tra insieme di dati, memorizzato in modo permanente nella memoria di massa. In altre parole, un database e' un insieme di archivi integrati che descrivono una specifica realta' di interesse.

Ad esempio, 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.
Ad esempio, quando andiamo in banca e facciamo delle operazioni, l'operatore inserisce dei dati, parte una transazione e i dati immessi popolano un database.
Ad esempio, 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.

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 sono: Microsoft SQL Server, (a pagamento) Oracle, (a pagamento) MySQL, (open source). 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 ospita al suo interno i comandi per creazione di tabelle, inserimento di dati in tabella, aggiornamento di dati in tabella, interrogazione dei dati, (se sono un amministratore) i comandi per il controllo dell'accesso dei dati (quali utenti hanno accesso ai dati). Questi linguaggi hanno delle sigle: Data Manipulation Language, Data Control Language, Data Definition Language, Query Language.

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  (E-R)     |
                 |____________________________________|
                                  |
                                  |  2.progettazione logica
                  ________________V___________________
                 |                                    |
                 |      schema logico  (Tabelle)      |
                 |____________________________________|
                                  |
                                  |  3.progettazione fisica
                  ________________V___________________
                 |                                    |
                 |             database               |
                 |____________________________________|

  1. Nella progettazione concettuale si analizza la realta di interesse e si produce uno modello concettuale: il modello ER. Il diagramma ER e' una rappresentazione grafica, una modellizzazione di cosa voglio realizzare. Lo diagramma ER contiene entita ed associazioni.
  2. Nella progettazione logica si traduce il diagramma E-R in uno schema logico equivalente. Lo schema logico e' basato su un modello logico, ad esempio il modello relazionale. Nel modello relazionale non esistono le associazioni (relationships), per cui sia le entità che le associazioni devono essere tradotte in relazioni.
  3. Nella progettazione fisica, lo schema logico viene tradotto nello schema fisico del database

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.

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).

Il Modello E-R

La progettazione concettuale viene realizzata attraverso l'uso dei modello E-R (in inglese Entity Relationship model). Il diagramma E-R e' una rappresentazione di tipo grafico o un modello della realta' di interesse.

Un diagramma E-R e' costituito dai seguenti elementi/termini:

  • entita' = oggetto che si vuole decrivere, rappresentato graficamente con un rettangolo
    esempio: l'automobile per un database di un negozio di ricambi auto
  • attributo = caratteristica che descrive l'entita', rappresentato graficamente con delle linee uscenti dall'entita
    esempio: il numero di telaio dell'auto
  • associazione = interazione tra entita'
    esempio: l'associazione tra le due entita 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'entita automobile usata non puo' essere antecedente ad una certa data
Le Entita'

Una entita viene rappresentata graficamente da un rettangolo, gli attributi sono rappresentati graficamente come delle linee che escono dall'entita'. Se una entita' 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      |       Es: 8829827924, "Informatica Generale" di Piero Gallo e Fabio Salerno
 |__________________|
   \        \       \
    \        \       \
   codice   titolo  autore  
    ISBN

  ____________________
 |                    |
 | CLASSE DI STUDENTI |     Es: 5^A  informatica
 |____________________|
   \        \        \
    \        \        \
   numero   sezione  specializzazione

Gli Attributi

Gli attributi possono essere semplici o atomici, composti, multipli. Un attributo semplice non e' ulteriormente scomponibile (es: codice ISBN). Nell'anagrafica c’è l'entita' persona che ha l'attributo indirizzo che e' composto da via, numero e CAP. 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'entita' e si crea una entita' a parte, relazionata con l'entita di origine: nel caso dell'entita' libro si crea l'entita' 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'entita' e non creo una nuova entita', 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 entita' 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.
Attributo Chiave

Ogni entita' 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'entita' libro ha una serie di istanze: "Informatica Generale" e' una istanza dell'entita' libro, e l'attributo chiave dell'entita' libro e' il codice ISBN.

Nel diagramma ER le chiavi sono sottolineate.

Esempi di chiave sono: la matricola per l'entita dipendente, la matricola per l'entita' 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'entita 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.

Le Associazioni

Le entita' sono legate tra di loro: il concessionario di automobili ha l'entita automobile che e' collegata al cliente, il ministero delle finanze ha l'entita versamento che e' collegata al contribuente. Chi usa il DB vuole sapere il contribuente quanti versamenti ha fatto. Nel diagramma ER le entita' sono collegate tra loro attraverso le associazioni. Le associazioni sono schematizzate utilizzando il rombo, al cui interno si scrive una espressione verbale.

                         / \
  __________            /   \                _________                        
 |         |           /     \              |         |
 | entita' | _______ associazione _________ | entita' |
 |_________|           \     /              |_________|
                        \   /                         
                         \ /

Una associazione binaria lega tra di loro due entita', una associazione ternaria lega tra di loro tre entita'. Di solito negli schemi ER, si cerca di fare associazioni binarie, perche' quelle ternarie sono complicate, comunque quelle ternarie si possono spezzare in due associazioni binarie.

Anche le associazioni possono avere attributi propri: le due entita studente ed esame hanno i loro attributi, l'associazione sostiene contiene data e voto.

                         / \
  __________            /   \            _________                        
 |          |          /     \          |         |
 | studente | ________ sostiene _______ |  esame  |
 |_________ |          \     /          |_________|
                       /\   /\                         
                    data \ / voto 

L'associazione cliente-ordine-fattura e' un esempio di associazione ternaria.

                     / \                      
  _________         /   \         _________   
 | cliente |_______/     \_______|  ordine |
 |_________|       \     /       |_________|
                    \   /                        
                     \ / 
                      |
                ______|_____
               |   fattura  |
               |____________|   
Verso dell'associazione

Le associazioni possono essere viste sia in un verso che nell'altro: lo studente sostiene un esame, un esame e' sostenuto da uno studente. L'associazione studente-esame e' l'associazione diretta, l'associazione esame-studente e' l'associazione inversa.

Associazione parziale o totale

Una associazione puo' essere parziale o totale. L'associazione persona-auto e' parziale perche' non tutte le persone possegono un auto, l'associazione auto-persona e' totale perche' un'auto in circolazione sicuramente a qualche persona appartiene. Persona-Auto e' associazione diretta parziale, associazione inversa totale.
Nel diagramma ER una associazione totale e' rappresentata da una linea continua, una associazione parziale da una linea tratteggiata.

                       / \
  __________          /   \            _________                        
 |         |         /     \          |         |
 | persona | _ _ _ _ possiede ________|   auto  |
 |_________|         \     /          |_________|
                      \   /                         
                       \ /

Nota: di solito nello diagramma ER per le entita' 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: avrete degli esempi di modelli ER fatti in corsi universitari, ma 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 entita' o associazione deve avere un solo attributo chiave.

Tipi di associazione

Le associazioni possono essere:

  • 1:1 o uno ad uno
  • 1:N o uno a molti
  • N:N o molti a molti

Le associazioni 1:1 sono rare, esempi di associazioni 1:1 sono persona-codice fiscale, preside-scuola. Le associazioni 1:1 sono delle schematizzazioni a livello concettuale di pura accademia. L'associazioni 1:1 vengono tradotte, nel modello logico relazionale, facendo confluire gli attributi delle due entita in una sola entita'.

                       / \
  __________          /   \            _________                        
 |         |         /     \          |         |
 | preside |_________ dirige _________|  scuola |
 |_________|    1    \     /    1     |_________|
                      \   /                         
                       \ /

L'associazione preside-scuola e' una associazione 1:1 totale, sia per la diretta che l'inversa.

Le associazioni 1:N sono quelle piu' comuni.

                        / \
  __________           /   \             _________                        
 |         |          /     \           |         |
 | persona |_ _ _ _ _ possiede _________|   auto  |
 |_________|    1     \     /    N      |_________|
                       \   /                         
                        \ /

Una persona puo' anche non possedere un'auto, ma ne puo' possedere anche piu' di una. L'associazione inversa si legge: se esiste un'auto allora esiste sicuramente una persona che la possiede.

Ad esempio, l'associazione calciatore-squalifica e' una associazione parziale 1:N, l'associazione squalifica-calciatore e' una associazione totale 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.

Nella associazione molti a molti, ad un elemento dell'entita' di partenza possono corrispondere piu' di un elemento dell'entita di arrivo e viceversa.

Ad esempio, in una scuola, un docente puo' insegnare piu' materie, e viceversa una materia viene insegnata da piu' docenti, perche' ci sono piu' classi.

                       / \
  _________           /   \            _________                        
 |         |         /     \          |         |
 | docente |________ insegna _________| materia |
 |_________|    N    \     /    N     |_________|
                      \   /                         
                       \ /

Un altro esempio e' 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.

Associazione per generalizzazione

Ci sono casi in cui una entita' e' un caso particolare di un'altra entita'. 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 entita' 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  |                 entita padre
                  |___________| 
                       | 
        _______________|_______________                              
       |               |               |
  _____|____      _____|____      _____|____
 |   ICI    |    |   TARSU  |    |   TOSAP  |   entita figlie
 |__________|    |__________|    |__________|

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

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

Una gerarchia ISA si traduce nel modello logico relazionale introducendo nell'entita padre un campo di nome tipoDi; in questo campo si codifica il tipo di entita' figlia trattata.

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 entita' 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 totale, ad esempio, per una associazione E1-E2 totale 1:N, cio' vuol dire che ad un elemento dell'entita E1 deve corrispondere almeno un elemento dell'entita E2 e che ad un elemento dell'entita' E2 deve corrispondere un solo elemento dell'entita E1. Oppure non e' possibile che un elemento in E2 non sia in relazione con un elemento dell'entita E1 e non e' possibile che un elemento dell'entita E1 non sia in relazione con uno o piu' elementi dell'entita' di arrivo.
  • I vincoli espliciti sono quelli che si aggiungono sul database formulando delle restrizioni su come devono essere i dati. Ad esempio se implemnto 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 vine 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        |
 |__________________|\     N        \     /       N       |____________________|
  \      \       \    \              \   /                 \       \       \   
   \      \       \    \             /\ /                   \       \       \
  codice cognome nome  tel          /                       ISBN    autore  titolo 
                                  data prestito

Il diagramma ER contiene le entita' 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' parziale 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:

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

Anche Il Ministero delle Finanze fa dei controlli sul codice fiscale del contribuente: se il contribuente non ha presentato il 730, c’è un campo con valore NULL ed 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 entita', 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 entita'. Le associazioni molti a molti vengono spezzate in due associazioni di tipo 1:N. In pratica, si introduce una nuova entita' di nome Prestito, che ha un attributo chiave ID_prestito e gli altri due campi data prestito e data consegna.

    indirizzo                         data consegna                       soggetto  copie disponibili 
    /                                 /    ISBN_libro                     /         /
  _/_______________                 _/____/_________                 ____/_________/___
 |                 |      /\       |                |      /\       |                  |
 |      UTENTE     |---- /  \ -----|    PRESTITO    |-----/  \ -----|      LIBRO       |
 |_________________|\  1 \  / N    |________________|   N \  / 1    |__________________|
  \      \       \   \    \/        \     \    \           \/          \       \       \   
   \      \       \   \              \     \    cod_utente              \       \       \
  codice cognome nome  tel           ID    data prestito                ISBN    autore  titolo 

Questo procedimento non e' necessario farlo nello modello 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 entita' con i propri attributi. In questo diagramma ER un utente ha piu' prestiti e un libro ha piu' prestiti. Le due modellazioni concettuali sono entrambe corrette ed hanno la stessa traduzione in termini di modello relazionale.

Quando si fa il modello concettuale e si trovano delle associazioni molti a molti ovviamente non si fanno ulteriori scomposizioni, ad esempio nel progetto Customers ci sono tre associazioni ternarie molti a molti: Prodotto-Cliente-Sconto, Prodotto-Cliente-Promozione e Prodotto-Cliente-Incentivazione: queste si spezzano nel modello logico relazionale introducendo le entita' BonusIncentivazione, BonusPromozione e BonusSconto nelle quali vanno a finire tutti gli attributi chiave delle tre entita'.

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
                                              |   
                                     sconto  / \  data acquisto 
                                           \/   \/  
                                           /     \
                                           ACQUISTA 
                                           \     /
                                            \   /
                                             \ / 
                                              |
                                              | N                    / \                 prezzo  descrizione
                                      __________________            /   \              ___/______/_______
                           anni di __|                  |    1     /     \     N      |                  |
                          garanzia   |    AUTOMOBILE    |_________    HA   ___________|  MOTORIZZAZIONE  |
                                     |__________________|          \     /            |__________________|
                                     /  /     ▲  \                  \   /              \      \         \
                               codice  marca  |  modello             \ /              codice cilindrata alimentazione
                                              |
                            __________________|____________________
                           |                                       |
                   __________________                      __________________
                  |                  |                    |                  |
                  |       NUOVO      |                    |      USATO       |
                  |__________________|                    |__________________|
                           :                               /       :       \    
                           : N                           km        : N     anno di immatricolazione
                          / \                                     / \     
                         /   \                                   /   \
                        /     \                                 /     \
                           HA                                  NECESSITA    
                        \     /                                 \     /
                         \   /                                   \   /
                          \ /                                     \ /
                           | N    prezzo                           | N   costo
                   ________|_____/___                      ________|____/____
                  |                  |                    |                  |
                  |     OPTIONAL     |                    |    RIPARAZIONE   |
                  |__________________|                    |__________________|
                   \        \                              \     \      \                   
                   codice  descrizione                     codice tipo  descrizione

Gli attributi dell'entita' cliente sono i soliti: nome, cognome, indirizzo, tel., con attributo chiave il codice fiscale. L'associazione Cliente-Automobile di tipo 1:N e si chiama Acquista. Questa associazione contiene gli attributi data acquisto e sconto.
Sia l'automobile nuova che l'auto usata puo' essere descritta da attributi che sono codice, marca, modello, telaio, 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'entita padre. Un'auto usata ha degli attributi in piu' rispetto a quella nuova, che sono km percorsi ed anno di immatricolazione: le nuove sono immatricolate dal concessionario al momento della vendita.
L'associazione parziale 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 parziale 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 entita' 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'entita' 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