DATOR


엔터티의 이해와 표현 엔터티


 게임을 많이 한 사람이 새로운 게임에 대해 유용한 요구사항을 제시하기 쉬운 것처럼, 다른 사람이 작성한 데이터 모델을 많이 활용해본 사람이 우수한 데이터 모델을 만들 수 있을 것이다. 이런 관점에서 관련자들이 어떻게 데이터 모델을 이해하는지를 파악하는 것이 데이터 모델링 작업에 유용한 기준을 제시해 줄 것이다.

 잘 모르는 업무의 ERD라도 다음과 같이 엔터티 명칭, 관계, 서브타입, 식별자와 속성 및 엔터티의 정의와 설명 등을 확인함으로써 그 엔터티를 상당히 잘 이해할 수 있다. 각 항목에 대한 상세한 논의는 별도의 글에서 다루기로 하겠다.

 

1. 엔터티 명칭

 ERD를 볼 때 가장 먼저 엔터티를 눈길이 가는 것이 엔터티의 명칭이다. 적절하게 부여된 엔터티명칭은 그것만으로도 엔터티의 개체의 특징을 잘 설명할 수 있다

 

2. (부모 엔터티와의) 관계

 사실 우리가 어떤 개체를 인식할 때 가장 기본적으로 하는 행위가 부모 개체를 찾는 것이다. 특히 그 개체가 특징적인 부분이 드러나지 않는 일반적인 존재라면 더더욱 부모 개체를 통해서 해당 개체를 인지하려고 노력한다. 예를 들어, 산부인과에서 갓 태어난 아기들은 자신의 이름이 아닌 어머니의 이름을 기준으로 한 인식표를 발가락에 걸고 있다. 시간이 흐름에 따라 이름을 받아 점차 자신 만의 특성을 갖추고 있긴 하지만, 친척들에게는 상당히 오랫동안 누구의 몇째 아들 또는 딸로 인식될 것이다. 동물은 어떨까? 여러분의 집에서 키우는 강아지는 저마다의 이름이 있겠지만 주변 사람들과의 대화에서 '우리집에서 키우는 강아지'라고 지칭해야 하는 경우가 더 많을 것이다. 그것은 그 강아지의 이름이 일반적으로 알려져 있지 않기 때문이다. 생명체가 없는 물건들도 유사하다. 핸드폰의 고유이름인 시리얼번호를 사용하는 사람은 거의 없고 대개는 일반화된 명칭인 모델명이나 회사명을 사용할 것이다. 이렇게 우리는 알게 모르게 특정 개체에 대한 인식을 위하여 그 개체의 상위 개체가 무엇인지를 파악하고 활용하고 있다.

 

3. 서브타입(부분집합)

  '모델링'이라는 단어에는 실존하는 무엇인가를 추상화시켜 표현했다는 의미가 내포되어 있는데, 데이터 모델에서의 대표적인 추상화의 결과가 엔터티이다. 예를 들어, 고객 엔터티에는 세상의 사람들을 관리하고 있을 뿐만 아니라, 법인이나 사업자라는 개념적 존재까지도 추상화하여 하나의 엔터티에서 관리하고 있다. 즉, 각 엔터티가 어떤 부분집합으로 구성되는지를 파악하는 것도 엔터티를 이해하는 좋은 방법이다.  고객엔터티에 개인고객과 법인고객이 모두 포함되는지, 사원엔터티에 협력사직원이 포함되는지, 쇼핑몰의 주문엔터티에 결제가 진행중인 주문내역도 포함되는지를 표현하는 것이 그렇지 않은 것보다 훨씬 엔터티를 이해하기 쉽게 해준다. 앞으로 설명하겠지만 엔터티의 추상화 수준이 향상될수록 엔터티명칭만으로는 엔터티의 내용을 설명하기 어려워지므로, 엔터티의 부분집합을 적절하게 표현해야만 엔터티에 대한 명확한 개념을 유지할 수 있게 된다.

   

