Enum en Base de Datos

Hace unos días leí un artículo de Ben Boyter en el que explicaba cómo suele almacenar los enums que necesita utilizar un aplicación en Base de Datos.

La solución me parece muy buena, así que la dejo aquí para que no se me olvide…

Partimos del hecho de que implementar una tabla por cada tipo de enum que queremos almacenar conlleva habitualmente un mantenimiento complicado y tedioso. Lo normal es tener varias tablas, con unas cuantas filas cada una, sin “foreign keys”.

La solución que propone Ben incluye dos tablas, una llamada Lookup y la otra Value, independientemente de los enums que se necesite utilizar. Así el mantenimiento es más sencillo.

Los campos de la tabla Lookup serían:

+------+
|id
|lookup
|name
+------+

Esto es la representación del nombre de un tipo enum. El campo “id” es de tipo “autoincrement” y la clave principal (“primary key”) es “lookup”. Una entrada en esta tabla, entonces, equivale a un tipo de enum, no a sus valores.

Los valores se añaden en la tabla Value, cuyos campos serían:

+---------+
|id
|lookupid
|name
|sortorder
|deleted
+---------+

De esta manera se pueden obtener los valores de un tipo enum con un “join” bastante sencillo:

SELECT * FROM Value v INNER JOIN Lookup l ON l.id = v.lookupid WHERE l.name = '?';

Si además añadimos un índice sobre los campos id y lookupid, el acceso es muy rápido. Tienes todos tus enums en una única tabla, resulta sencillo añadirles información adicional, y evitas el problema de mantenimiento de N tablas, una por cada enum.

Vía | http://searchco.de

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>