Analisi entità - relazioni

Un altro approccio allo studio del problema è il modello Entity Relationship, proposto originariamente da Chen nel 1976 e poi sviluppato da molti altri autori.

L’analisi strutturata evidenzia il flusso delle informazioni, specificando i processi che le elaborano e le trasformano. Ma una delle componenti fondamentali di ogni sistema informativo è il database, cioè l’ insieme di tutti i dati, e il DFD non è molto espressivo a questo riguardo. Vi è anche un altro aspetto: le funzioni evolvono nel tempo con notevole rapidità, i dati sono molto più stabili.

E’ necessario quindi riservare particolari attenzioni alla definizione logica del contenuto del database, e il modello E-R ci aiuta in questo compito.

Il principio dell’analisi entity-relationship è creare un modello del sistema identificando i dati e le relazioni tra questi.

Questo aspetto è così importante che l’analisi strutturata moderna prevede sempre l’unione tra il modello strutturato classico e il modello E-R.

Nel modello E-R le informazioni sono rappresentate attraverso tre concetti primitivi:

Entità, che rappresentano gli oggetti che vengono modellati.

Attributi, che rappresentano le proprietà di ogni oggetto.

Relazioni, che rappresentano le associazioni tra gli oggetti.

Una entità è un oggetto, una cosa, un concetto, un evento che fa parte del sistema che stiamo analizzando. Una entità è un qualcosa per cui dovremo memorizzare delle caratteristiche, che può esistere indipendentemente dalle altre entità del sistema, che può sempre essere univocamente identificata.

Ad ogni entità sono associati degli attributi che la descrivono; per esempio una entità CASA può avere come attributi l’indirizzo, il numero di camere, i metri quadrati; una MACCHINA avrà il colore, il modello, la data di costruzione, i chilometri percorsi; una PARTITA_DI_CALCIO avrà le due squadre, il risultato e la data dell’incontro.

Entità più attributi definiscono uno schema di entità, che può avere molte istanze. Nel primo degli esempi precedenti lo schema è:

CASA(INDIRIZZO,#CAMERE,MQ)

mentre le istanze possono essere:

CASA("Via del Corso 1, ROMA",5,120)

CASA("Via Roma 4, Rimini (FO)",4,100)

Un attributo o un insieme di attributi che identificano univocamente una istanza di una entità sono detti "chiave".

Nel caso precedente l’attributo INDIRIZZO identifica univocamente la CASA a cui ci riferiamo, per cui può essere una chiave, mentre il numero di camere o i metri quadrati non hanno questa caratteristica, in quanto possiamo avere lo stesso valore per due istanze diverse.

Tra tutte le chiavi possibili è utile sceglierne una che sia preferenziale rispetto alle altre e sarà la "chiave primaria". E’ buona regola dove possibile scegliere una chiave primaria composta da un solo attributo.

Una relazione è una interazione tra due o più entità. Per esempio la relazione GIOCA_PER è una relazione tra le entità GIOCATORE e SQUADRA, o anche CITTADINO_DI è una relazione tra PERSONA e STATO.

Ogni relazione ha una ben determinata "cardinalità", che indica il numero di istanze coinvolte nella relazione. I valori possibili sono 1:1, 1:N o N:M.

Prendiamo ancora le entità GIOCATORE e SQUADRA, analizziamo delle possibili relazioni.

CAPITANO_DI è una relazione 1:1, cioè un giocatore è capitano di una squadra e ogni squadra ha un capitano.

GIOCA_PER è una relazione 1:1, ogni giocatore infatti gioca per una sola squadra, se però leggiamo questa relazione all’inverso abbiamo una relazione 1:N, perchè in ogni squadra ci sono molti giocatori.

Se la squadra applica una tattica "a uomo", ogni difensore marca un avversario, per cui la relazione MARCA è della cardinalità 1:1.

Nel caso di una tattica "a zona" le cose sono molto più complesse: non c’è più una relazione diretta tra un attaccante e un difensore, perchè ogni difensore occupa una porzione di campo dove possono transitare attaccanti diversi. La relazione in questo caso è N:M, cioè N difensori MARCANO M attaccanti.

Le relazioni possono avere degli attributi, cioè delle proprietà a loro legate. Per esempio nella relazione GIOCA_PER tra GIOCATORE e SQUADRA potrebbe essere indicato il ruolo ricoperto dal giocatore.

Questo attributo potrebbe essere anche memorizzato nell’entità GIOCATORE, ma se diamo la possibilità ad un giocatore di giocare per due squadre, magari una professionistica e una per beneficenza e in ognuna con un ruolo diverso, siamo per forza costretti a spostare l’attributo nella relazione.