Подтвердить что ты не робот

Лучший способ сохранить значения enum в базе данных - String или Int

У меня есть число перечислений в моем приложении которые используются в качестве типа свойств в некоторых классах.

Каков наилучший способ сохранить эти значения в базе данных, например String или Int?

FYI, я также буду сопоставлять эти типы атрибутов с помощью свободного 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; }
    }
}
4b9b3361

Ответ 1

Оба имеют преимущества. Если вы сохраните их по их Целочисленному значению, то вы должны быть осторожны в редактировании вашего перечисления позже в своем проекте. Если каким-то образом переопределить целочисленные значения элементов перечисления, все ваши данные будут повреждены. Но это будет самый быстрый/наименьший тип данных.

Если вы используете строковое представление, у вас не будет проблемы с переопределенным значением до тех пор, пока вы не измените имя элементов в перечислении. Однако строки занимают больше места в вашей базе данных и, вероятно, являются более дорогостоящими в использовании.

В конце концов, окончательного победителя я не думаю.

Edit

Использование значения Integer может быть наилучшим способом. Вы можете преодолеть проблему "переопределенного значения" для элементов перечисления, установив значение для каждого элемента самостоятельно. Действительно хорошее предложение Кевина.

Ответ 2

В обоих случаях реализация проста, а различия в производительности должны быть незначительными.

Поэтому переходим к значению: Строки более значимы, чем числа, поэтому используйте String.