Diagramma Entità-Relazione
I costrutti del diagramma ER sono i seguenti:
- Entità
- Rappresentano concetti complessi e di rilievo che descrivono classi di oggetti con esistenza autonoma. Una istanza di una entità è un oggetto della classe rappresentata. Ad esempio, possibili entità della rete teatrale sono: teatro, spazio teatrale, dipendente, spettacolo, attore, notizia. Una entità ha un nome univoco all'interno dello schema concettuale e viene rappresentata nel diagramma ER con un rettangolo con il nome dell'entità all'interno:
- Relazioni
- Rappresentano legami logici, significativi per la realtà modellata, tra due o più entità. Una istanza di una relazione è una coppia (ennupla in generale) di istanze di entità partecipanti alla relazione. Formalmente, una relazione è un sottoinsieme del prodotto cartesiano delle classi che la compongono. Essendo un insieme, tutti le istanze di una relazione sono distinte.
Ad esempio, esiste una relazione, che possiamo chiamare luogo, tra le entità teatro e spazio teatrale. Questa relazione associa ad un teatro gli spazi teatrali che il teatro usa per gli spettacoli e viceversa essa associa ad uno spazio teatrale i teatri che usano quello spazio. Ogni relazione ha un nome univoco tra le relazioni e le entità dello schema. E' preferibile usare un sostantivo come nome per non indurre ad individuare un verso nella relazione. Una relazione viene rappresentata mediante un rombo con il suo nome all'interno e da linee che connettono la relazione con le entità componenti:
E' possibile avere relazioni ricorsive, cioè che legano la stessa entità. Ad esempio, la relazione collega definita sull'entità dipendente o la relazione genitore sull'entità persona. La relazione collega è simmetrica, la relazione genitore non lo è. Nel caso di relazioni non simmetriche, occorre definire i ruoli di partecipazione dell'entità alla relazione. Nel caso di genitore, i ruoli sono padre e figlio:
Inoltre è possibile avere relazioni che associano più di due entità. Ad esempio, la relazione fornitura associa un fornitore che rifornisce di un certo prodotto un qualche dipartimento:
Per ogni entità partecipante ad una relazione viene specificata una cardinalità di relazione. Essa è una coppia di numeri naturali che specifica il numero minimo e massimo di istanze di relazione a cui una istanza dell'entità può partecipare. E' possibile indicare con la costante N un numero generico maggiore di uno quando la cardinalità non è nota con precisione. Nel diagramma ER, la cardinalità di relazione di una entità etichetta l'arco che lega l'entità alla relazione. Seguono alcuni esempi:
In questo caso un teatro ha nessun, uno o molti spazi teatrali e uno spazio teatrale ha uno o più teatri associati. Questo tipo di relazione in cui entrambe le cardinalità massime sono maggiori di uno si chiama molti a molti. La partecipazione dell'entità teatro si dice opzionale (cardinalità minima uguale a zero) e la partecipazione dell'entità spazio teatrale si dice obbligatoria (cardinalità minima uguale a uno).
In questo caso un teatro ha nessun, uno o molti spazi teatrali e uno spazio teatrale ha esattamente un teatro associato. Dunque non vi sono spazi condivisi da più teatri. Questo tipo di relazione in cui una cardinalità massima è pari a uno e l'altra è maggiore di uno si chiama uno a molti.
In questo caso un teatro ha nessun o uno spazio teatrale e uno spazio teatrale ha esattamente un teatro associato. Dunque non vi sono teatri con più spazi e neppure spazi condivisi da più teatri. Questo tipo di relazione in cui entrambe le cardinalità massime sono uguali a uno si chiama uno a uno.
Di seguito proponiamo un esempio di relazione ricorsiva con ruoli e cardinalità. Ogni persona ha esattamente un padre e zero o più figli:
Infine mostriamo un esempio di relazione ternaria con cardinalità:
Si ricordi che la cardinalità di una entità si riferisce al numero di istanze della relazione a cui quella entità può partecipare. Ad esempio, nel caso di fornitore, la cardinalità si riferisce al numero di coppie prodotto e dipartimento che il fornitore rifornisce. Dunque una cardinalità massima pari a uno per l'entità fornitore si ha quando un fornitore rifornisce un solo dipartimento di un solo prodotto.
- Attributi
- Un attributo è un concetto che ha una struttura semplice e non possiede proprietà rilevanti associate. Un attributo non ha esistenza autonoma ma è associato ad una entità o ad una relazione. Un attributo può essere semplice, multivalore, composto o calcolato:
- un attributo semplice ha, per ogni istanza dell'entità associata, un unico valore atomico di un certo tipo di base. Ad esempio, attributi semplici possono essere nome, indirizzo di posta elettronica e pagina web;
- un attributo multivalore può avere, per ogni istanza dell'entità associata, più valori. Ad esempio, un attributo multivalore potrebbe essere telefono per il quale possono essere noti più numeri;
- un attributo composto è costituito da più attributi correlati. Ad esempio un attributo composto potrebbe essere indirizzo formato dagli attributi via, numero, e città;
- un attributo calcolato è un attributo il cui valore è ottenuto calcolandolo da quello di altri attributi. Al esempio l'incasso totale si ottiene moltiplicando il numero di spettatori per il prezzo del biglietto (supponendo che il prezzo sia fisso).
Un attributo può essere inoltre obbligatorio o opzionale. Un attributo obbligatorio deve sempre avere un valore valido. Un attributo opzionale può non avere un valore a causa di uno dei seguenti motivi:
- il valore dell'attributo non esiste. Ad esempio, nel caso di un attributo email per una persona, la persona non possiede un indirizzo di posta elettronica;
- il valore dell'attributo esiste ma non è noto. Quindi, la persona ha un indirizzo di posta elettronica ma non ci è noto quale sia;
- non è noto se il valore dell'attributo esista. Quindi, non sappiamo se la persona abbia un indirizzo di posta elettronica.
Un attributo può essere associato ad una entità o ad una relazione. Nel secondo caso esso assume un valore per ogni coppia (o ennupla) di istanze
partecipanti alla relazione. Ad esempio, una relazione che lega i dipendenti ai teatri in cui essi lavorano può avere attributi data di assunzione e ruolo.
Un attributo ha un nome univoco all'interno dell'insieme degli attributi della stessa entità o relazione. Dunque attributi di entità o relazioni diverse possono essere omonimi. Un attributo si rappresenta graficamente con una ellisse (con una doppia ellisse se multivalore, con una ellisse tratteggiata se calcolato) con il nome all'interno collegata all'entità, alla relazione o all'attributo composto di appartenenza. Segue un esempio:
- Chiavi
- Per ciascuna entità occorre specificare una chiave primaria. Una chiave è un insieme di uno o più attributi con due caratteristiche:
- univocità: i valori degli attributi identificano univocamente le istanze dell'entità nel micro-mondo modellato. Vale a dire che nell'universo del discorso dell'applicazione non possono esistere due istanze diverse con lo stesso valore per la chiave;
- minimalità: rimuovendo un qualsiasi attributo dall'insieme perdiamo il requisito di univocità.
Ogni insieme di attributi che verifica la prima proprietà è detto superchiave. Una chiave è dunque una superchiave minimale. E' possibile che esistano più chiavi per una entità. Tali chiavi sono dette chiavi candidate. Tra queste occorre sceglierne una che è detta chiave primaria. Esistono dei criteri di decisione per la scelta della chiave primaria:
- gli attributi opzionali non possono far parte della chiave primaria. Dunque chiavi che contengono attributi opzionali non possono diventare primarie;
- sono preferibili, per motivi di efficienza, chiavi piccole, cioè con pochi attributi;
- è preferibile, per motivi di efficienza, scegliere chiavi con attributi che vengono utilizzate da molte operazioni o da operazioni molto frequenti;
Se non si riesce a trovare una chiave che soddisfa questi requisiti è possibile introdurre un ulteriore attributo sintetico che serve solo ad identificare le istanze dell'entità. Questi attributi sono solitamente detti codici.
Facciamo un esempio. In un opportuno micro-mondo, uno studente può essere identificato dalla chiave matricola e dalla chiave nome e cognome. Possiamo scegliere come chiave primaria la matricola che è più breve. Una superchiave di studente è matricola (o nome e cognome) unita con un qualsiasi insieme di attributi di studente. Si noti che il concetto di chiave è definito rispetto al nel micro-mondo modellato. Vedremo tra breve un esempio in cui matricola non è una chiave per studente. Nel diagramma ER, il nome gli attributi che formano la chiave primaria viene sottolineato:
Talvolta una entità non ha una chiave ma è identificata componendo una propria chiave parziale con la chiave di un'altra entità alla quale è associata mediante una relazione. L'entità priva di chiave propria si chiama entità debole, l'entità associata a questa si chiama entità proprietario e la relazione che le lega si dice identificante. Affinchè l'entità debole possa essere univocamente identificata, essa deve partecipare alla relazione identificante con vincolo di partecipazione (1,1). Vale a dire, per ogni istanza dell'entità debole, deve esistere esattamente una istanza dell'entità proprietario (che la identifica). Una identificazione esterna può coinvolgere più entità proprietarie. Inoltre, una entità proprietario può essere a sua volta debole purchè non si formino cicli di entità deboli.
Ad esempio, in una base di dati che modella una rete di università, vi sono le entità studente e università. Ogni studente è dotato di una matricola, che lo identifica solo all'interno dell'università in cui studia. Lo studente viene identificato univocamente componendo la matricola con la chiave dell'entità università (ad esempio nome). In tal caso, l'entità debole è studente, l'entità proprietaria è università, la chiave parziale di studente è matricola e la chiave di studente è matricola e nome dell'università.
Una entità debole viene rappresentata con un doppio rettangolo; la chiave parziale viene sottolineata tratteggiandola. Inoltre, la relazione che la lega all'entità proprietario viene disegnata con un doppio rombo. Segue un esempio:
- Specializzazioni
- Talvota una entità può essere specializzata in una o più sotto-entità. Le sotto-entità ereditano dall'entità genitore i suoi attributi e le sue relazioni. Inoltre, le sotto-entità possono definire nuovi attributi e nuove relazioni non presenti nell'entità genitore. L'insieme delle istanze di una sotto-entità è un sottoinsieme dell'insieme delle istanze dell'entità genitore.
Il concetto di sotto-entità è affine al concetto di sotto-classe nei linguaggi di programmazione orientati agli oggetti. Talvolta, il modello ER esteso con la specializzazione prende il nome di modello Entità-Relazione esteso (Enhanced Entity-Relationship Model, EER)
Vediamo un esempio. Una persona è identificata da codice fiscale, nome e cognome e ha alcuni recapiti telefonici, di cui di vuole registrare il numero, l'operatore e il tipo (fisso o mobile). Uno studente universitario è una persona per la quale si vuole memorizzare la matricola e il corso di laurea a cui è iscritto. Uno corso di laurea è identificato da nome, facoltà e università. Possiamo rappresentare questi requisiti in questo diagramma ER esteso con la specializzazione.
L'entità studente eredita dall'entità persona gli attributi codice fiscale, nome e cognome e la relazione recapito. In particolare la chiave di studente è quella di persona, cioè codice fiscale. Inoltre, studente definisce un nuovo attributo matricola e una nuova relazione iscritto. Si noti il simbolo di sottoinsieme sull'arco che connette l'entità persona alla sotto-entità studente.
Una entità può specializzarsi in più sotto-entità. La specializzazione è totale se ogni istanza dell'entità genitore corrisponde ad una istanza di qualche sotto-entità, oppure parziale altrimenti. Una specializzazione è disgiunta se gli insiemi di istanze delle sotto-entità sono disgiunti, altrimenti è sovrapposta. Ad esempio, supponiamo di estendere il precedente diagramma con l'entità lavoratore, sotto-entità di persona. Un lavoratore è caratterizzato da una professione e da un impiego presso un'azienda. Il diagramma ER risultante è il seguente.
La lettera O all'interno del cerchio da cui partono gli archi verso le sotto-entità studente e lavoratore sta ad indicare che la specializzazione è di tipo sovrapposto (overlapping); infatti esistono studenti lavoratori. Per specializzazioni di tipo disgiunto si usa la lettere D (disjoint). La specializzazioni totali vengono disegnate con una doppia linea che connette l'entità genitore al cerchio di diramazione dei collegamenti alle sotto-entità, quelle parziali da una linea singola. Nel nostro caso, la specializzazione è parziale in quanto esistono persone che non sono ne studenti e ne lavoratori.
Infine, una sotto-entità può avere più entità genitore. Essa eredita gli attributi e le relazioni da tutti i genitori. In tal caso occorre fare attenzione a non ereditare due volte lo stesso attributo. Questo accede se le entità genitore sono a loro volta sotto-entità di una stessa entità nonno, e quindi ereditano le stesse proprietà da quest'ultima. Inoltre occorre rinominare eventuali attributi diversi ma omonimi. Questo accede se l'insieme unione di tutti gli attributi delle entità genitore contiene attributi differenti ma omonimi. L'ereditarietà multipla generalmente non viene ammessa per le classi dei linguaggi orientati agli oggetti.
Estendiamo il precedente diagramma con l'entità studente-lavoratore, sotto-entità di studente e di lavoratore. Per uno studente lavoratore viene specificata una percentuale di rivalutazione del voto di laurea, in funzione dell'intensità dell'impegno lavorativo. Otteniamo il seguente diagramma ER.
Uno studente lavoratore eredita gli attributi e le relazioni di persona (una sola volta), quelli di studente e quelli di lavoratore. Inoltre definisce un nuovo attributo rivalutazione.
Il modello ER può essere descritto in termini di sè stesso mediante il seguente diagramma ER. Si noti che l'informazione sulla chiave è stata modellata mediante un attributo chiave della relazione appartenenza-E che associa gli attributi alle entità corrispondenti. Possiamo immaginare che, per ogni coppia entità-attributo della relazione tale attributo abbia valore vero se e soltanto se l'attributo fa parte della chiave dell'entità.