2009-10-23 31 views
16

私はいくつかのクラスでプロパティの型として使用される私のアプリケーション 私のアプリケーションでいくつかの列挙型を持っています。データベースに列挙型の値を格納する最も良い方法 - 文字列またはInt

これらの値をStringまたはIntとしてデータベースに保存するには、どのような方法が最適ですか?

参考までに、これらの属性タイプを流暢なNhibernateでマッピングします。

サンプルコード:

public enum ReportOutputFormat 
{ 
    DOCX, 
    PDF, 
    HTML 
} 

public enum ReportOutputMethod 
{ 
    Save, 
    Email, 
    SaveAndEmail 
} 

public class ReportRequest 
{ 
    public Int32 TemplateId 
    { 
     get { return templateId; } 
     set { templateId = value; } 
    } 
    public ReportOutputFormat OutputFormat 
    { 
     get { return outputFormat; } 
     set { outputFormat = value; } 
    } 

    public ReportOutputMethod OutputMethod 
    { 
     get { return outputMethod; } 
     set { outputMethod = value; } 
    } 
} 

答えて

13

どちらも利点があります。 Integer値で保存する場合は、後でプロジェクトで列挙を編集するように注意する必要があります。何らかの理由で列挙要素の整数値が再定義されると、すべてのデータが破損します。しかし、これは、使用するための最速/最小のデータ型になります。

文字列表現を使用すると、列挙内の要素の名前を変更しない限り、再定義された値の問題は発生しません。しかし、文字列はデータベース内でより多くの領域を占有し、多少コストがかかります。

最後に、私が推測する決定的な勝者はありません。最善の方法かもしれない整数値を使用して

編集

。各要素の値を自分で設定することで、列挙要素の「再定義された値」の問題を克服することができます。確かにケビンからの良い提案。

+2

データの破損につながる可能性のあるアプローチを半分推奨するとは思えません。コンパクトさのための想像上の懸念からちょうど外れていますか?コンパクトさの懸念が強ければ、列挙型にintフィールドを追加してください!序文を決して頼りにしないでください。有効なJavaを読んでください。 –

+13

私は正直何かを推薦しています。私は長所と短所だけを述べています。あなたは、序数の値に頼ることを望まない点がありますが、あなたのコメントの「火」をノッチの下にしたいかもしれません;) – pyrocumulus

+0

@KevinBourrillion「enumにintフィールドを追加する」とはどういう意味ですか? – John

16

実装では、どちらの場合も簡単で、パフォーマンスの違いは軽微でなければなりません。

したがって、意味は次のとおりです。文字列は数字より意味がありますので、文字列を使用してください。

+5

+1私は何百万というレコードで作業しています。それだけで、意味は「コンパクトさ」よりもはるかに重要であることを認識しました。 – Sarmaad

+0

意味が失われないように、パフォーマンスが重要な場合があります。だからあなたの毒を選んで、より価値のあるものを決定してください。 – Suncat2000

関連する問題