ErdDocs

Simboli del diagramma ER

I diagrammi entità relazione usano tre famiglie di simboli. La zampa di gallina (crow’s foot) è la notazione degli strumenti per database. Chen è quella che si studia a lezione. UML applica ai dati i diagrammi delle classi. In tutte e tre una tabella o entità è un rettangolo, e una relazione è una linea tra rettangoli. Cambia il modo di scrivere la cardinalità, cioè quante righe da un lato corrispondono a una riga dall’altro. La zampa di gallina la segna alle estremità della linea, quindi ogni linea si legge due volte, una verso ciascuna tabella. Ogni simbolo qui sotto è accompagnato dalla sua lettura. Lo disegna ErdDocs, nella stessa notazione che usa per il tuo schema nello strumento più in basso.

Cosa significano le estremità della zampa di gallina?

Nella zampa di gallina tutto accade alle estremità della linea. Ogni estremità porta fino a due segni. Quello più vicino alla tabella indica il massimo, quello esterno il minimo.

SimboloNomeCome si leggeEsempio
Esattamente unoEsattamente unoBarra + barra: almeno uno e al massimo unoun ordine appartiene a esattamente un cliente
Zero o unoZero o unoCerchio + barra: facoltativo, al massimo unoun cliente ha al massimo una carta fedeltà
Uno o moltiUno o moltiBarra + zampa di gallina: almeno unoun ordine ha almeno una riga
Zero o moltiZero o moltiCerchio + zampa di gallina: quanti si vuole, anche nessunoun cliente ha zero o molti ordini
Scheda riassuntiva della notazione a zampa di gallina con i quattro simboli di estremità: esattamente uno (barra e barra), zero o uno (cerchio e barra), uno o molti (barra e zampa di gallina), zero o molti (cerchio e zampa di gallina)Scheda riassuntiva della notazione a zampa di gallina con i quattro simboli di estremità: esattamente uno (barra e barra), zero o uno (cerchio e barra), uno o molti (barra e zampa di gallina), zero o molti (cerchio e zampa di gallina)
Le stesse quattro estremità in un’unica scheda. Salvala, oppure scarica l’SVG in versione chiara o scura.

Come leggere una linea intera

Una linea di relazione si legge due volte, una verso ciascuna tabella. L’esempio classico di un negozio:

Verso orders: un cliente ha zero o molti ordini. Verso customers: un ordine appartiene a esattamente un cliente.customersorders
Verso orders: un cliente ha zero o molti ordini. Verso customers: un ordine appartiene a esattamente un cliente.

Le regole di lettura complete, compreso il significato dei segni quando lo schema è noto solo a metà, sono nella pagina sulla notazione a zampa di gallina. Quale combinazione scegliere è una questione di cardinalità.

Chen, zampa di gallina e UML a confronto

ConcettoChenZampa di gallinaUML
Entità / tabellaRettangoloRettangolo con l’elenco delle colonneRiquadro della classe
AttributoOvale collegato all’entitàUna riga dentro la tabellaUn campo nel riquadro della classe
RelazioneRombo tra le entitàUna linea con i segni di cardinalità alle estremitàLinea di associazione
CardinalitàLettere 1, N, M accanto al romboBarra, cerchio e zampa di gallina alle estremitàMolteplicità 1, 0..1, 1..*, *
Chiave primariaAttributo sottolineatoSegno di chiave nella riga della colonnaStereotipo o proprietà

Nei corsi italiani lo schema E-R indica spesso le cardinalità con coppie (min,max), come (0,N) o (1,1), scritte accanto all’entità. Dicono le stesse cose dei segni della zampa di gallina, che però stanno all’altra estremità della linea. In pratica, Chen va bene finché lo schema è solo un’idea. UML serve quando il diagramma vive accanto al codice dell’applicazione. Quando il database esiste già, serve la zampa di gallina. È proprio quella che ErdDocs disegna dallo schema incollato.

Un simbolo che i manuali non hanno: la linea tratteggiata

Nei dump reali spesso mancano le chiavi esterne. Le applicazioni Rails, Django e Laravel tengono le relazioni nel codice, e il database non dichiara nulla. In questo caso ErdDocs aggiunge un suo simbolo. La linea continua è una relazione dichiarata dal database. Quella tratteggiata è dedotta dal nome della colonna, per esempio user_id → users. La prima è un vincolo, la seconda un’ipotesi fondata.

Il tratteggio indica che nel dump non c’è una FOREIGN KEY e che la linea viene dalla convenzione dei nomi.usersposts
Il tratteggio indica che nel dump non c’è una FOREIGN KEY e che la linea viene dalla convenzione dei nomi.

I simboli su uno schema vero

Incolla il tuo SQL nello strumento qui sotto. Trova le chiavi esterne e i vincoli di unicità, e in base a quelli segna il lato «molti» di ogni linea.

Il tuo schema

Domande frequenti

Cosa significano i simboli della zampa di gallina?

Ogni estremità ha fino a due segni. Quello più vicino alla tabella indica il massimo. Una barra significa «al massimo uno», la zampa a tre punte «molti». Quello esterno indica il minimo. Una barra significa «almeno uno», un cerchio «può essere zero». Cerchio + zampa si legge quindi «zero o molti», barra + barra «esattamente uno».

Quale notazione usare, Chen o zampa di gallina?

La notazione di Chen è adatta alla didattica e alla progettazione concettuale. Il rombo fa della relazione un elemento a sé, ed è ciò che serve a lezione. La zampa di gallina è adatta ai database reali. Ogni tabella è un riquadro con le colonne dentro, che è la forma vera di uno schema.

Come si rappresenta una relazione molti a molti?

Con la zampa di gallina a entrambe le estremità. Nello schema fisico il molti a molti si realizza con una tabella ponte, per esempio order_items tra orders e products. Per questo gli strumenti che disegnano database reali mostrano due linee uno a molti che convergono sulla tabella ponte.

Perché gli strumenti per database non disegnano i rombi e gli ovali di Chen?

Perché in un database fisico ciò che Chen disegna a parte si riduce a tabelle e colonne. Un ovale di attributo è una riga dentro il riquadro della tabella. Un rombo di relazione è una colonna di chiave esterna oppure una tabella ponte. Disegnarli come forme separate raddoppierebbe le dimensioni del diagramma senza aggiungere alcuna informazione.

Vedi anche