본문 바로가기

데이터 Story/모델링 매뉴얼

코드 유형과 코드 인스턴스를 한 개의 엔터티로 설계

공통 코드 데이터를 통합 관리하는 엔터티를 설계할 때, 코드 유형과 코드 인스턴스를 같이 관리할 수 있도록 한 개의 엔터티로 설계한다.

 

[그림 통합코드] 통합코드 엔터티는 코드 유형과 코드를 통합 관리할 수 있도록 설계한 엔터티다.

 

[그림 통합코드]

 

유형통합코드 속성은 해당 코드에 대한 코드 유형이 무엇인지를 관리하는 속성이다. 통합코드 엔터티에 대한 릴레이션은 아래와 같다.

 

[통합코드]

#통합코드

통합코드명

유형통합코드

001

매수매도구분코드

{null}

002

직급종류코드

{null}

00101

매수

001

00102

매도

001

00201

사원

002

00202

대리

002

00203

과장

002

 

[그림 통합코드-릴레이션]

 

유형통합코드 속성 값이 널(null)인 인스턴스는 코드 유형을 의미한다. 즉 통합코드 값이 ‘001’매수매도구분코드‘002’직급종류코드코드 유형을 의미하고 나머지는 코드 인스턴스를 의미한다.

 

통합코드 속성 값에도 규칙이 있다. 통합코드 속성 값의 앞 세 자리의 값과 유형통합코드 속성 값이 같으면 해당 코드 유형에 속한 코드의 인스턴스를 의미한다. 따라서 통합코드 속성 값만으로도 해당하는 코드 인스턴스를 알 수 있다. 그러므로 통합코드 속성 값의 앞의 세 자리가 유형통합코드 속성 값과 일치하도록 관리해야 한다.

 

이는 중복 데이터로 볼 수도 있고 주 식별자 값에 의미를 부여하는 것은 일반적으로 바람직하지 않지만, 코드 데이터는 어플리케이션에서 사용하기 편리하도록 관리하는 게 중요하다.

 

이 방법은 코드 유형과 코드 인스턴스를 한 엔터티에서 관리하면서 데이터에 임의의 의미를 부여함에 따라 엔터티의 성격이 분명하지 않아 잘못 사용될 수 있다는 단점이 있다. 또한 많은 엔터티에 사용되는 코드 속성에 5bytes의 값이 저장된다는 점은, 2bytes의 값을 사용하는 일반적인 방법에 비해 저장 공간 차원에서도 단점이다.

 

하지만 이 방법은 조회 쿼리를 매우 단순하게 만든다. 예를 들어 [그림 통합코드-릴레이션] 릴레이션에서 코드에 해당하는 리스트를 보여주는 쿼리는 아래와 같아서 다른 방법과 크게 다르지 않다.

 

Select 통합코드, 통합코드명

From [통합코드]

Where 유형통합코드 = ‘001’ /* 매수매도구분코드 */

 

반면에 목록화면이나 상세화면에서 해당 엔터티에 사용된 코드값을 보여주는 쿼리는 아래와 같다.

 

Select A.계좌번호, B.통합코드명

From [거래내역] A, [통합코드] B

Where A.매수매도구분코드 = B.통합코드

 And A.계좌번호 = ‘1234567890’

 

코드 인스턴스를 조회하는 특별히 다르지 않지만 상세화면에서 사용하는 이 쿼리는 코드 유형을 나타내는 구문이 조건절에 없는 게 특징이다. 이는 속성 값에 코드 유형까지 포함된 코드를 저장했기 때문에 코드 엔터티와의 조인을 통해 바로 코드명을 알 수 있기 때문이다. 즉 거래내역 엔터티의 매수매도구분코드 속성 값에 ‘00101’ 등이 입력돼 있어 조인을 통해 바로 알 수 있다.

 

반복적으로 사용되는 쿼리 패턴이 단순해지는 것은 커다란 장점이다. 쿼리에 상수가 쓰이지 않아 실수를 방지할 수 있다는 점은 부수적인 장점이다.

 

또 다른 장점은 모든 코드를 통합 관리하는 통합코드 엔터티와 거래내역 엔터티처럼 코드를 사용한 엔터티 간의 관계선을 표현하기 수월하다는 점이다. 이는 참조 무결성 제약을 생성할 수 있다는 것을 의미하며, 데이터 무결성을 높일 수 있다는 것을 의미한다.

 

공통 코드 데이터는 중요하므로 데이터 품질에 특별히 신경 써야 한다. [그림 통합코드-관계] 모델처럼 코드를 사용하는 거래내역 엔터티와 통합코드 엔터티와의 관계선을 표현하고, 참조 무결성 제약을 생성해서 데이터 무결성을 보장할 수 있다는 점은 가장 커다란 장점이다.


 [그림 통합코드-관계]

 

코드 모델은 공통 코드 데이터를 제대로 관리할 수 있으면서 사용하기 편하도록 설계하는 것이 중요하다. 전자를 만족시키는 것이 코드를 통합하는 것이고, 후자를 만족시키는 것이 코드값에 대한 규칙을 부여한 것이다.