Saltar al contenido

JPA Enum ORDINAL vs CADENA

Saúl, parte de este gran equipo de trabajo, nos hizo el favor de redactar esta sección porque domina perfectamente el tema.

Solución:

Yo siempre voy STRING.

La velocidad rara vez es el tema más importante: la legibilidad y la mantenibilidad son más importante.

yo suelo STRING porque es mucho más fácil inspeccionar manualmente las filas de la base de datos, pero lo que es más importante, puedo hacer dos cosas, sin tocar la base de datos, la ORDINAL no puede manejar:

  1. puedo cambiar el pedido de mis enumeraciones
  2. yo puedo insertar nuevas enumeraciones en el medio de la lista de enumeraciones

Ambos cambios alterarán los valores ordinales de las enumeraciones que ya están en uso en la base de datos, rompiendo así los datos existentes si está utilizando ORDINAL.

Si cambia un valor de enumeración (no tan común), manejarlo es simple:

UPDATE table SET enum_column = 'NEW_ENUM_NAME' where enum_column = 'OLD_ENUM_NAME';

es probable que ORDINAL es más eficiente, pero eso es menor. Hay algunas desventajas de ORDINAL:

  • es menos legible en la base de datos
  • si reordena sus definiciones de enumeración, la base de datos no será consistente.

Con STRING no puede cambiar el nombre de sus enumeraciones.

Elija uno de ellos y utilícelo en toda la aplicación: sea coherente.

Si su base de datos va a ser utilizada por otros clientes/idiomas, use STRINGes más legible.

prefiero el uso de Ordinal pero esto realmente depende del uso.

Por ejemplo:

Tiene una enumeración para guardar todos sus estados de usuario, en este caso el orden no importa, y puede agregar más estados en el futuro (el mejor uso es @Enumerated(EnumType.ORDINAL)):

public enum UserStates  ACTIVE, DELETED, PENDING 

Pero ahora, tienes una enumeración, para guardar las Plantes en el Sistema Solar (Mejor uso @Enumerated(EnumType.STRING)):

public enum Planets MERCURY,VENUS,EARTH,MARS,JUPITER,SATURN,URANUS,NEPTUNE,PLUTO,NINE

Ahora piensa que quieres reordenar tus planetas, con @Enumerated(EnumType.ORDINAL) no puede, porque su base de datos no puede conocer el nuevo orden en su archivo Java.

Puedes reordenar tus Plantes usando @Enumerated(EnumType.STRING) porque su planeta está vinculado al nombre de la enumeración, no al orden de la enumeración.

De todos modos, puedes modificar tu @Enumerated(EnumType.STRING)enumeraciones porque están vinculadas al pedido, pero no puede cambiar su @Enumerated(EnumType.STRING)enumeraciones porque se usarán como enumeraciones nuevas.

Los tipos de cadena son más legibles en la base de datos, pero ocuparán más tamaño que los datos ordinales. Tal vez sean útiles si la base de datos es utilizada por más clientes, pero es mejor tener una buena documentación del software que guardar 1000 veces “EARTH” que “4”

USERSTATE
------------
ID | STATE |
------------
1 | 1
2 | 2
3 | 1

Planets
------------
ID | Name |
------------
1 | EARTH
2 | EARTH
3 | MARS
4 | EARTH

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *