Immaginate uno schema come tale.Scorciatoie da tastiera esterna nella tabella
NOTE TABLE: NoteID, Note, DetailedTaskID, .....
DETAILED TASK TABLE: DetailedTaskID, WorkOrderID, .....
WORKORDER TABLE: WorkOrderID, ProjectID, .....
PROJECT TABLE: ProjectID, .....
Ora, con questo schema consente di dire che voglio recuperare tutte le note che sono associati ad un progetto specifico io alla fine con un certo numero di join.
IE: Note JOIN DetailedTask JOIN WorkOrder JOIN Project
Quindi la mia domanda è questa, quando (se mai) è opportuno aggiungere una colonna "scorciatoia" per una tabella (in questo caso ProjectID)?
Quindi, fondamentalmente cambiando la tabella di nota a questo: NoteID, nota, DetailedTaskID, ProjectID
Posso solo confermare? Quando dici "meno pericoloso" presumo tu intenda uno scenario in cui un bug può far sì che una chiave straniera punti a un progetto e l'altra a un altro, giusto? –
Proprio così. In questo caso una svista nel codice (o nel codice di qualcun altro, aggiunto in seguito) potrebbe aggiornare le chiavi esterne in una tabella e non nell'altra. Oppure, potrebbe aggiornare solo alcuni dei valori delle chiavi esterne de-normalizzati nelle righe nella seconda tabella, ma non in altre. Oppure potrebbe aggiornare troppe righe nella seconda tabella. E potresti non vedere subito questi errori, o in modo coerente, se a volte stai ottenendo i valori delle chiavi esterne dalla tabella normalizzata e talvolta dalla tabella denormalizzata. Può essere fatto, ma assicurati di avere una reale necessità di farlo prima. –
Grazie mille per il tuo contributo ... –