2009-09-16 17 views

Respuesta

110

No es así. Hay un equivalente vaga:

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown')) 
+1

cómo hacerlo en SSMS? – EgoPingvina

+0

@EgoPingvina: Deberías preguntar esto en una pregunta, no en un comentario. – chaos

2
CREATE FUNCTION ActionState_Preassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 0 
END 

GO 

CREATE FUNCTION ActionState_Unassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 1 
END 

-- etc... 

Cuando los asuntos de rendimiento, siguen utilizando los valores duros.

68

La mejor solución que he encontrado en esto es crear una tabla de búsqueda con los valores posibles como clave principal y crear una clave externa para la tabla de búsqueda.

+7

Una mejor solución desde una perspectiva de mantenimiento que la restricción de verificación que se muestra arriba. – HLGEM

+14

Esta es una solución mejor que Enums, también en MySQL. –

+2

@ypercube ¿Por qué es mejor para MySQL también? – BenR

1

Encontré este interesante enfoque cuando quería implementar enumeraciones en SQL Server.

El enfoque que se menciona a continuación en el enlace es bastante convincente, teniendo en cuenta que todas las necesidades de la base de datos se pueden satisfacer con 2 tablas centrales.

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/

+6

Esta es una variación del anti-patrón conocido como "one true" (tabla de búsqueda". El enfoque adecuado es tener una tabla separada para cada tipo de enumeración y usar claves externas (si necesita buscar en absoluto, lo que puede no ser el caso para las enumeraciones "puras"). –

+2

Los comentarios en la página vinculada proporcionan una buena copia de seguridad para usar tablas individuales para cada "enumeración", en lugar de lo que esta respuesta especifica –

+4

Es bastante gracioso cómo la mayoría de las personas se opondrían a este diseño, pero el autor llama su artículo "Buenas prácticas" . –

Cuestiones relacionadas