Лучший способ сохранить значения 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; }
}
}
Ответы
Ответ 1
Оба имеют преимущества. Если вы сохраните их по их Целочисленному значению, то вы должны быть осторожны в редактировании вашего перечисления позже в своем проекте. Если каким-то образом переопределить целочисленные значения элементов перечисления, все ваши данные будут повреждены. Но это будет самый быстрый/наименьший тип данных.
Если вы используете строковое представление, у вас не будет проблемы с переопределенным значением до тех пор, пока вы не измените имя элементов в перечислении. Однако строки занимают больше места в вашей базе данных и, вероятно, являются более дорогостоящими в использовании.
В конце концов, окончательного победителя я не думаю.
Edit
Использование значения Integer может быть наилучшим способом. Вы можете преодолеть проблему "переопределенного значения" для элементов перечисления, установив значение для каждого элемента самостоятельно. Действительно хорошее предложение Кевина.
Ответ 2
В обоих случаях реализация проста, а различия в производительности должны быть незначительными.
Поэтому переходим к значению: Строки более значимы, чем числа, поэтому используйте String.