Come dovrei strutturare, soprattutto nel DB, ma anche nell'applicazione, uno stato di triade?
Per esempio, ho dei record di feedback degli utenti che devono essere esaminati prima di essere presentati al pubblico in generale. Ciò significa che un revisore del feedback deve visualizzare il feedback non verificato, quindi approvarlo o rifiutarlo. Posso pensare a un paio di modi per rappresentarlo:
- Due flag booleani: visti / non visti e approvati / rifiutati. Questa è la soluzione di database più semplice e probabilmente la più piccola (presumibilmente i campi booleani sono semplici bit). Il lato negativo è che ci sono davvero solo tre stati a cui tengo (non visto / approvato / rifiutato) e questo crea quattro stati, incluso uno di cui non mi interessa (un record che è visto ma non approvato o rifiutato è essenzialmente invisibile).
- Colonna stringa nel DB con costanti / enum nell'applicazione. Utilizzando Rating :: APPROVED_STATE all'interno dell'applicazione e lasciandolo uguale a quello che vuole nel DB. Questa è una colonna più grande nel db e sono preoccupato di fare confronti tra stringhe ogni volta che ho bisogno di questi record. Forse mitigabile con un indice?
- Singola colonna booleana, ma consente valori nulli. È stato approvato un
true
, unfalse
viene rifiutato. Unnull
non è visibile. Non sono sicuro i pro / contro di questa soluzione.
Quali sono le regole che dovrei usare per guidare la mia scelta? Sto già pensando in termini di dimensioni del DB e il costo di trovare i record in base allo stato, così come la leggibilità del codice finisce con l'uso di questa struttura.