Progettazione concettuale (SCHEMI E-R)
-
Individuare le entità
-
Individuare gli attributi (semplici, multipli, composti)
-
Individuare il dominio degli attributi (tipo, eventuale dominio, NULL?)
-
Per ogni entità individuare le chiavi candidate e la chiave primaria.
-
Individuare le associazioni tra le entità (1:1, 1:N, N:N).
-
Per le associazioni N:N verificare se è il caso di aggiungere attributi.
Progettazione Logica
-
Una tabella per ogni entità, con il nome al plurale
-
Per ogni associazione 1:1 si aggiunge una delle due chiavi primarie come chieve esterna nell'altra.
-
Per ogni associazione 1:N si aggiunge la chiave primaria della entità dal lato 1 alla tabella dell'entità dal lato N come chiave esterna. Verificare se può essere NULL. (Esempio: persone imbarcate su una nave: metto la chiave di nave in persona, può essere NULL).
-
Per ogni associazione N:N si crea una nuova tabella con le chiavi primarie delle due entità e gli eventuali attributi della relazione. Solitamente la chiave primaria è composta dalle due chiavi esterne.
Regole sulle chiavi:
-
Chiave candidata e/o primaria: univoca, not null (a livello di sviluppo della tabella le chiavi candidate non scelte come primarie mantengono i vincoli di unicità e not null). Se possibile la chiave primaria deve essere SEMPLICE (non composta), numerica meglio ancora.
-
Chiavi esterne: possono essere NULL o NOT NULL, potrebbero, in certi casi, essere univoche.
Regole di integrità referenziale (ci si riferisce ai dati contenuti nelle tabelle)
-
i valori delle chiavi primarie devono essere univoci (banale)
-
i valori delle chiavi esterne devono essere compresi nell'insieme dei valori della chiave primaria della tabella referenziata.
Influenzano gli inserimenti, modifiche e cancellazione dei dati.
Insert: prima metto i dati nella tabella referenziata (Navi, per esempio) e poi inserisco o modifico i record della tabella referente (Persone): per dire che una persona è imbarcata su una nave, la nave deve esistere)
Delete: per rispettare il vincolo di integrità referenziale deve prestare attenzione a diversi casi:
-
cancello una nave: che succede alle persone che erano imbarcate?
-
Non posso cancellare la nave fintanto che c'è qualcuno imbarcato
-
Cancello anche tutte le persone imbarcate (ON DELETE CASCADE nella definizione della chiave esterna)
-
Metto NULL nella chiave esterna di Persone per ognuna delle persone imbarcate sulla nave (ON DELETE NULL ????)
-
Metto il valore di default per quella chiave esterna (ON DELETE DEFAULT ???), quasi mai usato.
-
-
cancello una persona: non faccio nulla sulla tabella Navi.
Update: le regole sono le stesse perchè cancello i vecchi valori e inserisco i nuovi, però posso indicare regole diverse rispetto alla Delete.