공통 코드 데이터를 통합 관리하는 엔터티를 설계할 때, 코드 유형과 코드 인스턴스를 같이 관리할 수 있도록 한 개의 엔터티로 설계한다.
[그림 통합코드] 통합코드 엔터티는 코드 유형과 코드를 통합 관리할 수 있도록 설계한 엔터티다.
[그림 통합코드]
유형통합코드 속성은 해당 코드에 대한 코드 유형이 무엇인지를 관리하는 속성이다. 통합코드 엔터티에 대한 릴레이션은 아래와 같다.
[통합코드]
#통합코드 |
통합코드명 |
유형통합코드 |
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’ 등이 입력돼 있어 조인을 통해 바로 알 수 있다.
반복적으로 사용되는 쿼리 패턴이 단순해지는 것은 커다란 장점이다. 쿼리에 상수가 쓰이지 않아 실수를 방지할 수 있다는 점은 부수적인 장점이다.
또 다른 장점은 모든 코드를 통합 관리하는 통합코드 엔터티와 거래내역 엔터티처럼 코드를 사용한 엔터티 간의 관계선을 표현하기 수월하다는 점이다. 이는 참조 무결성 제약을 생성할 수 있다는 것을 의미하며, 데이터 무결성을 높일 수 있다는 것을 의미한다.
공통 코드 데이터는 중요하므로 데이터 품질에 특별히 신경 써야 한다. [그림 통합코드-관계] 모델처럼 코드를 사용하는 거래내역 엔터티와 통합코드 엔터티와의 관계선을 표현하고, 참조 무결성 제약을 생성해서 데이터 무결성을 보장할 수 있다는 점은 가장 커다란 장점이다.
[그림 통합코드-관계]
코드 모델은 공통 코드 데이터를 제대로 관리할 수 있으면서 사용하기 편하도록 설계하는 것이 중요하다. 전자를 만족시키는 것이 코드를 통합하는 것이고, 후자를 만족시키는 것이 코드값에 대한 규칙을 부여한 것이다.
'데이터 Story > 모델링 매뉴얼' 카테고리의 다른 글
속성의 묶음이 반복된다면 정규화가 원칙 (0) | 2017.08.06 |
---|---|
통합 코드 속성 명명법 (0) | 2017.05.20 |
외부에서 받은 코드 값만 관리할 때 (0) | 2017.05.13 |
외부 코드를 내부 코드에 통합하는 방법 (0) | 2017.05.09 |
내부 코드 통합 엔터티 (0) | 2017.05.07 |