문제

우리는 nhibernate를 사용하고 있으며, 열거 형 정보를 저장하기위한 일반적인 패턴 중 하나는 열거에 대한 별도의 테이블을 정의하고 열거를 사용하는 기본 엔티티/테이블에서 ID를 참조하는 것입니다. 간단한 예 :

Message
-------
ID (bigint PK)
MessageTypeID (bigint FK)
Body (varchar)

MessageType
-----------
ID (bigint PK)
Value (varchar)

Messagetype 테이블에는 SMS, MMS, PSM 등과 같은 적은 수의 열거 값이 포함되어 있습니다.

이와 같은 별도의 테이블에 열거 값을 넣을 가치가 있습니까? 나는 열거의 프로가 당신이 미래에 더 쉽게 확장 할 수 있고 더 정규화 될 수 있다는 것입니다. 그러나 콘은 메시지를 가져올 때마다 가입을해야한다는 것입니다. 다른 하나를 선택할 수있는 브레이킹 포인트가 있습니까?

도움이 되었습니까?

해결책

열거를 사용한다는 것은 지금하고있는 것처럼 다른 테이블을 사용하지 않음을 의미합니다. 당신이 말한대로 더 빠르고 훨씬 간단합니다.

두 경우 모두 더 많은 옵션을 추가 할 수 있지만 질문은 다음과 같습니다. 테이블에 다른 항목을 추가하면 해당 기능을 추가하기 위해 응용 프로그램을 다시 컴파일해야합니까?

응용 프로그램 디자인이 결합되어 새 메시지 유형을 지원하려면 다시 컴파일해야합니다 (아마도 SMS 구현을 포함해야하기 때문에) 별도의 테이블이 있어야 할 가치가 없으며 열거를 사용해야합니다.

다른 한편으로, 귀하의 엔티티가 논리 (국가 또는 상태 테이블)가 없거나 응용 프로그램이 다시 컴파일하지 않고 새 메시지 유형을 연결할 수있는 경우 다른 테이블을 사용해야합니다. 이를 위해 테이블을 다음과 같은 것으로 변경할 수 있습니다.

MessageType
-----------
ID (bigint PK)
Value (varchar)
ImplementationType (varchar) (ie: Xyz.SMSSender, Xyz)

또는 주입 된 종속성을 사용자 정의 할 수있는 분리 된 구성 파일이있을 수 있습니다.

다른 팁

나는 당신의 Messagetype 테이블에 일치하는 ID와 함께 코드에 열거를 생성합니다. 그런 다음 수업에서 그냥 사용하면 Nhibernate가 올바르게 매핑 할 수 있어야합니다.

특히 데이터를 관리 할 필요가없는 경우 열거 테이블에서 벗어났습니다. 당신이 갈 때 점점 더 많은 Messagetype을 추가 할 건가요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top