Come strutturare uno stato di Trinary in DB e Application

2

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:

  1. 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).
  2. 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?
  3. Singola colonna booleana, ma consente valori nulli. È stato approvato un true , un false viene rifiutato. Un null 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.

    
posta ABMagil 09.06.2014 - 15:37
fonte

1 risposta

1

Una semplice colonna intera contenente un codice di stato si adatterebbe. 0 = non revisionato, 1 = visto, 2 = approvato, ecc. È facile da interrogare. Se si ordinano i codici in "ordine", è anche possibile richiamare facilmente tutte le righe al di sotto o al di sopra di un determinato stato.

Per scopi di visualizzazione, se necessario è possibile utilizzare una seconda tabella contenente la descrizione di ciascun codice.

    
risposta data 09.06.2014 - 17:58
fonte

Leggi altre domande sui tag