표준 단어와 표준 도메인, 표준 용어는 서로 엮어 있어 각자 별개의 것으로 설명하기 힘듭니다. 하지만 각자의 내용이 길고, 구분이 필요하기 때문에 별도의 장에서 설명하고 있습니다. 서로 밀접하게 연관되다 보니 중복 설명이 될 수 있습니다.
도메인의 의미는 다소 포괄적입니다. 데이터 모델링에서 도메인(domain)의 일반적인 의미는 ‘데이터 타입과 길이, 포멧 등이 같은 값의 집합’입니다. 이는 표준 도메인에도 유사하게 적용되는 의미입니다. 결국 의미가 같고, 데이터 타입과 자릿수가 같은 것을 표준 도메인이라고 합니다. 실제로 표준 도메인은 속성 명의 끝에 붙는 것으로 사용되고 있습니다. 분류어라는 용어로도 사용됩니다.
표준 도메인의 역할
표준 도메인의 사용 목적은 크게 세가지 정도가 있습니다. 하나는 데이터 값의 일관된 사용을 위해서입니다. ‘~일자’라는 속성은 Date 타입이나 Varchar(8) 타입을 사용하도록 하는 것이 주된 목적입니다. ‘주문일자’ 속성의 데이터 타입이 Varchar(6)이 되는 것을 방지하는 것이죠. 이 목적은 현재 필수적이어서 제대로 사용되고 있습니다.
또 하나의 목적이 일관된 사용을 위해서인데요. 이 기능을 제대로 사용하지 못하는 경우가 많습니다. 일관된 사용에는 여러 가지가 있습니다. 데이터 타입과 길이가 같아야 하는 것은 기본이고요. 영문의 형태도 같아야 합니다. 무엇보다 의미가 같아야 합니다. 논리적인 개념이 포함돼서 정확히 사용하지 못하는 면이 있습니다. 데이터 타입이나 길이를 일치시키기 위한 첫 번째 목적은 물리적 개념이라 정확히 사용되는 편이죠.
예를 들어, 고객 엔터티의 주 식별자인 ‘고객번호’ 속성은 표준 도메인이 돼야 합니다. 모든 ‘고객번호’는 Varchar(8)로 사용해야 하니, 첫 번째 목적을 만족하기 위해 표준 도메인으로 사용돼야 합니다. 또한 ‘고객번호’ 속성은 영문을 ‘CNO’로 사용하기 위해 표준 도메인으로 사용합니다. 우리회사의 고객에 대한 번호를 의미하기 위해서는 ‘고객번호’를 표준 도메인으로 사용해야 하는 것입니다.
만약 외부 고객을 의미하는 번호가 필요하면 외부고객번호 속성을 사용해야 하는데요. 이때는 영문을 ‘ECNO’처럼 달리 사용해야 데이터 타입이 Varchar(10)으로 달라져도 사용에 문제가 없습니다. 데이터 타입이 Varchar(8)로 고객번호와 같더라도 영문의 형태가 달라져야 의미가 혼란스럽지 않게 됩니다.
‘고객번호’를 표준 도메인으로 사용하지 않고 일반 용어처럼 사용하면 영문이 ‘CU_NO’가 되고, 외부고객번호 속성은 ‘ET_CU_NO’가 돼서 두 속성의 의미가 동일한지 그렇지 않은지 알 수 없게 됩니다.
‘고객번호’를 표준 도메인으로 사용할 때, 외부고객번호 속성에 대한 도메인을 ‘고객번호’로사용해도 안 돼죠. 영문이 ‘ET_CNO’가 돼 우리 고객인지 혼동되고, 외부 고객 번호와 우리 고객 번호의 자릿수가 다를 때는 당장 문제가 됩니다.
우리회사 고객을 의미하는 ‘관계고객번호’란 속성에 대한 영문 역시 ‘RL_CNO’로 사용하는 것과 ‘RL_CU_NO’로 사용하는 것은 차이가 있습니다. 컬럼 명으로 데이터 타입은 물론 의미까지 구분할 수 있어야 합니다. 표준 도메인에는 이렇게 중요한 의미가 있습니다. 결국 속성의 일관된 사용을 돕는 것이 표준 도메인입니다.
표준 도메인의 마지막 역할은 컬럼 명을 줄이는 것입니다. 고객번호 속성이 표준 도메인일 때는 컬럼 명을 ‘CNO’로 사용할 수 있습니다. 그렇지 않다면 단어를 연결한 형태의 ‘CU_NO’ 정도로 사용할 수밖에 없게 됩니다. 컬럼 명이 짧아지는 것은 그 자체로도 의미가 있지만, 30자리가 넘는 컬럼 명이 생길 경우를 대비하는 차원에서도 의미가 있습니다. 흔치는 않지만 최대 길이를 초과하는 컬럼 명이 종종 생깁니다.
표준 도메인 유형
표준 도메인의 종류는 크게 두 가지로 구분할 수 있습니다. 대표적인 표준 도메인은 속성 명 뒤에 붙이는 기본 도메인입니다. 예를 들면, 일자, 금액, 내용, 코드 등이 있습니다. 이런 기본 도메인은 하나의 도메인에 여러 가지 데이터 타입과 길이를 지정할 수 있습니다. 데이터 타입과 길이를 합쳐서 흔히 인포타입(Infotype)이라고 합니다.
‘주문일자’라는 속성 명을 표준 용어로 등록할 때, ‘일자’라는 기본 도메인을 지정하고 Varchar(8)이나 Date 인포타입 중에서 선택할 수 있는 것입니다. ‘주문금액’도 마찬가지로 ‘금액’이란 기본 도메인을 사용합니다. 표준 도메인인 기본 도메인이 사용되는 대표적인 경우입니다.
다른 한 가지는 대표 속성을 의미하는 속성 도메인입니다. 속성 도메인의 대표적인 예에는 식별자 속성이 있습니다. 고객번호, 계좌번호, 사원번호 등의 인조 식별자는 속성 도메인입니다. 이런 인조 식별자는 나름의 고유한 의미가 있으면서, 주로 다른 엔터티의 관계 속성으로 사용됩니다. 관계 속성으로 사용될 때는 수식어와 함께 사용되는 경우가 많습니다. 입금+계좌번호 등이 그렇습니다.
이때 ‘계좌번호’를 대표 속성으로 등록하면, 즉 속성 도메인으로 등록하면 ‘수식어+속성 도메인’ 형식으로 사용할 수 있습니다. 이렇게 지정하면 계좌번호의 데이터 타입과 길이를 그대로 따르게 됩니다. 더욱이 ‘ACNO’라는 컬럼 명도 그대로 사용할 수 있습니다.
만약 속성 도메인인 계좌번호 자체를 도메인으로 지정하지 않고, 기본 도메인인 ‘번호’를 지정하면 데이터 타입과 길이가 계좌번호 속성과 달라질 수 있으며, 컬럼 명도 ‘AC_NO’ 형태가 되니 달라지게 됩니다. 이렇게 되면 같은 성격의 계좌번호를 의미하는 것인지조차 확신할 수 없게 됩니다.
속성 도메인을 사용하는 이유는 컬럼 명을 일치시키기 위한 목적도 큽니다. 만약 외부 계좌번호를 나타내는 속성이라면 ‘계좌+번호’로 사용해야 컬럼 명이 내부 계좌번호와 구분됩니다. 계좌 엔터티의 주 식별자인 ‘계좌번호’에 해당하는 속성만 속성 도메인을 지정해서 사용하는 것입니다. 이런 대표 속성을 속성 도메인으로 등록하면 데이터 무결성이 좋아지고, 혼선이 없이 일관되게 사용할 수 있습니다.
대표 속성에는 주 식별자에 포함된 속성도 해당됩니다. 예를 들어 계좌거래내역 엔터티의 주 식별자가 ‘계좌번호+거래일련번호’라고 가정하면, 이때는 거래일련번호 속성도 대표 속성이 됩니다. 이 엔터티와 관계가 존재하는 다른 엔터티에서 관계 속성을 사용할 때, 수식어가 필요한 경우에는 거래일련번호 속성을 속성 도메인으로 지정해서 사용할 수 있습니다.
그밖에 전화번호, 주민등록번호, 사업자등록번호 등의 식별 번호도 도메인 속성입니다. 마찬가지로 수식어를 포함해서 사용할 때 속성 도메인을 지정할 수 있습니다. 속성 도메인을 지정해서 사용하지 않으면 같은 성격의 속성인데, 데이터 타입이나 길이, 컬럼 명의 형식이 달라질 수 있습니다. 이를 일치시키는 게 속성 도메인의 주된 목적입니다. 기본 도메인과 같은 역할을 합니다.
속성 도메인(대표 속성)의 대부분은 주 식별자를 의미하기 때문에 속성 도메인은 엔터티 설계가 끝난 후에 모델러가 등록하게 됩니다. ‘전화번호’와 같은 일부 속성 도메인만 미리 등록할 수 있습니다.
기본 도메인과 달리 속성 도메인은 속성 그 자체를 의미합니다. 반면에 금액, 내용, 여부 등의 기본 도메인은 속성이 아니므로 속성으로 그대로 사용하면 안 됩니다. 앞에 반드시 수식어를 사용해서 구체적인 의미로 사용해야 합니다. 속성 도메인이 관계 속성에 사용될 때는 관계를 서술하는 수식어와 함께 사용할 수 있습니다.
속성의 데이터 성격이 고정적일수록 속성 도메인으로 적절합니다. 명, 수, 금액 보다는 번호나 ID, 코드 등의 데이터가 강결합입니다. 즉 번호, ID, 코드 등이 속성 도메인으로 적합하다는 것입니다. 다만 코드 속성은 속성 도메인에서 제외됩니다. 이는 별도로 설명하겠습니다.
기본 도메인과 속성 도메인을 등록할 때, 영문은 단어의 조합이 아니라 ‘_’ 없는 약어로 만드는 게 바람직합니다. 데이터 타입과 길이를 일치시키는 목적도 크지만, 영문의 길이를 짧게 만드는 목적도 크기 때문입니다.
기본 도메인은 단일어일 수도 있지만, 속성 도메인은 복합어입니다. 즉 둘 다 표준 단어에 속합니다. 전화번호, 사업자등록번호 등의 복합 명사는 복합어입니다. 인조 식별자이면서 업무적으로 복합 명사에 해당하는 계좌번호, 고객번호 등도 복합어로 등록하는 게 좋습니다.
기본 도메인과 속성 도메인의 성격을 이해하셨는지요? 모델링 노트 책에서는 기본 도메인은 물리 도메인(일반 도메인)으로 속성 도메인은 논리 도메인(대표 속성)으로 설명했습니다.
마지막으로 표준 용어를 등록하는 예를 들겠습니다. 계좌 엔터티의 주 식별자인 계좌번호 속성을 표준 용어로 등록할 때는, ‘번호’라는 기본 도메인(물리 도메인)을 지정하게 됩니다. 인포타입은 ‘VC12’ 정도로 정하고요. 영문은 ‘AC_NO’가 아니라 ‘ANO’가 돼야 하니 복합어로 만듭니다.
우리 계좌번호를 의미하는 출금계좌번호 속성을 표준 용어로 등록할 때는, ‘계좌번호’라는 속성 도메인(논리 도메인)을 지정하면 끝입니다. ‘출금+계좌번호’ 형태가 되는 것이죠. 별도로 기본 도메인을 지정할 필요가 없습니다.
반면에 외부 계좌번호를 의미하는 입금계좌번호 속성을 표준 용어로 등록한다면, ‘계좌번호’라는 속성 도메인(논리 도메인)을 지정하면 안 되고, ‘번호’라는 기본 도메인(물리 도메인)을 지정해야 합니다. 인포타입은 ‘VC20’ 정도가 될 것입니다. ‘입금+계좌+번호’ 형태가 돼야 인포타입도 자유롭게 지정할 수 있고, 영문도 구분이 됩니다.
'데이터 Story > 데이터 표준' 카테고리의 다른 글
복합어에 대한 정리 (0) | 2017.12.10 |
---|---|
표준 단어에 대해서 (0) | 2017.11.19 |
속성 명 정하는 방법 (2) | 2017.10.22 |
도메인 개념과 대표 속성 (0) | 2017.09.09 |
화면 용어를 관리하려면 (0) | 2017.06.18 |