Лучший способ хранить значения перечисления в базе данных - String или Int - PullRequest
19 голосов
/ 23 октября 2009

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

Каков наилучший способ хранения этих значений в базе данных, как 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 ]

20 голосов
/ 23 октября 2009

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

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

15 голосов
/ 23 октября 2009

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

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

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

Редактировать

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...