2009-03-23 9 views
14

Tengo un pedido que tiene un estado (que en el código es un Enum). La pregunta es cómo persistir esto. Podría:Enumeraciones persistentes en las tablas de la base de datos

  1. Persista la cadena en un campo y luego vuelva a hacer un mapa de la recuperación de datos.
  2. Persistir esto como un entero y luego volver al mapa a enum en la recuperación de datos.
  3. Crea una tabla separada para el valor enum y únete a la recuperación de datos.

¿Pensamientos?

+0

Una buena característica del n. ° 1 es que, si el DB no se sincroniza con la aplicación, al menos usted sabe qué valor quiere almacenar, y sería fácil arreglar el DB si el valor de cadena del enum fue cambiado en .NET. – mbeckish

Respuesta

8

Si esta es una lista fija (que parece que es, o si no debería almacenarla como una enumeración), no usaría el n. ° 1.

La razón principal para usar # 3 sobre # 2 es para facilitar el uso con las utilidades de consulta de autoservicio. Sin embargo, en realidad iría con una variante del n. ° 2: almacene el valor como un entero y asigne un enum a la recuperación de datos. Sin embargo, también cree una tabla que represente el tipo enum, con el valor como PK y el nombre como otra columna. De esta forma, es simple, rápido y eficiente de usar con su código, pero también es fácil obtener el valor lógico con consultas de autoservicio y otros usos que no usan su código de acceso a datos.

+1

+1, también configuré un FK para garantizar que el entero sea un valor de enum válido. – LukeH

+0

Sí, además, tenerlo como FK ayuda a descubrir herramientas de consulta de autoservicio. –

0

hibernate usa números enteros por defecto. si su enumeración no va a cambiar muy a menudo, creo que esta no es una mala idea.

0

Utilizaría un número entero asignado al valor en otra tabla con los valores. También podría asignar la enumeración al mismo valor, pero luego tendría que actualizar en ambos puntos.

0

Supongo que depende de dónde se recuperarán los datos. Con el n. ° 3, puede recuperar los datos sin depender de su interfaz .NET. Pero también es posible que su tabla de base de datos se desincronice con el código enum.

La opción n. ° 2 es sin duda la forma más eficiente de hacerlo para el almacenamiento ... pero el almacenamiento es económico.

3

# 3 es el más "adecuado" desde el punto de vista de base de datos/normalización. Su estado es, en efecto, una entidad de dominio que está vinculada a la entidad de orden.

Cuestiones relacionadas