2010-02-23 33 views
15

Donde trabajo usamos una base de datos postgres (8.3 pronto para migrar a 8.4). Actualmente existe un pequeño debate sobre el uso de enumeraciones en la base de datos. Personalmente, no me gusta el tipo db enum. Entre otras cosas, pone la lógica de la aplicación en la base de datos y crea una posibilidad de discrepancia entre el código y los datos.Postgresql enum ¿Cuáles son las ventajas y desventajas?

Me preguntaba cuáles son exactamente las ventajas de posgres enums (además de la legibilidad) y cuáles son los inconvenientes?

Respuesta

22

Las ventajas de las enumeraciones son:

  • El rendimiento es mejor. Puedes mostrar lo que obtienes de la tabla principal en lugar de tener una tabla de búsqueda separada que traduzca un código a un valor o tener una lógica de aplicación que traduzca un código a un valor. Esto puede ser especialmente útil en aplicaciones de datawarehouse.
  • ad hoc de SQL es más fácil escribir

Las desventajas son:

  • valores de indicación de codificación en su base de datos DDL es de mala educación. Si traduces el valor enum a un valor de visualización diferente en el código de tu aplicación, perderás muchas de las ventajas de usar enumeraciones.
  • Adición de valores requiere DDL cambia
  • Hace localización de idioma difícil
  • la portabilidad de base de datos se reduce
+3

Si está definiendo valores que el control modificará el comportamiento de su aplicación, entonces seguramente "Agregar valores requiere cambios de DDL" es una ventaja? De lo contrario, aumenta el riesgo de que las operaciones de bases de datos aparentemente inofensivas rompan su aplicación. – thsutton

2

Las enumeraciones combinan las ventajas de los ints con las ventajas de las cadenas: son pequeñas y rápidas como las notas, legibles como cadenas, y tienen la ventaja adicional de ser seguras (no se puede escribir mal una enumeración).

Sin embargo, si no le importa la legibilidad, un int es tan bueno como una enumeración.

0

Como ventaja también se ha de comprobar DB, que nada de valor de enumeración otra cosa no podía ser registrado en la columna. La gran desventaja para mí era que enum solo podía modificarse agregando valor al final, pero desde Postgres 9.1 está en el pasado: https://stackoverflow.com/a/7834949/548473

-1

Es decir, si las aplicaciones pueden hacer DDL, es más probable que para causar bloqueo o conflicto. DDL se realiza mejor sin conexión, es decir, en modo de usuario único.

Cuestiones relacionadas