2010-02-23 16 views
15

Dove lavoro utilizziamo un database postgres (8.3 presto per migrare a 8.4). Attualmente esiste un piccolo dibattito sull'uso delle enumerazioni nel database. Personalmente non mi piace il tipo db enum. Tra le altre cose mette la logica dell'applicazione nel database e crea una posibilità per una mancata corrispondenza tra codice e dati.Postgresql enum quali sono i vantaggi e gli svantaggi?

Mi stavo chiedendo quali sono esattamente i vantaggi delle postgre enum (oltre alla leggibilità) e quali sono i disadvati?

risposta

22

I vantaggi di enumerazioni sono:

  • prestazioni è meglio. Puoi semplicemente visualizzare ciò che ottieni dalla tabella principale invece di avere una tabella di ricerca separata che traduce un codice in un valore o la logica dell'app che traduce un codice in un valore. Questo può essere particolarmente utile nelle applicazioni datawarehouse.
  • Ad hoc SQL è più facile scrivere

Gli svantaggi sono:

  • valori di visualizzazione di codifica nel tuo DDL del database è di cattivo gusto. Se traduci il valore enum in un valore di visualizzazione diverso nel codice dell'app, hai perso molti vantaggi dell'utilizzo dell'enumerazione.
  • Aggiunta di valori richiede DDL cambia
  • Rende lingua di localizzazione difficile
  • portabilità del database è diminuita
+3

Se si stanno definendo valori che il controllo modificherà il comportamento dell'applicazione, quindi sicuramente "L'aggiunta di valori richiede modifiche DDL" è un vantaggio? Altrimenti si aumenta il rischio di operazioni di database apparentemente innocue che infrangono la tua applicazione. – thsutton

2

Enum uniscono i vantaggi degli inte con i vantaggi delle stringhe: sono piccoli e veloci come inti, leggibili come stringhe e hanno l'ulteriore vantaggio di essere sicuri (non si può sbagliare l'enumerazione).

Tuttavia, se non ti interessa la leggibilità, un int è buono come un enum.

0

Come vantaggio si è anche DB controllo, che non valore enum resto non poteva essere registrato in colonna. Il grosso svantaggio per me era che l'enum poteva essere modificato solo aggiungendo valore alla fine, ma poiché Postgres 9.1 è nel passato: https://stackoverflow.com/a/7834949/548473

-1

Il punto è, se le applicazioni sono autorizzate a fare DDL, sono più probabili causare blocco o conflitto. DDL è fatto meglio offline, in modalità utente singolo.

Problemi correlati