Le tabelle di ricerca sono molto utili e una buona pratica, poiché il database rimane la fonte dei dati e non lo si diffonde tra database e applicazione.
Il database dovrebbe essere la fonte di dati canonica. Il salvataggio dei valori di enumerazione nelle tabelle di ricerca fornisce l'integrità referenziale a causa delle relazioni di chiavi esterne tra le tabelle di ricerca e le altre tabelle che utilizzano queste enumerazioni. Il database diventa l'unica fonte di verità su quali elementi si trovano in queste enumerazioni.
I linguaggi di programmazione come C # consentono di salvare una stringa in una colonna nel database e quindi mapparla facilmente a enum
, ma il codice C # diventa l'unica fonte di verità per quei dati, ma non il resto . Il codice di programmazione dovrebbe essere l'unica fonte di verità per il comportamento: gli algoritmi. Il database dovrebbe essere sui dati. L'utilizzo delle tabelle di ricerca consente di completare questa separazione.
Immagina un caso in cui hai due stati per gli ordini:
- In attesa
- Fullfilled
Quindi crei un enum in un linguaggio di programmazione per rappresentarlo:
public enum OrderStatus
{
Pending = 0,
Fullfilled = 1
}
Quindi aggiungi un altro stato: Cancelled = 2
ma non hai ancora salvato un ordine "annullato" nel database. Durante la navigazione intorno alle tabelle del database, vengono visualizzati solo gli stati "In sospeso" e "Completato" per gli ordini. Senza il codice di programmazione disponibile non puoi dire quali sono tutti i valori possibili.
In relazione a questo, ti consiglio di utilizzare una colonna "codice" per la chiave primaria - una stringa, in sostanza. Qualcosa di corto. Quando si guardano le tabelle nel database, non è necessario tenere traccia dei numeri e delle loro rappresentazioni corrispondenti. Non è necessario ricordare che un ID stato di 1 è In attesa e 2 è Pieno, e 3 è Annullato. Se la tua tabella di stato ha questi tre stati, e le loro chiavi primarie sono letteralmente "In sospeso", "Completato" e "Annullato", allora le altre tabelle che utilizzano quegli stati avranno chiavi estranee che hanno senso per un umano, senza la necessità per ricordare il numero della traduzione del nome dello stato.