在数据库中存储枚举值的最佳方法 - String或Int

时间:2009-10-23 09:25:57

标签: database nhibernate enums fluent

我的应用程序中有很多枚举 在某些类中用作属性类型。

将这些值存储在数据库中的最佳方法是什么,如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; }
    }
}

2 个答案:

答案 0 :(得分:20)

在这两种情况下,实施都很容易,性能差异应该很小。

因此,请注意:字符串比数字更有意义,所以请使用字符串。

答案 1 :(得分:15)

两者都有优势。如果按Integer值存储它们,则必须在项目中稍后编辑枚举。如果以某种方式重新定义了枚举元素的整数值,则所有数据都将被破坏。但它将是最快/最小的数据类型。

如果使用字符串表示形式,只要不更改枚举中元素的名称,就不会出现重新定义的值问题。但是,字符串在数据库中占用更多空间,使用起来可能要贵一些。

最后,我猜没有明确的赢家。

修改

使用Integer值可能是最好的方法。您可以通过自己设置每个元素的值来克服枚举元素的“重新定义的值”问题。确实是凯文的一个很好的建议。