2008-12-16 5 views
3

Lorsque nous sérialisons une énumération de C# vers SQL Server, nous utilisons un type de données NCHAR (3) avec des valeurs mnémoniques pour chaque valeur de l'énumération. De cette façon, nous pouvons facilement lire un SELECT qry.Quel type de données utilisez-vous pour les énumérations dans SQL Server

Comment enregistrer-vous à votre base de données ENUM?

Quel type de données utilisez-vous?

Répondre

3

J'utilise une table de données de référence distincte avec l'ID & Description pour chaque énumération. Vous pouvez les regrouper tous dans une table avec ID, Type & Description, mais j'ai constaté que vous vouliez souvent étendre ces tables au fil du temps et si vous regroupez toutes les données de référence dans une table, cela peut rendre la vie plus difficile à long terme. courir.

3

J'ai toujours utilisé des tables de recherche dans MSSQL où j'aurais sinon utilisé des énumérations dans des bases de données qui les supportent. Si vous utilisez un type de type char, vous devez utiliser une contrainte de vérification pour vous assurer que les valeurs insérées ou mises à jour sont membres de l'énumération.

Lorsque les membres de l'énumération changent, j'ai toujours pensé qu'il était plus facile d'ajouter des entrées à une table de recherche que de modifier une contrainte de vérification.

0

nchar (3) pour les mnémoniques? Comme le soulignait Martin, utilisez une table de recherche avec INT comme PK, l'identificateur VARCHAR comme UK et la description NVARCHAR.

Vous pouvez écrire une procédure stockée pour écrire les valeurs de table sous la forme C# enum ou C# public consts.

Ainsi, les valeurs sont documentées à la fois dans la base de données et dans le code source C#.

6

Un meilleur moyen serait de stocker comme un int. De cette façon, vous pouvez désérialiser/lancer à partir de la base de données jusqu'à la valeur d'énumération correcte.

Si l'ENUM est susceptible d'être modifié à l'avenir utiliser alors des valeurs explicites par exemple

public enum ActionType 
{ 
    Insert = 1, 
    Update = 2, 
    Delete = 3 
} 

Les modalités pratiques de stockage en tant que mnémonique doit faire en sorte que vous avez des affrontements en fonction de votre algorithme de génération de mnémoniques?

+4

occasion de le faire comme ça. Les requêtes deviennent difficiles à comprendre car la base de données se complique. Les jeux de résultats sont difficiles à interpréter sans beaucoup de jointures internes. Exactement la même raison pour utiliser enums et non entiers dans C# – pkario

+0

Voulez-vous dire que chaque valeur enum lui-même est un mnémonique? par exemple. ActionType.Ins, ActionType.Upd etc? – Kev

1

Je les garde comme entiers. son vrai mignon les coulant les uns aux autres (int) enum et (enum) int :) aussi mon autre favori est dropdownlist.datasource = Enum.GetNames (typeof (EnumType));

Est-ce trop primitif, cuz vous parlez beaucoup de choses compliquées

0

Il ne fonctionne pas.Il y a un équivalent vague:

Genre VARCHAR (10) NOT NULL (Genre CHÈQUE IN ('Homme', '', 'Femme' autres))