2009-10-23 2 views
16

일부 클래스에서 속성 유형으로 사용되는 내 응용 프로그램에 많은 수의 열거 형이 있습니다.데이터베이스에 열거 형 값을 저장하는 가장 좋은 방법 - 문자열 또는 Int

이러한 값을 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; } 
    } 
} 

답변

13

두 가지 장점이 있습니다. Integer 값으로 저장하는 경우 나중에 프로젝트에서 열거 형을 조심스럽게 편집해야합니다. 어떻게 든 열거 요소의 정수 값이 다시 정의되면 모든 데이터가 손상됩니다. 하지만 사용할 가장 빠르거나 가장 작은 데이터 유형이 될 것입니다.

문자열 표현을 사용하는 경우 열거 형의 요소 이름을 변경하지 않는 한 재정의 값 문제가 발생하지 않습니다. 그러나 문자열은 데이터베이스에서 더 많은 공간을 차지하며 사용하기에 조금 비쌉니다.

마지막에는 추측 할 수있는 확실한 승자가 없습니다. 가장 좋은 방법이 될 수있는 정수 값을 사용하여

편집

. 각 요소의 값을 직접 설정하여 열거 요소의 '재정의 된 값'문제를 극복 할 수 있습니다. Kevin의 좋은 제안.

+2

쉽게 데이터 손상을 초래할 수있는 접근법을 권장하지 않을 수도 있습니다. 소형화에 대한 상상의 관심에서 벗어나고 싶습니까? compactness 관심사가 강한 경우 enum에 int 필드를 추가하십시오! 서문에 절대 의지하지 마십시오. 효과적인 자바 읽기. –

+13

나는 정말로 내가 솔직히 말하는 것을 추천하고있는 곳을 보지 못했다. 나는 장단점만을 언급하고있다. 서수 값에 의존하고 싶지는 않지만 논평에서 '불'을 노치로 바꾸고 싶을 수도 있습니다. – pyrocumulus

+0

@KevinBourrillion "열거 형에 int 필드를 추가하는 것"은 무엇을 의미합니까? – John

16

구현은 두 경우 모두 쉽고, 성능 차이는 사소한해야한다.

그러므로 문자열은 숫자보다 의미가 있으므로 문자열을 사용하십시오.

+5

+1 수백만 건의 레코드로 작업했습니다. 그래야만 의미가 "compactness"보다 훨씬 중요하다는 것을 깨달았습니다. – Sarmaad

+0

때로는 의미가 없어지지 않도록 성능이 더 중요 할 수 있습니다. 따라서 독약을 선택하고 더 많은 가치를 지니고 있는지 판단하십시오. – Suncat2000

관련 문제