Nella maggior parte dei casi, preferisco utilizzare un codice alfanumerico breve e quindi disporre di una tabella di ricerca con il testo espanso. Quando necessario, costruisco dinamicamente la tabella delle enum nel programma dalla tabella del database.
Ad esempio, supponiamo di avere un campo che deve contenere, ad esempio, il tipo di transazione e che i valori possibili sono Sale, Resi, Servizio e Layaway. Creerei una tabella dei tipi di transazione con codice e descrizione, rendere i codici "SA", "RE", "SV" e "LY" e utilizzare il campo codice come chiave primaria. Quindi in ogni record di transazione pubblicherei quel codice. Ciò richiede meno spazio di una chiave intera nel record stesso e nell'indice. Il modo esatto in cui viene elaborato dipende dal motore del database, ma non dovrebbe essere notevolmente meno efficiente di una chiave intera. E perché è mnemonico è molto facile da usare. È possibile scaricare un record e vedere facilmente quali sono i valori e probabilmente ricordare quale è quale. È possibile visualizzare i codici senza traduzione nell'output dell'utente e gli utenti possono capirli. In effetti, questo può darti un guadagno in termini di prestazioni rispetto alle chiavi intere: in molti casi l'abbreviazione è buona per gli utenti - spesso vogliono le abbreviazioni per mantenere le visualizzazioni compatte ed evitare lo scorrimento - quindi non è necessario unirsi alla tabella delle transazioni per ottenere una traduzione
NON memorizzerei assolutamente un valore di testo lungo in ogni record. Come in questo esempio, non vorrei rinunciare alla tabella delle transazioni e memorizzare "Layaway". Non solo questo è inefficiente, ma è del tutto possibile che un giorno gli utenti diranno che vogliono essere cambiati in "Layaway sale", o anche qualche sottile differenza come "Lay-away". Quindi non devi solo aggiornare ogni record nel database, ma devi cercare attraverso il programma per ogni posto in cui questo testo si verifica e cambiarlo.Inoltre, più lungo è il testo, più è probabile che da qualche parte lungo la linea un programmatore lo scriverà male e crei bug oscuri.
Inoltre, disporre di una tabella dei tipi di transazione fornisce un luogo comodo in cui memorizzare ulteriori informazioni sul tipo di transazione. Mai e poi mai scrivere codice che dice "se whatevercode = 'A' o whatevercode = 'C' o whatevercode = 'X' allora ..." Qualunque cosa sia che rende quei tre codici in qualche modo diversi da tutti gli altri codici, metti un campo per nella tabella delle transazioni e testare quel campo. Se dici "Bene, questi sono tutti i codici fiscali" o qualsiasi altra cosa, allora va bene, crea un campo chiamato "tax_related" e impostalo su true o false per ogni valore di codice appropriato. Altrimenti, quando qualcuno crea un nuovo tipo di transazione, deve esaminare tutti gli if/o gli elenchi e capire a chi deve essere aggiunto questo tipo e quale non dovrebbe. Ho letto molti programmi sconcertanti in cui ho dovuto capire perché alcune logiche applicate a questi tre valori di codice ma non altre, e quando pensate che un quarto valore dovrebbe essere incluso nella lista, è molto difficile dire se sia manca perché è davvero diverso in qualche modo, o se il programmatore ha commesso un errore.
L'unico tipo che non creo la tabella di conversione è quando la lista è molto breve, non ci sono dati aggiuntivi da conservare, ed è chiaro dalla natura dell'universo che è improbabile che cambi mai così il i valori possono essere tranquillamente codificati. Come vero/falso o positivo/negativo/zero o maschio/femmina. (E hey, anche l'ultimo, ovvio come sembra, ci sono persone che insistono sul fatto che ora includiamo "transgender" e simili.)
Alcune persone insistono dogmaticamente sul fatto che ogni tabella abbia una chiave intera sequenziale generata automaticamente. Tali chiavi sono una scelta eccellente in molti casi, ma per gli elenchi di codici preferisco il tasto alfa breve per i motivi sopra indicati.
duplicato esatto: http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database – ChssPly76