DATOR


제1정규형의 적용 실전모델링


몇 가지 서적에 적혀 있는 제1정규형에 대한 정의는 다음과 같다.


- 릴레이션에 속한 모든 속성의 도메인이 원자 값(atomic value)으로만 구성되어 있으면 제1정규형에 속한다.

- 모든 애트리뷰트에 반복그룹에 나타나지 않으면, 즉 릴레이션 R의 모든 애트리뷰트가 원자값 만을 가지면 제1정규형이다.

- 도메인의 모든 값이 원자값이면 관계형 스키마는 제1정규형에 속한다. 제1정규형은 관계 정의의 일부분이기도 하다.


수학적인 기호를 표시하지는 않았지만 위의 표현을 보더라도 일반적인 회사원 수준에서 소화하기 어려울 것이다. 나 자신을 포함한 모델러 들은 단지 '더 쪼갤 수 없는 상태 = 반복속성이 없는 상태' 정도로 제1정규형을 이해하고 있으며 그 정도로 이해하고 있으면 된다. 그런데 '반복속성이 없다'는 의미가 모델러마다 좀 다르게 해석되는 경향이 있다. 그 예로써 아래와 같이 주문엔터티의 속성을 살펴보자.


주문번호, 고객번호, 주문일시, 결제신용카드번호, 이체계좌번호, 신용카드결제금액, 계좌이체금액,  주문자전화번호, 수취인전화번호, 반송인전화번호


위 속성 중 반복속성이어서 무조건 제1정규화의 대상이 되어 별도의 엔터티에서 관리해야 하는 속성을 찾아보자. 결론적으로 말하자면 속성을 어떻게 정의하느냐에 따라 반복속성이 아닐 수도 있으므로  위 속성에는 무조건 제1정규화의 대상이 되는 속성은 없다. 인터뷰를 통하여 업무요건을 먼저 파악해야 그 판단이 가능하다.


주문번호 속성은 일반적인 주문엔터티의 인조식별자이고, 고객번호와 주문일시는 본질식별자이자 반복되는 속성이 보이지 않으므로 제1정규화의 대상은 아니다.

결제신용카드번호와 이체계좌번호의 개념을 통합하여 '결제매체번호' 정도로 정의한다면 제1정규화 대상이 될 수 있다. 유사하게 신용카드결제금액과 계좌이체금액의 개념을 일반화하여 '(결제매체별)결제금액'으로 정의한다면 2개의 값이 존재할 수 있으므로 제1정규화의 대상이다. 그런데 속성의 개념을 통합하지 않는다면 각각 다른 정의하에 원자값을 유지한다고 볼 수 있게 되어 일차적으로는 제1정규화의 대상이 아닌게 된다. (이 상태에서는 속성의 특성상 추가로 확인해 보아야 할 것은 하나의 주문에서 2장 이상의 신용카드를 사용할 수 있는지, 2개 이상의 이체계좌번호가 필요하지는 않는지를 확인하는 것이다. 이 확인의 결과에 따라서 제1정규화의 대상여부가 결정될 것이다)


지금까지 속성의 정의에 따라 제1정규화의 대상여부가 결정됨의 예를 보였는데, 이 지식만 가지고는 실전에 적용하기가 힘들다. 그 이유는 결제매체번호와 같이 보다 일반화된 구조가 적절한지 결제신용카드번호와 이체계좌번호와 같이 구체적인 구조를 그대로 사용하는 것이 적절한지는 모델링 이론서의 이론만 가지고는 판단할 수 없기 때문이다. 이 상황에서는 어느 쪽에 더 좋다라고 일방적으로 판단할 수 없으며, 그 판단은 해당 모델의 영향도, 유지보수용이성, 해당업무의 변화가능성 등 다양한 인자를 복합적으로 판단해야 한다.


보다 쉬운 예가 그림1의 주문자전화번호, 수취인전화번호, 반송인전화번호 속성이다. 이 속성들을 '주문관련자전화번호' 로 정의한다면 반복 속성으로 판단되어 별도의 그림2와 같이 주문관련자전화번호 엔터티에서 관리해야 한다.


[그림1]

제1정규화는 어디까지 해야하나_3.png



[그림2]

제1정규화는 어디까지 해야하나_2.png


그림1과 그림2 중 하나를 선택할 때에는 주문관련자전화번호 3개 속성이외에 추가로 전화번호 속성이 필요해질 가능성, 그림1로 운영하고 있다가 그림2와 같은 데이터 구조로 변경하거나 그림1에 속성만 추가했을 때 모델 및 프로그래밍 변경에 어느 정도의 자원 투입을 요하는가, 전화번호 속성을 얼마나 검색에 이용하는가 등을 판단하여 그 방향성을 먼저 결정해야 한다. 그 결정에 따라 주문관련자전화번호 엔터티를 만들든가, 기존 주문자전화번호, 수취인전화번호, 반송인전화번호 속성을 그대로 사용하든가는 자연스럽게 결정되는 것이다.

TAG

Leave Comments