2010-01-21 14 views
6

¿Hay alguna manera de asignar uno de los contenidos de las columnas de una tabla MySQL a una enumeración en otra tabla en MySQL? Pensé que esto sería pan comido, pero no parece haber ninguna información que pueda encontrar sobre el tema.¿Usa una tabla para proporcionar valores enum en MySQL?

Cualquier consejo o ayuda en esta materia sería fresco y si no es posible, ¿alguien sabe de una razón interna por la cual no sería posible?

Saludos a todos :)

Gary

Respuesta

8

enum tipo es útil como una sola vez, pero no se adapta bien a varias tablas y tampoco es SQL estándar. mejor que se puede hacer aquí es el uso de tablas y relaciones normales:

  1. Definir una nueva tabla para guardar la lista de valores posibles; llamémoslo Master1
  2. En las otras dos tablas (llamémoslas Table1 y Table2), no haga que el campo sea enum; simplemente conviértalo en un campo normal con una relación de clave externa a Master1.

La relación de clave foránea hará el trabajo de restringir a una lista de valores posibles; y debido a que las claves y relaciones externas son SQL estándar, este enfoque tendrá otros beneficios, por ejemplo, las herramientas de informes pueden reconocer la clave externa y comprender cómo usar los datos relacionados.

+0

caso de la tabla de enumeración 'master 'tener una clave principal por separado, además del valor de la enumeración, o simplemente el valor de la enumeración? Creo que habría muy poco beneficio de definir una clave primaria separada. –

+0

Sí, creo que el valor de la enumeración en sí mismo sería la clave primaria ideal. Sabes que va a ser único y hace que los valores de clave foránea sean más reconocibles en las otras tablas. –

0

Si no lo hace, no lo haga

Sin duda, lo que desea es una tabla de claves posibles y luego una extranjera mapeo clave a eso.

Si quieres una mesa con posibles valores de enumeración y restricciones, vaya para las agrupaciones a través de otra tabla o un identificador de grupo en la misma tabla (si los miembros del grupo son únicos).

Huele mesa hedor aunque JOIN sabia. Tal vez sea mejor hacerlo en un procedimiento almacenado o en el código de la aplicación y asignarlo a un valor nativo?