Suggerirei tabelle di database, una per lista.
Le enumerazioni esistono per elencare i valori consentiti per uno o più attributi. Probabilmente vorrai applicare queste restrizioni anche all'interno del database. Per questo hai bisogno di chiavi esterne e per quelle hai bisogno di avere le enumerazioni nelle tabelle. È meglio avere una tabella per enumerazione in modo che le chiavi esterne siano semplici da definire e ovvie nel loro intento.
Avere tabelle e chiavi esterne non significa necessariamente un join in ogni lettura. Se le enumerazioni sono stabili nel tempo e hanno codici brevi e significativi, questi codici possono essere propagati alle tabelle di riferimento. Diciamo che abbiamo un'enumerazione di direzioni cardinali: Nord, Sud, Est e Ovest. Questi sono stabili nel tempo. Hanno codici brevi e significativi: N, S, E & W. Chi vede un codice capirà il significato dato al contesto. Quindi avere il codice della chiave esterna fa riferimento al codice della singola lettera farà il lavoro e può omettere un join. Al contrario, il design abituale avrà una chiave surrogata nella tabella di enumerazione. Poiché questo è in genere un numero privo di significato, i join saranno comunque necessari per restituire valori comprensibili all'uomo.
Una volta che hai le enumerazioni nelle tabelle, ha senso ripeterle nell'applicazione? Ripeterli come codice aggiuntivo sarebbe un errore. Ci sarebbero due liste - una nell'app, una nel database - che devono essere mantenute sincronizzate. Tale duplicazione è una fonte comune di errore. Per avere i valori memorizzati nella cache dell'applicazione, al contrario della lettura della tabella ogni volta che sono richiesti i valori dell'enumerazione, può essere utile. Dipende dall'app, con quale frequenza vengono citati questi elenchi, quanta memoria è disponibile ecc. Ecc. Poiché stai considerando di codificare i valori, riavviare l'app per raccogliere nuovi valori dal database non dovrebbe essere un problema, anche se sono possibili altre soluzioni.
L'utilizzo delle enumerazioni di database potrebbe funzionare se si è certi che l'elenco sia a valore singolo e non si ridurrà mai. Rimuovere un valore di enumerazione è complicato. L'aggiunta di nuovi valori richiede privilegi elevati. Proprietà aggiuntive (ad esempio (direzione, codice, rilevamento) = (Sud, S, 180)) non sono possibili.