【问题标题】:Best way to store enum values in database - String or Int在数据库中存储枚举值的最佳方式 - String 或 Int
【发布时间】:2010-12-09 09:33:55
【问题描述】:

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

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

【问题讨论】:

    标签: database nhibernate enums fluent


    【解决方案1】:

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

    如果使用字符串表示,只要不更改枚举中元素的名称,就不会出现重新定义值的问题。然而,字符串在您的数据库中占用更多空间,并且使用成本可能更高。

    最后,我猜没有绝对的赢家。

    编辑

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

    【讨论】:

    • 我不敢相信您甚至会考虑半推荐一种很容易导致数据损坏的方法!只是出于对紧凑性的想象?如果紧凑性问题如此强烈,请在枚举中添加一个 int 字段!永远不要依赖序数。阅读有效的 Java。
    • 老实说,我真的不知道我在哪里推荐任何东西。我只说优点和缺点。虽然您有一点,不想依赖序数值,但您可能希望将评论中的“火”降低一个档次;)
    • @KevinBourrillion “向枚举添加一个 int 字段”是什么意思?
    • @John 他的意思是为枚举的元素分配特定的值。有关示例,请参阅docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…。这样一来,您就万无一失了。
    【解决方案2】:

    这两种情况的实现都很简单,性能差异应该很小。

    因此,按含义来:字符串比数字更有意义,所以使用字符串。

    【讨论】:

    • +1 我处理过数百万条记录。直到那时我才意识到意义比“紧凑”更重要。
    • 有时性能更重要,以免失去意义。所以选择你的毒药并确定哪个更有价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多