2009-09-16 7 views

Répondre

110

Ce n'est pas le cas. Il y a un équivalent vague:

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

comment le faire dans SSMS? – EgoPingvina

+0

@EgoPingvina: Vous devriez poser cette question dans une question, pas un commentaire. – 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... 

Lorsque les questions de performance, utilisent encore les valeurs dures.

68

La meilleure solution que j'ai trouvée dans ceci est de créer une table de recherche avec les valeurs possibles en tant que clé primaire, et de créer une clé étrangère à la table de recherche.

+7

Meilleure solution du point de vue de la maintenabilité que la contrainte de vérification présentée ci-dessus. – HLGEM

+14

C'est une meilleure solution que Enums - aussi bien dans MySQL. –

+2

@ypercube Pourquoi vaut-il mieux aussi pour MySQL? – BenR

1

J'ai trouvé cette approche intéressante lorsque je voulais implémenter des énumérations dans SQL Server.

L'approche mentionnée ci-dessous dans le lien est assez convaincante, considérant tous vos besoins enum de base de données pourraient être satisfaits avec 2 tables centrales.

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

+6

Ceci est une variation de l'anti-pattern connu sous le nom "one true (table de recherche) ". L'approche correcte est d'avoir une table séparée pour chaque type d'énumération et d'utiliser des clés étrangères (si vous avez besoin d'une recherche, ce qui peut ne pas être le cas pour les énumérations "pures"). –

+2

Les commentaires sur la page liée fournissent une bonne sauvegarde pour l'utilisation des tables individuelles pour chaque "enum", plutôt que ce que cette réponse spécifie –

+4

Il est assez amusant de voir comment la plupart des gens rechignent à ce design, mais l'auteur nomme son article "Best Practice" . –

Questions connexes