2009-10-23 2 views
16

У меня есть число перечислений в моем приложении , которые используются в качестве типа свойства в некоторых классах.Лучший способ для хранения значений 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; } 
    } 
} 

ответ

13

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

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

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

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

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

+2

Я не могу поверить, что вы даже подумали о том, чтобы рекомендовать подход, который может легко привести к повреждению данных! Просто из воображаемой заботы о компактности? Если проблема компактности в том, что она сильная, добавьте поле int в перечисление! НИКОГДА не полагайтесь на порядковый номер. Чтение эффективной Java. –

+13

Я действительно не вижу, где я рекомендую что-либо быть честным. Я только заявляю о преимуществах и недостатках. Хотя у вас есть смысл, не желая полагаться на порядковое значение, вы можете захотеть превратить этот «огонь» в ваш комментарий с надписями;) – pyrocumulus

+0

@KevinBourrillion Что означает «добавить поле int к перечислению»? – John

16

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

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

+5

+1 Я работал с миллионами записей. Только тогда я понял, что смысл гораздо важнее, чем «компактность». – Sarmaad

+0

Иногда производительность важнее, чтобы не потерять смысл. Так что заберите свой яд и определите, у которого больше ценности. – Suncat2000

Смежные вопросы