안녕하세요. 이성필 입니다.
지난 번에 언급되었던 1차 정규형에 나머지 부분에 대한 것에 대한 이야기 입니다.

지난 글에 1차 정규형에 "레코드들은 서로간에 식별 가능해야 한다" 도 포함된다고 한 부분이 있습니다.
이 부분에 대한 이야기를 자세히 하려면, 엔티티(ENTITY) 정의 부터 시작을 해야 하기 때문에 말이 좀 길어질 듯 해서 그냥 넘어갔습니다. 이번에 ... 짧은 지식이지만 엔티티라는 것을 정의 하는 과정에 대해서 이야기하려 합니다.

ENTITY... 우리말로 번역하면 "독립체" 라고 합니다.(dic.naver.com 참고 ^^) 모델링 책이나 문서에서는 "실체" 또는 "개체"라고 합니다. 논리 모델 단계에서의 엔티티는 관리할 대상이 되는 실체를 의미합니다. 
우리가 사용하고자 하는 데이터베이스에서 어떤 정보를 관리할 것인가를 결정하는 것은 중요한 부분입니다. 
개인적으로 이 부분에 대한 내용에 대해서 자세히 설명되어 있는 책이나 자료를 찾는 것이 생각보다 어려웠습니다.
과연 내가 바라보는 모습이 정확한 것인가? 
내가 상상하는 모델이 일반적인가? 
내가 선정한 정보들이 비지니스 모델에서 요구하는 것과 일치하는가?
.
.
.
이러한 질문에 대한 답과 불안감을 덜기 위해서 이것 저것 뒤져본 결과... 결론은 정답이 없다... 라는 것입니다.
대부분의 결정이 최선이 아닐 수 있어도.. 최악이기도 어려운 것입니다.
엔티티를 어떻게 정의하는가에 따라 전체의 모습이 달라지기 때문이며 평가 방법이 모호합니다. (ㅠㅠ)

일단 엔티티 선정을 간략히 소개하면 아래와 같습니다.
. 엔티티는 우리가 관리하고자 하는 어떤 것이어야 합니다.
그 엔티티는 문장으로 설명될 수 있으며, 주어가 명확해야 합니다.
주어의 범위도 생각해야 합니다. 범위를 어떻게 정의하는가도 상당히 중요합니다. 
우리회사로 범위를 한정할 지, 국내로 범위를 정할지 아니면 전세계로 할지도 고민의 대상입니다.
. 엔티티로 선정될 집합에 대한 명확한 정의 필요합니다.
예를 들면 학생이라는 집합을 엔티티로 할 경우 생각해볼 문제가 있습니다. 정의가 명확하지 않다면, 학생이라는 데이터는 입학하면 생기는 것이고, 졸업하면 지워지는 것인가에 대한 고민이 필요합니다. 
졸업을 하게되면 그 학교 학생이 아니게 되는 것인가? 라는 고민이 생깁니다. 그렇다면, 재학생/졸업생 으로 엔티티를 나누어야 할지, 학생을 하나의 엔티티로 하고 서브타입으로 지정해야 할지 고민됩니다.
위에서 언급했지만, 지금 이 순간 어떤 것이 정답이라고 할 수 없습니다. 다른 조건과 환경에 대한 고민을 함께 해야 보다 나은 선택을 할 수 있을 것입니다.
매번 엔티티 생성해야 하는 순간 엔티티를 나누어야 할지 합쳐야 할지, 범위를 어떻게 해야 할지 고민하게 됩니다.
엔티티의 의미가 현재 구현해야 할 시스템(다른 말로 비지니스로직)의 본질 아래에서 명확하게 정의되었다면 이러한 고민의 많은 부분은 해결될 수 있습니다.

이외에도 몇가지 더 있었던 것 같은데... 
제가 실제 작업할 때 중요하게 생각하는 것은 위의 2가지 정도 입니다.

위의 정의를 구체적으로 명확히 했다면, 그 엔티티는 레코드들마다 서로를 구별할 수 있게 되는 의미상의 주어를 가지게 됩니다.
이 의미상의 주어를 논리 모델 단계에서 식별자(idenifier) 라는 말로 표현합니다. 
이 식별자라고 불리는 속성 혹은 속성의 묶음이 물리 모델로 내려가면서 주로 Primary Key 로 사용됩니다.
.
.
.
이번 글은 여기까지 .... 입니다. ^^

다른 분들은 엔티티(테이블)를 결정할 때 어떤 기준으로 하고 계시나요?
비슷한 고민을 했던 분들 계시면 함께 이야기 했으면 합니다.




profile