2010-11-18 4 views
3

열거 형을 저장하는 가장 좋은 방법은 무엇입니까? 예를 들어, 섹스 속성을 가진 엔티티 Person이 있습니다. 생각할 수있는 첫 번째 옵션은 열거 형 값과 이름 (1은 Male, 2는 Female)을 저장하고 Person 테이블에서 int 값을 저장하는 테이블입니다. 두 번째 옵션은 해당 int 값을 사용하여 코드에 열거 형을 지정하고 Person 테이블에 int 값을 저장하는 것입니다. 마지막 옵션은 코드에 다시 열거를 지정하고 문자열 값을 저장하는 것입니다. 예를 들어 성별이 '남성'인 사람.데이터베이스에 저장된 열거 형은 언제 사용해야하며 코드에서 열거 형을 사용해야합니까?

언제 어떤 접근 방식이 더 좋습니까?

답변

5

코드에서 열거 형은 멋지며 편리하지만 열거 형을 변경할 때 데이터베이스 무결성을 깨뜨릴 수 있습니다.

따라서 일반적으로 관계형 무결성이 필요할 때 데이터베이스에서 enum을 사용하십시오. 우리는 이것을 처리하기 위해 명시 적으로 매핑 된 enum을 코드에 사용합니다. 데이터베이스의 무결성을 강화합니다. 마찬가지로 :

| Id | Value | 
--------------- 
| 1 | Male | 
| 2 | Female | 

// FK from the table above to the table containing all your data, and in code: 

enum Gender { Male = 1, Female = 2 } 

는 경우에만 코드에서 열거를 사용 하는가?
F.e. 비트 마스킹! 따라서 데이터베이스에서 응용 프로그램에 효율적으로 적용되는 많은 설정을 저장할 수 있습니다. 무결성은 데이터베이스가 이것과 관련이 없으므로 실제로 신경 쓰지 않습니다.

1

이 특정 예에서 성별은 항상 남성 또는 여성이되므로 데이터베이스에 정적 세부 사항을 적용하면 그리 유용하지 않습니다.

그러나 열거 형 Visa 및 Mastercard가있는 상점처럼 좀 더 동적 인 일부 열거 형이 있습니다. 나중에 Discover와 Amex를 추가해야 할 수도 있습니다. 코드를 동적으로 처리 할 경우 데이터베이스 열거가 더 유용합니다.

1

세 번째 옵션 (문자열 값 저장)은 최악입니다. 문자열과 열거 형 사이를 변환해야합니다. enum을 int로 저장하는 것이 더 좋습니다. enum은 기본적으로 int 자체이므로 캐스팅은 저렴합니다.

데이터베이스에 조회를 저장할지 여부는 데이터베이스에서 수행 할 작업에 따라 달라집니다. 해당 테이블에 대한 외래 키 참조를 사용하면 올바른 값만 저장됩니다. 그러나 열거에서 온 것처럼 항상 프로그램이 올바른 값을 저장할 것인지 결정할 수도 있습니다.

1

둘 다 사용합니다. 유효하지 않은 값을 입력 할 수 없도록 데이터베이스에 제약 조건을 넣어야합니다. 그렇지 않으면 동일한 데이터베이스를 사용할 수있는 프로그램이나 다른 (향후) 프로그램에서 유효하지 않은 값을 삽입 할 수 있습니다.

실제로 모든 성별을 포함하는 테이블을 사용할 수 있습니다. 외래 키 제약 조건을 허용하여 올바른 데이터를 적용 할 수 있기 때문입니다. 또한 성별에 도움이되지는 않지만 추가 값으로 테이블을 쉽게 확장 할 수 있습니다.

그러나 M, F 및 알 수 없음, 없음, 둘 다 (데이터베이스에 저장된 종에 따라 다름)를 나타내는 다른 값을 포함 할 수있는 문자 (1) 필드를 만들고 싶은지도 이해할 수 있습니다.

그러나 그 후에도 데이터베이스 값을 쉽게 변환하는 데 사용할 수있는 코드 열거 형을 만드는 것이 여전히 편리 할 수 ​​있습니다.실제로 '여성'을 의미하는 경우에는 '2'값을 사용하지 않으므로 추상화가 데이터베이스의 핵심이기 때문에 직접 또는 간접적으로 매핑되는 열거 형 또는 적어도 일부 상수를 사용하려고합니다. 데이터베이스의 실제 값으로 변환합니다.

0

데이터가 다른 응용 프로그램,보고 시스템 등에서 필요하게 될 가능성이있는 경우 데이터를 데이터베이스에 저장하십시오.

0

제약 조건을 올바르게 사용하면 데이터베이스 열거 형이 훨씬 더 유용합니다.

Person 
Name |Age |Gender |FK_Country_ID| 
-------|------|-------|-------------| 
varchar|int |bit |int   | 

Country 
CountryID|Country| 
---------|-------| 
int  |varchar| 

Person 0.* ----- 1 Country 

외래 키 제약

은 당신의 데이터가 데이터베이스 내에서 삽입 또는 갱신시 유효한지 확인합니다. 하드 코딩 된 열거 형은 나중에 코드를 다시 컴파일해야합니다. 외래 키에 대한 값을 읽고 동적 조회를 제공하는 것이 더 좋습니다.

1

두 가지 모두 사용해야하지만 데이터베이스에 저장해야합니다. Visual Studio를 사용하는 경우 사용자 지정 T4 (텍스트 템플릿 변환 도구 키트) 템플릿 (.tt 파일)을 만들 수 있습니다. 이렇게하면 실제로 데이터베이스에 저장된 클래스에서 직접 클래스/열거 형을 만들 수 있습니다. 해당 tt 파일을 마우스 오른쪽 단추로 클릭하고 '사용자 지정 도구 실행'을 선택하고 데이터베이스에 저장된 내용으로 C# 파일을 업데이트 할 수 있습니다.

관련 문제