2009-09-24 21 views
8

Para mí, la sabiduría clásica es almacenar valores enum (OrderStatus, UserTypes, etc.) como tablas de búsqueda en su db. Esto me permite forzar la integridad de los datos en la base de datos, evitando valores falsos o nulos, etc.Enumeraciones en DB o NO Enums en DB

Sin embargo, cada vez más, esto me parece una duplicación innecesaria. No solo tengo que crear tablas para estos valores (o tener una tabla de búsqueda central difícil de manejar), pero si quiero agregar un valor, tengo que recordar agregarlo a 2 (o más, contando producción, prueba, db en vivo) y las cosas pueden desajustarse fácilmente.

Todavía tengo dificultades para abandonar las tablas de búsqueda.

Sé que hay probablemente ciertos escenarios donde uno tiene una ventaja sobre el otro, pero ¿cuáles son sus pensamientos generales?

Respuesta

4

He hecho ambas cosas, pero ahora prefiero definirlas como en las clases de código.

Los nuevos archivos no cuestan nada, y los beneficios que busca al tenerlos en la base de datos deben manejarse como reglas comerciales.

Además, tengo una aversión a mantener los datos en una base de datos que realmente no cambia. Y parece que una enumeración se ajusta a esta descripción. No tiene sentido que tenga una tabla de búsqueda de Estados, pero una clase enum de Estados tiene sentido para mí.

+0

¿Cómo se ocupa de asegurarse de que ninguna fila tenga un valor no válido para su enumeración? ¿Solo usando el código que accede al DB? –

1

Los puse en la base de datos, pero realmente no puedo defender por qué hago eso. Simplemente "parece correcto". Supongo que lo justifico diciendo que siempre hay una versión "correcta" de lo que pueden ser las enumeraciones al verificar la base de datos.

2

Si tiene que mantenerse, los dejaría en una tabla de búsqueda en la base de datos. Incluso si creo que no será necesario mantenerlos, iría hacia una tabla de búsqueda para que, si me equivoco, no sea un gran problema.

EDIT:

quiero aclarar que si la enumeración no es parte del modelo de base de datos y luego lo dejo en código.

+0

¿Qué no se consideraría como parte del modelo DB? –

+0

Cualquier cosa que no se almacena en la base de datos como parte de una entrada de registro en una tabla. – klabranche

1

dependencias de esquema se deben almacenar en la propia base de datos para asegurarse de cualquier cambio en su arquitectura se puede realizar fácilmente de forma transparente para la aplicación ..

1

prefiero enumeraciones ya que hace cumplir el enlace anticipado de los valores de código, por lo que las excepciones no son causados ​​por valores perdidos

También es útil si puede usar la generación de código que puede traer las asociaciones de las columnas enteras a un tipo de enumeración, de modo que en lógica comercial solo tiene que lidiar con valores de enumeración fáciles de recordar .

1

Considérelo como una forma de documentación.

Si ya ha documentado las constantes enum correctamente en el código que usa los dB, ¿realmente necesita un conjunto duplicado de documentación (para usar y mantener)?

+2

Al pensarlo un poco más, creo que todo se reduce a pensar en ello como una aplicación basada en bases de datos o una aplicación que usa una base de datos para almacenar su estado.Lo que quiero decir es pensar en la base de datos como una entidad independiente, que puede ser utilizada por otras aplicaciones o servicios, en cuyo caso la integridad de los datos es fundamental. Frente a tener el DB como un simple almacén de datos para la aplicación, confiando en la aplicación para hacer cumplir las reglas de integridad de datos. En ese caso, las relaciones probablemente ni siquiera sean necesarias. –