4.1 Introduzione

Convertendo le tabelle del database in tabelle normali, ora puoi analizzare le relazioni tra di esse. Il numero di elementi che interagiscono tra due tabelle correlate è chiamato cardinalità. La cardinalità ti aiuta a controllare l'efficienza con cui hai suddiviso i dati in tabelle.

Teoricamente, tutte le entità possono intrattenere relazioni tra loro, ma in pratica esistono tre tipi di relazioni tra entità:

  • Uno a uno
  • Uno a molti
  • molti a molti

4.2 Comunicazione uno a uno

Se esiste una sola istanza dell'entità A per ogni istanza dell'entità B, si dice che hanno una relazione uno a uno (spesso indicata come "1:1"). Sui diagrammi ER, tale relazione è indicata da una linea con una piccola barra a ciascuna estremità:

Una relazione 1:1 generalmente indica che, a meno che tu non abbia una buona ragione per tenerle separate, i dati delle due tabelle sono meglio combinati in uno solo.

Tuttavia, in alcune circostanze è ragionevole utilizzare tabelle con relazioni 1:1. Se le tue tabelle hanno campi con dati opzionali, come le descrizioni, e in molti casi sono vuote, ha senso spostare tutte le descrizioni in una tabella separata, che ti permetterà di eliminare le frequenti lacune e aumentare l'efficienza del tuo database .

Quindi, per mappare correttamente i dati, dovrai includere almeno una colonna identica in ogni tabella (è meglio scegliere una chiave primaria per questo).

4.3 Relazione uno-a-molti

Questo tipo di relazione si verifica quando un record in una tabella è associato a più entità in un'altra. Ad esempio, lo stesso cliente potrebbe effettuare più ordini o un visitatore della biblioteca potrebbe prendere in prestito più libri in una sola visita. Le relazioni uno-a-molti (o 1:M in breve) sono espresse in un diagramma utilizzando la notazione a zampa di gallina, come mostrato nell'esempio seguente:

Per applicare una relazione 1:M durante la pianificazione di un database, è sufficiente aggiungere la chiave primaria dalla tabella "uno" come attributo alla tabella "molti". Se la chiave primaria si trova in un'altra tabella, viene chiamata "chiave esterna". La tabella "uno" è considerata la tabella padre, mentre la tabella "molti" è considerata la tabella figlio.

4.4 Relazione molti-a-molti

Quando più entità in una tabella possono essere connesse a più entità in un'altra, si considera che abbiano una relazione molti-a-molti (o M:M). Ad esempio, esiste una tale relazione tra studenti e classi, poiché ogni studente può frequentare diverse classi e, di conseguenza, molti studenti possono venire a ciascuna classe.

Nel diagramma ER, questo tipo di relazione viene visualizzato come segue:

Sfortunatamente, è impossibile implementare direttamente tale relazione nel database. Pertanto, dovrà essere suddiviso in due relazioni uno-a-molti.

Per fare ciò, dovrai creare una nuova entità tra le due tabelle. Se viene stabilita una relazione M:M tra vendite e prodotti, la nuova entità può essere chiamata "prodotti venduti" perché rappresenterà il contenuto di ogni vendita.

Con "merce venduta" e la tabella "vendite" e la tabella "merce" saranno collegate per tipo 1:M. In diversi modelli, tali entità intermedie sono chiamate in modo diverso: "tabelle di collegamento", "entità associative" o "tabelle dei nodi".

Ogni voce della tabella di collegamento collega due diverse entità di tabelle adiacenti (e può anche contenere informazioni aggiuntive). Ad esempio, una tabella di collegamento tra studenti e classi potrebbe avere il seguente aspetto:

4.5 Obbligatorio o no?

Un altro approccio all'analisi dei collegamenti consiste nel determinare quale delle entità connesse è un prerequisito per la presenza di un'altra entità. Il lato del collegamento opzionale è contrassegnato da un cerchio sul tronco.

Ad esempio, affinché uno stato abbia un proprio rappresentante all'ONU, deve esistere sulla mappa del mondo, ma l'affermazione contraria sarà falsa:

Due entità possono essere interdipendenti (cioè, una non può esistere senza l'altra).

Collegamenti ricorsivi

A volte una tabella può fare riferimento a se stessa. Ad esempio, una tabella dei dipendenti potrebbe avere un attributo "manager" che ci farebbe riferimento a un altro dipendente nella stessa tabella. Questa è la relazione ricorsiva.

Connessioni extra

I collegamenti sono considerati ridondanti se sono espressi più di una volta. Di norma, uno di essi può essere eliminato senza perdere informazioni importanti. Ad esempio, se l'entità "studenti" è collegata all'entità "docenti" non solo direttamente, ma anche indirettamente tramite "classi", ha senso rimuovere la relazione tra le entità "studenti" e "docenti". Questa decisione è giustificata dal fatto che è possibile assegnare gli studenti ai docenti solo attraverso le classi.

4.6 Integrità referenziale dei dati

Quando si cambiano le chiavi primarie ed esterne, si dovrebbe osservare un aspetto come l'integrità referenziale dei dati . La sua idea principale è mantenere due tabelle in un database che memorizzano gli stessi dati coerenti.

L'integrità dei dati rappresenta le relazioni correttamente costruite tra le tabelle con il corretto collegamento tra di esse. In quali casi l'integrità dei dati può essere violata:

  • Anomalia di cancellazione . Si verifica quando una riga viene eliminata dalla tabella principale. In questo caso, la chiave esterna della tabella dipendente continua a fare riferimento alla riga eliminata dalla tabella principale.
  • Anomalia di inserimento . Si verifica quando una riga viene inserita in una tabella dipendente. In questo caso, la chiave esterna della tabella dipendente non corrisponde alla chiave primaria di nessuna delle righe della tabella principale.
  • Aggiornamento anomalia. Con una tale anomalia, diverse righe di una tabella possono contenere dati che appartengono allo stesso oggetto. Se modifichi i dati in una riga, possono entrare in conflitto con i dati di un'altra riga.

Anomalia di cancellazione

Per risolvere l'anomalia di cancellazione, la chiave esterna deve essere impostata su uno dei due vincoli:

Se una riga di una tabella dipendente richiede necessariamente una riga della tabella principale, la chiave esterna viene impostata su eliminazione a cascata. In altre parole, quando una riga viene eliminata dalla tabella principale, le righe associate vengono eliminate dalla tabella dipendente.

Se una riga di una tabella dipendente non consente alcuna relazione con una riga della tabella principale (ovvero, tale relazione è facoltativa), la chiave esterna viene impostata su NULL quando la riga correlata viene eliminata dalla tabella principale. La colonna della chiave esterna deve essere nullable.

Anomalia di inserimento

Per risolvere l'anomalia di inserimento durante l'aggiunta a una tabella di dati dipendente, la colonna che rappresenta la chiave esterna deve essere nullable. Pertanto, se l'oggetto aggiunto non ha alcuna connessione con la tabella principale, la colonna della chiave esterna avrà un valore NULL.

Aggiornare le anomalie

Per risolvere il problema dell'anomalia dell'aggiornamento, viene applicata la normalizzazione, discussa in precedenza.