logo database-design types

database-design - logo - hbase



Enum de la base de datos: pros y contras (3)

Por ejemplo, tengo una tabla de "usuarios" que tiene una columna "tipo" enum con dos valores posibles: "individual" y "organización". Son mutuamente excluyentes y obligatorios (cada fila debe tener exactamente un valor de los dos posibles. ¿Sería este un buen caso para usar enumeraciones? ¿Por qué entonces / no?

¿Cuáles son algunos pros y contras sobre el uso de tipos ENUM (set) para campos de base de datos?


Personalmente, siempre he preferido tener columnas int estándar para esto, con una clave externa que se vincula a una tabla de descripción. Esto le permite limitar los valores para la columna de identificación de tipo.

Por supuesto, esto puede conducir a la saturación de la tabla, pero le permite tener una tabla "localizada" para ir con la tabla de descripción, para que sus aplicaciones puedan mostrar contenido localizado en los menús desplegables / informes, etc., cuando sea necesario.

User.UserTypeID -> UserType.UserTypeID -> UserTypeLocalised.UserTypeID where locality = ??

Esto también es más agnóstico de las bases de datos y, por lo tanto, más fácil de transportar a diferentes plataformas.

Además, no suena bien para un usuario ser un individuo o una organización. Esperaría que un usuario sea parte de una organización, lo que requeriría una tabla de organización y el usuario tendría una columna de ID de organización. Típicamente, el tipo de usuario sería una diferenciación de "Ser humano / sistema" (suponiendo que sus sistemas utilicen inicios de sesión a temperatura ambiente para realizar operaciones y quieran tener auditorías).


Poner los datos de referencia en una tabla con una clave externa significa que la base de datos puede hacer cumplir una regla de integridad de datos. También puede agregar un tipo diferente (por ejemplo, ''Interno'' o ''Sin fines de lucro'') sin tener que extender el esquema de la base de datos. Finalmente, puede anotar la tabla de referencia con indicadores u otra codificación para permitirle implementar lógica de negocios basada en datos si así lo desea.


Sí, parece un buen candidato para una enumeración.

Pros:

  • Pequeño (espacio en disco)
  • Rápido (comparación entera)
  • Fácil de entender (principalmente)

Contras:

  • No se puede agregar un valor sin cambiar la estructura de la tabla
  • Tenga cuidado con la sensibilidad de mayúsculas y minúsculas en los lugares
  • Puede ser muy confuso si se usa mal ... ¡no use active = enum (''1'', ''0'') ya que tengo que aguantarme!
  • No es compatible con todas las bases de datos