Penso che tu stia confondendo alcune cose diverse qui.
1: normalizzazione del database.
La risposta alla domanda a cui si fa riferimento consiste nel normalizzare i dati ripetuti in una seconda tabella con un FK. La chiave necessaria è una int e verrà ripetuta, quindi se i tuoi dati sono SOLO, la chiave è già normalizzata.
2: interi come chiavi (a causa dello spazio?)
Suggerisci che l'utilizzo di un int è migliore come chiave, ma è contessivo. I GUID sono un'altra opzione e le stringhe possono essere utilizzate.
3: valori enum persistenti
Quindi un enum verrà valutato come int, ma se si memorizza solo int - > rapporto di nome nel tuo codice e non nel db hai potenziali problemi se cambi mai l'enum.
Se replichi l'enum in una tabella di ricerca, raddoppi il problema e avrai bisogno di sincronizzare il codice con db.
Solitamente è meglio mantenere un enum come stringa, poiché questo ha il significato e un enum non è una "stringa di visualizzazione" che cambierà, sarà tradotta ecc.
Quindi prendendoli insieme, dove hai un poco oggetto con un campo enum. Raccomando di memorizzare il campo come una stringa in una tabella db con colonne che corrispondono alle proprietà degli oggetti. Vale a dire
persona
Id - > alcuni guid
Nome - > fred
Sesso (ENUM) - > maschio
Dove la proprietà è una classe con più di una proprietà, dovresti usare un FK su un'altra tabella. Vale a dire.
indirizzo (classe) - > (addressId col) some guid
Se tratti l'enum come una classe e la sposti in una tabella di ricerca, puoi ottenere risparmi di spazio se hai molte righe e pochi valori enum.
Sesso (enum) maschile - > (sexId [breve]) 0
sesso
id [breve]
Nome [varchar (50)]
Ma l'id e la relazione FK dovrebbero essere puramente al livello del DB. Dovresti ancora restituire il Nome dalle query e deserializzare quella stringa di nuovo al tuo enum piuttosto che mappare l'Id breve al tuo enum int.
Tuttavia, si tratta di un'ottimizzazione piuttosto che di una normalizzazione e si risparmia solo spazio, il che, come dice la domanda di riferimento, è economico. Personalmente tendo a lasciare questo tipo di cose agli amministratori di database
Consideriamo ad esempio che è necessario un insert sproc, che prende la stringa enum, controlla la tabella di ricerca per trovare l'id breve, aggiunge l'enum alla tabella di ricerca, se necessario, e quindi usa l'id breve per l'insert. Quindi c'è un lato negativo nell'ottimizzazione e un rialzo