4. 식별자와 속성리스트

 인스턴스를 식별하는 기본적인 접근이 부모와의 관계에서 출발하긴 하지만 동일한 부모가 둘 이상의 자식 인스턴스를 생성할 수 있으므로 - 즉 형제 인스턴스가 존재할 수 있다 - 자식 인스턴스들을 구분할 수 있는 별도의 속성이 식별자에 추가되어야 하는 경우가 많다. 즉, 부모로부터 상속받지 않은 식별자를 지정함으로써 인스턴스를 명확히 인식할 수 있게 한다. 쇼핑몰의 주문엔터티의 식별자가 고객번호+주문일시라고 한다면 하나의 주문은 한 명의 고객만이 할 수 있고, 한 명의 고객은 여러 건의 주문을 시차를 두고 할 수 있음을 의미한다.  

 한편, 주문엔터티의 총주문상품건수 속성을 통해서 하나의 주문으로 여러 종류의 상품을 주문할 수 있음을 알 수 있듯이 일반 속성을 통해서도 엔터티에 숨어있는 업무 규칙을 파악할 수 있다.

 

5. 엔터티 정의와 설명

 일반적으로 정의는 무엇인가를 설명하기 위한 매우 좋은 수단 중 하나지만, 데이터 모델에서의 엔터티 정의는 엔터티를 설명하는데 가장 중요한 수단은 아니다.  그 이유는 앞에 나열한 엔터티 명칭, 관계, 서브타입 및 속성은 데이터 모델에 기호로 표현되어 빠르고 정확하게 그 의미를 파악할 수 있지만, 정의와 설명은 추가적인 방법(엔터티의 정의를 보기 위한 추가적인 마우스 클릭 등)을 통해서만 확인할 수 있기 때문이다. 그런데 기호만으로 표현하지 못하는 사항도 많이 발생하므로 그런 사항은 글로서 표현해야만 한다

 

 

한편, 엔터티에 따라 엔터티의 표현을 위해 신경써야 하는 부분이 조금씩 다르다. 엔터티의 분류에 따라 대체적인 정리를 해 보면 다음과 같다. 

 

 엔터티erd.JPG

 

1. 강엔터티 : 독립적으로 존재할 수 있는 강엔터티는 부모 엔터티가 없으므로 부모와의 관계를 통해 개체를 설명할 수 없다. 따라서 어떤 개체들로 구성되는지, 언제 데이터를 입력, 수정, 삭제하는지를 명확히 나타내어야 한다. 예를들어 회원엔터티는 '법인'도 포함되는지, 탈퇴한 회원은 삭제할 것인지 등을 나타내야 한다. 만약 탈퇴하더라도 삭제하지 않으면 재가입 시에 새로운 인스턴스를 생성할 것인지 기존의 인스턴스를 재사용할지도 결정해야 한다. 자산코드엔터티라면 컴퓨터의 메인보드 등과 같은 부속품도 별도로 관리할 것인지, 동일한 모델이지만 구매금액이 다르면 새로운 인스턴스를 생성할지 등을 결정해야 한다.

 

회원-할인카드erd.JPG

 

2. 약엔터티 : 독립적으로 존재할 수 없는 약엔터티는 당연히 상위 엔터티와의 관계가 엔터티의 설명의 출발점일 것이다. 이 때 주의할 점은 상위 엔터티의 특정한 부분집합만 약엔터티와 관계를 갖는 것은 아닌지에 대해서도 파악해야 한다. 회원 중 법인 고객만 할인카드를 발급한다면 할인카드 발급내역 엔터티는 고객엔터티 중 법인 서브타입과만 연결되어야 할 것이다. 물론 중요한 약엔터티 즉 핵심엔터티에 해당하는 약엔터티는 강엔터티와 유사하게 어떤 개체들로 구성되는지도 설명해야 한다.

 

3. 엔터티의 목적에 따른 설명

 다음과 같이  엔터티의 특성에 따라 정의나 설명에 추가적인 글들을 표기하는 것이 필요하다.

 1) 이력엔터티 : 이력엔터티는 검색이나 조회하는 어플리케이션이 없는 백업용 이력엔터티인지, 다른 특별한 용도가 있는지를 밝히는 것이 좋다. 만약 특별한 용도가 있다면 그 용도에 맞게 이력엔터티를 구성하고 설명을 명시해 놓는 것이 효과적일 것이다.

 2) 전문엔터티 : 엔터티 설명에 이 전문정보는 누가 만들고, 누구에게 전달할 것인지 또, 데이터의 생성과 삭제는 언제, 어떻게 이루어지는지를 명확히 표현해야 한다.

 3) 집계엔터티 : 어떤 엔터티의 정보를 수집하여 집계엔터티의 인스턴스를 생성하는지 그 경로를 표현해야 한다. 이 때 주의할 점은 그 집계 경로가 데이터 모델에서의 관계를 의미하는 것은 아니므로 관계와는 별도로 명시해 주어야 한다는 것이다.

 

 

 

TAG

Leave Comments