2009-09-24 12 views
8

Per me, la saggezza classica è di memorizzare i valori enum (OrderStatus, UserTypes, ecc.) Come tabelle di ricerca nel db. Ciò mi consente di rafforzare l'integrità dei dati nel database, evitando valori falsi o nulli, ecc.Enum nel DB o NO Enums nel DB

Tuttavia, sempre di più, mi sembra una duplicazione inutile. Non solo devo creare tabelle per questi valori (o avere una pesante tabella di ricerca centrale), ma se voglio aggiungere un valore, devo ricordarmi di aggiungerlo a 2 (o più, contando produzione, testing, live db's) e le cose possono essere facilmente sfasate.

Ancora non riesco a liberare le tabelle di ricerca.

So che ci sono probabilmente alcuni scenari in cui uno ha un vantaggio rispetto all'altro, ma quali sono i tuoi pensieri generali?

risposta

4

Ho fatto entrambe le cose, ma ora preferisco di gran lunga definirle come in classi nel codice.

I nuovi file non costano nulla, e i vantaggi che si cercano di averli nel database devono essere gestiti come regole aziendali.

Inoltre, ho una certa avversione a conservare i dati in un database che in realtà non cambia. E sembra che una enumerazione si adatti a questa descrizione. Non ha senso per me avere una tabella di ricerca degli Stati, ma una classe di enum degli Stati ha senso per me.

+0

Come si fa ad assicurarsi che nessuna riga abbia un valore non valido per l'enumerazione? Basta usare il codice che accede al DB? –

1

Li ho inseriti nel database, ma non riesco davvero a difendere perché lo faccio. Semplicemente "sembra giusto". Immagino di giustificarlo dicendo che c'è sempre una versione "giusta" di ciò che l'enumerazione può essere controllando il database.

2

Se deve essere mantenuto, li lascerei in una tabella di ricerca nel DB. Anche se penso che non dovranno essere mantenuti, andrei comunque verso una tabella di ricerca in modo che se sbaglio non è un grosso problema.

EDIT:

Ci tengo a precisare che se l'Enum non è parte del modello DB poi lascio nel codice.

+0

Cosa non dovrebbe essere considerato parte del modello DB? –

+0

Tutto ciò che non viene memorizzato nel database come parte di una registrazione in una tabella. – klabranche

1

dipendenze dello schema devono essere conservati nel database stesso per garantire eventuali modifiche alla propria architettura può essere facilmente eseguire in modo trasparente per l'applicazione ..

1

preferisco enumerazioni in quanto impone l'associazione anticipata dei valori in codice, in modo che le eccezioni non sono causati dai valori mancanti

È anche utile se è possibile utilizzare la generazione del codice che può portare le associazioni delle colonne intere a un tipo di enumerazione, in modo che nella logica aziendale si debbano trattare solo con valori di enumerazione facilmente memorizzabili .

1

Consideralo una forma di documentazione.

Se hai già documentato le costanti di enum nel codice che utilizza il dB, hai davvero bisogno di un doppio set di documentazione (da usare e mantenere)?

+2

Ripensandoci ancora, immagino si riduca a pensarci come un'applicazione basata su database o un'applicazione che utilizza un database per memorizzare il suo stato.Ciò che intendo è pensare il database come entità indipendente, che può essere utilizzata da altre app o servizi, nel qual caso l'integrità dei dati è fondamentale. Contro avere il db come semplice archivio dati per l'app, facendo affidamento sull'app per far rispettare le regole di integrità dei dati. In quel caso le relazioni probabilmente non sono nemmeno necessarie. –

Problemi correlati