게시판
      
상위분류 : 잡필방 중위분류 : 서류가방 하위분류 : 전산과 컴퓨터
작성자 : 문시형 작성일 : 2010-03-25 조회수 : 4,835
제 목 : 제 3 부 기본 논리적 데이터 모델링 - 제 1 장 엔터티(Entites)의 정의

제 3 부 기본 논리적 데이터 모델링

건물을 세울 때 그러하듯이 먼저 골조부터 단단히 세우는 작업은 매우 중요하다. 골조는 크고 무겁지만 다행히 종류는 그리 많지 않다. 그 대신 견고하게 세워지지 않으면 매우 부실한 건물이 만들어질 것은 자명한 일이다. 기본 논리적 데이터 모델링에서는 이러한 골조를 튼튼하게 세우는 일을 한다. 골조를 구성하는 세가지 요소인 '엔터티(entity)', '릴레이션쉽(relationship)', '속성(attribute)'의 구체적인 정의를 통하여 업무의 베일이 조금씩 벗겨져 가면 데이터 모델은 드디어 그 웅장한 모습을 우리 앞에 드러낼 것이다.
앞서 한번 언급한 적이 있었지만 기본 논리적 데이터 모델링에는 개념적 모델을 작성하는 과정을 포함하고 있다. 주요 엔터티에 대해서만 먼저 엔터티를 정의하고 이를 릴레이션쉽을 이용해 연결하는 것까지를 개념적 모델링으로 본다면, 거기에 속성들을 넣고 세부적인 속성 검증단계를 거치면서 좀더 구체화 시켜 나가며, 여기에 식별자를 확정하고 사례 데이터 작성을 통해 검증하는 것까지를 기본 논리적 데이터 모델링으로 본다. 단계를 굳이 이렇게 나누는 것은 개념적 모델링까지의 결과는 너무 개략적이고 논리적 모델링이 완료되는 것까지는 너무 상세하기 때문에 그 중간단계가 필요했다고 생각하면 이해가 쉬울 것이다.
물론 개념적 모델을 좀더 깊이 들어가 속성과 식별자까지도 확정하기로 하였다면 기본 논리적 데이터 모델링과 동일하다. 개념적 모델링과 기본 논리적 모델링의 공통적인 면은 둘 다 주요 엔터티만을 대상으로 한다는 것이다.


엔코아 컨설팅 제공



제 1 장 엔터티(Entity)의 정의
엔터티는 데이터 모델링에서 가장 중요한 요소라고 할 수 있다. 엔터티를 우리말로는 '실체(實體)'라고 번역하고 있다. 말 그대로 '실질적으로 육체를 가지고 있는 것'을 의미한다. 만약 이 실체가 모호하다면 그 다음 과정이 아무리 완벽하다고 하더라도 모델링은 전체가 모호한 모습일 수 밖에 없다.
이 장에서는 엔터티를 보다 쉽게 도출하고 전략적인 판단을 해 가는 구체적인 단계와 객관적인 판단의 근거를 매우 상세하게 설명할 것이다. 엔터티는 매우 명확하게 정의해야 한다고 했다.
이처럼 데이터 모델링에서는 실체 집합인 '엔터티'를 정확하게 도출할 수 있는 것이 무엇보다도 중요하다. 잘못된 실체를 가지고 아무리 집을 지어본들 그것은 단지 사상누각에 불과할 것이다. 그러나 앞서 강조했듯이 어떻게 정의를 했건 틀렸다고는 말할 수 없으므로 오히려 '얼마나 합리적이고 전략적인 것을 생성하느냐에 대한 문제'는 보다 높은 차원의 문제이기 때문에 이해시키기도, 익혀서 활용하기에도 결코 쉽지 않을 것이므로 여러분은 바짝 긴장하여야 할 것이다.
이 장에서는 엔터티 후보의 수집부터 시작하여, 복잡성에 빠지지 않고 순서에 입각한 접근을 하기 위해서 엔터티를 분류하는 방법, 그리고 엔터티의 최종 확정을 위한 구체적인 절차와 객관적인 판단 기준을 제시하게 될 것이다.





  1.1 엔터티 후보의 선정
  엔터티를 선정하기 위해서 우리가 가장 먼저 해야 할 일은 엔터티 후보부터 수집하는 일이다. 이 과정은 우리가 업무에 무지한 상태에서 데이터 모델링의 첫 발을 내 딛는 단계이므로 깊은 업무 지식 없이도 충분히 수행할 수 있는 구체적인 방법이 제시되어야 할 것이다. 주의해야 할 것은 이 단계는 말 그대로 '후보'를 찾아 내려는 것이지 엔터티를 확정하자는 것이 아니므로 후보의 '자격 여부'만 가려 내는 선에서 멈출 수 있어야 한다는 것이다. 그렇지 못하면 앞서 강조했던 '수평적 사고'를 할 수가 없다.


  1.1.1 엔터티 후보의 수집
엔터티 후보를 수집하기 위해 가장 먼저 우리가 시도해야 할 일은 어디서부터 후보를 찾기 시작할 것인가를 결정하는 일이다. 엔터티 후보를 수집할 수 있는 방법은 매우 다양하게 존재한다. 만약 기존 시스템이 있었다면 '시스템 다큐먼트(document)'가 있을 것이고, 현업에서 사용하는 각종 장표들, 현업 사용자와의 인터뷰를 통해서 후보를 찾을 수도 있겠고, 관련 서적을 통할 수도 있을 것이다.
만약, 우리가 프로세스 모델링을 먼저 수행하여 자료흐름도가 나와 있다면 그 속에 있는 자료저장소(data store)나 객체지향 모델링에서 나타난 클래스는 훌륭한 엔터티 후보가 될 수 있다. 뿐만 아니라 혹시 타사 혹은 유사 시스템의 자료를 확보하고 있다면 거기에서도 많은 후보들이 나타날 것이며, 현업 담당자들이 기안한 각종 보고자료에서도, 또는 현장에 가서 직접 업무를 조사해 보는 방법도 있을 것이다.



  1.1.2 엔터티 후보의 식별
엔터티 후보의 식별을 위해서는 다음 세가지 단계를 검증함으로써 객관화가 가능하다. 첫 번째는 '엔터티의 개념'을 확실하게 정립하는 것이며, 두 번째는 '우리가 관리하고자 하는' 것인지를 따져 보는 것이다. 마지막 세 번째는 '가로와 세로를 가진 면적(집합)'인지를 확인하는 것이다.


  1.1.2.1 엔터티 후보의 개념 정립
엔터티 후보로서 검토해 볼 대상의 최초 상태는 한낱 '단어'에 불과하다. 단어란 단지 사전적인 의미에 지나지 않으므로 우리는 이 단어가 의미하는 진정한 집합이 무엇인지 정의하여야만 한다.


  1.1.2.2 관리 대상 후보의 선정
엔터티 후보로 선정하기 위해 할 첫 번째 작업은 과연 이것이 '우리가 관리하고자 하는' 대상이 맞는지를 확인하는 일이다. '우리가 관리하고자 하는'이란 의미는 앞으로 우리가 모델링을 하면서 던지는 모든 질문에 반드시 기본적으로 포함되어야 하는 '주어부(主語部)'에 해당하는 구문이다. 또한 이 말에는 "우리가 현재 관리하고 있느냐?" 뿐만 아니라, "우리가 앞으로는 관리해야 하지 않느냐?"라는 질문을 모두 포함하고 있다.


  1.1.2.3 엔터티 후보의 집합 여부 확인
엔터티 후보로 선정하기 위해 할 첫 번째 작업은 과연 이것이 '우리가 관리하고자 하는' 대상이 맞는지를 확인하는 일이다. '우리가 관리하고자 하는'이란 의미는 앞으로 우리가 모델링을 하면서 던지는 모든 질문에 반드시 기본적으로 포함되어야 하는 '주어부(主語部)'에 해당하는 구문이다. 또한 이 말에는 "우리가 현재 관리하고 있느냐?" 뿐만 아니라, "우리가 앞으로는 관리해야 하지 않느냐?"라는 질문을 모두 포함하고 있다.







  1.2 수집된 엔터티의 분류
  우리는 이제까지 엔터티 후보들을 먼저 골라내고, 개념을 명확하게 한 다음 객관적인 잣대에 의한 자격 검증을 거쳐 엔터티 후보들을 선정하여 두었다. 그러나 이렇게 결정한 것들은 단지 엔터티의 후보에 불과할 뿐 아직 최종적으로 확정된 엔터티는 아니다. 이 엔터티 후보들은 앞으로 훨씬 정교하게 좀더 다듬어져야 하며, 자신의 출생의 비밀이 정확하게 밝혀져 있어야 한다.
첫 번째 단계는 우선적용 대상을 분류하는 것이고, 두 번째 단계는 첫 번째 단계에서 선별한 핵심 엔터티들을 대상으로 이를 데이터 영역별로 분류하는 것이다. 엔터티를 접근형태별로 분류하는 이유는 골조자재에 해당하는 엔터티와 기타 자재에 해당하는 엔터티로 분류하여 중요도와 접근단계에 따라 순차적으로 접근하도록 함으로써 우리가 보다 손쉽게 모델링을 할 수 있도록 하자는 것이다.



  1.2.1 키이(key) 엔터티
키이 엔터티란 '태초부터 창조된 실체'를 말한다. 다시 말해서 자신의 부모를 가지지 않는 엔터티를 말한다. 여기서 부모 엔터티란 자신을 태어나게 한 - 만약, 이 엔터티가 없다면 논리적으로 자신이 태어날 수 없는 - 엔터티를 말한다.
예를 들어 사원 엔터티에 있는 '홍길동'이란 개체는 아직 부서가 정해지지 않았더라도 사원으로서 정의하는데 문제가 없다. 물론 부서 엔터티와 관계를 정의할 때 반드시 부서를 갖도록 하는 규칙을 부여할 수도 있겠지만 그렇다고 해서 부서가 직접적으로 사원을 태어나게 한 부모인 것은 결코 아니다.
키이 엔터티는 앞장에서 몇 번 언급했던 '개체형 집합'과 동일한 개념으로 키이 엔터티는 매우 명확하고 구체적인 정의가 필요하며, 이는 모델링에 있어서 지극히 중요한 일이다.




  1.2.2 메인 (main) 엔터티
키이 엔터티를 제외한 다른 모든 엔터티들은 창조물(?)이 아니기 때문에 당연히 부모 엔터티를 가지고 있어야만 태어날 수가 있다. 그러나 그들 간에도 상하관계가 존재하는데 이 중에서 업무의 중심이 되고 많은 하위 엔터티를 창조하는 엔터티가 메인 엔터티이다.
메인 엔터티는 키이 엔터티에 붙어 있는 바로 아래 단계만을 의미하는 것이 아니라는 것이다. 여러 계층에 존재할 수 있으며 어느 대까지를 메인 엔터티로 볼 것인지 판단하는 것이 중요하다.



  1.2.3 액션 (action) 엔터티
액션 업무가 수행되면서 발생한 액션 엔터티가 먼저 눈에 보이게 된다. 액션 엔터티는 수행된 업무를 담고 있으므로 중요도를 가지고 따진다면 물론 가장 중요하다고 할 수 있다. 그러나 이들은 반드시 부모를 가져야만 하는 스스로는 결코 태어날 수가 없는 것들로 이 중요한 것들을 제대로 정의하기 위해서는 그들을 낳을 부모들부터 먼저 정확하게 정의해야 하는 것이 일의 당연한 순서일 것이다.





  1.3 엔터티의 명확화
  엔터티를 명확화 한다는 것은 엔터티 집합의 내용물을 보다 구체화 한다는 것, 다시 말해서 엔터티 내에 들어 가는 개체들의 의미나 세부적인 구성집합을 매우 상세하게 정의한다는 것을 의미한다. 우리가 정확한 판단을 하기 위해서 가장 먼저 준비해야 할 것은 판단하고자 하는 대상을 분명하게 하는 것이다. 모호한 것을 평가한다면 필연적으로 모호한 결과밖에 얻을 수 없기 때문이다.
엔터티의 명확화를 진행해 가는 단계와 구체적인 접근 방법에 대해서 자세하게 알아 보기로 하자.


1) 데이터 영역별로 분류된 엔터티 후보들 중에서 대표적인 것을 먼저 선택하라.
2) 일단 선택된 엔터티에 일차적인 개념(동질성의 범위를 결정)을 정의하라.
3) 정의한 엔터티 개념을 가장 합리적으로 표현할 수 있는 명칭을 부여하라.
4) 엔터티 후보의 집합에 대한 순수성을 확인하라.
5) 같은 데이터 영역에 있는 유사 엔터티 후보들과 비교하여 개념을 확정하라.
6) 개념이 확정되었으면 엔터티 속에 들어가는 구체적인 부분집합을 명시하라.
7) 엔터티 정의서에 구체적인 내용을 기술하라.


엔터티 명확화에서는 이를 위해 가장 먼저 집합의 순수성을 확인하여 우리가 관리할 순수 집합을 도출한다. 집합의 순수성이란 엔터티는 반드시 순수한 개체집합이든지, 순수한 행위집합이어야 한다는 것을 말한다.
이러한 조건을 통과한 집합은 이제 그 집합의 동질성 정의를 분명히 함으로써 내용물의 성격을 명확히 하게 된다. 물론 동질성은 필요에 따라 의미를 포괄적으로 크게 잡을 수도 있고, 엄격하게 제한하여 작게 부여할 수도 있다. 여기서 어떤 크기가 좋으냐를 따질 필요는 없지만 크든, 작든 반드시 그 정의만큼은 분명해야 나중에 확정 단계에 가서 확신에 찬 최종 결론을 내릴 수가 있다.



  1.4 엔터티의 형태 확정
  지금까지 우리는 후보를 도출하고 이를 분류하여 일차 대상을 선정한 후 이들을 명확화 하기 위해 집합의 순수성을 확인하고, 동질성 확정을 통해 엔터티의 집합의 의미를 규명하여 합리적인 명칭을 부여함으로써 엔터티를 명확하게 한 후 이를 토대로 유사 엔터티와 비교를 통해 서로 간의 집합적 역학관계를 조정함은 물론 엔터티 내부의 상세한 부분 집합을 정의해 두었다. 사실 여기까지의 모든 작업을 마쳤다면 엔터티의 결정은 모두 마무리 된 것처럼 보인다. 하지만 아직도 우리가 해야 할 일이 몇 가지 더 남아 있다. 그것은 자체적으로 확정해 둔 엔터티의 위상이 주변의 다른 엔터티가 확정되어 가면서 어쩔 수 없이 영향을 받기 때문이다.
이제 주변의 유사 엔터티들을 구체적으로 확정하는 작업이 진행되면 상호 간에 어느 정도의 영향력을 미칠 수 밖에 없으며, 이것을 적절하게 감안하여 엔터티의 정의를 보완하는 작업이 있어야만 한다는 것이다. 엔터티의 보완은 크게 분리와 확장의 두 가지 유형으로 나눌 수 있다.
앞서 동질성을 설명할 때 집합이란 그 동질성을 어디까지 인정하느냐에 따라 여러 가지 형태의 집합이 만들어 질 수 있다고 했다. 이 말은 적어도 엔터티의 좋고 나쁨을 따지지 않는다고 가정한다면 집합을 어떤 형태로 잘라내었든 그 단위 집합이 명확하기만 하다면 충분히 하나의 엔터티로 볼 수 있다는 것을 의미한다. 문제는 그렇게 정의한 단위 집합(엔터티)이 얼마나 합리적이냐에 있다는 것에 있다.
이 말은 결국 우리의 판단이 그만큼 전략적이고 합리적이어야 한다는 것을 의미한다. 다시 말해서 단순한 공식이나 방법에 의해서 결정될 수 있는 성질의 것이 아니라 종합적인 사고력과 판단력의 산물일 수 밖에 없다는 점이다. 그렇기 때문에 어쩌면 이 단계가 모델링에서 가장 이해하기 어렵고 판단하기 곤란하며, 또한 모델링의 품질에 가장 큰 영향을 미치는 단계라고 할 수도 있다.
엔터티를 전략적으로 판단할 수 있는 힘을 키우기 위해서는 단지 방법과 수칙만을 암기한다고 해서 가능한 것은 결코 아니다. 앞으로 제시할 판단의 기준들을 깊이 이해하고 이를 바탕으로 많은 경험을 쌓아 복잡한 상황에 종합적으로 대처할 수 있는 판단 능력을 키워 나가는 방법밖에 없다는 것을 명심하기 바란다.



  1.5 본질 식별자의 확정
  엔터티 정의 단계에서 여러분들이 엔터티의 의미를 명확하게 정의했다면 최소한 그 속에 어떤 유형의 개체들이 들어가야 하는지에 대해서 만큼은 분명하게 밝혀졌을 것이다. 사실 지금까지 우리가 엔터티의 집합의 개념을 명확하게 하기 위해서 실시한 작업은 주로 그 내부의 세부적인 부분집합을 규명하는 일이었다. 다시 말해서 어떤 내용의 개체들이 존재하고 있는지를 분명히 하는 작업이었다. 이것은 물론 매우 중요하다. 그러나 사실은 이것보다 먼저 각 개체들이 어떻게 해서 태어났는지를 분명히 밝히는 것이 우선적으로 필요하다. 물론 이러한 사실은 앞에서 이미 언급했었고, 누차에 걸쳐 강조했었다.
여러분들은 앞서 '의미상의 주어'에 대한 것과 '출생의 비밀을 벗기는 일'에 대해서 언급하면서 장차 별도로 상세하게 설명하겠다는 약속을 기억하고 있을 것이다. 바로 여기에서 이들을 구체적이고 객관적인 방법을 통하여 규명하는 방법을 다루려고 한다. 단지 책의 구성상 여기서 설명하는 것일 뿐 앞장에서 설명한 엔터티 정의가 모두 완료된 후에 본질식별자를 확정하라는 것은 결코 아니므로 오해가 없기를 바란다.
한 가지 더 유의할 점은 여기서는 단지 최종적인 식별자를 확정하려는 것이 아니라 원래 의미상의 식별자인 본질 식별자를 분명하게 정의하려고 한다는 것이다. 엔터티의 최종 식별자를 확정하기 위해서는 앞으로도 더 많은 시간이 흘러야만 한다. 왜냐하면 최종 식별자는 자신을 대표(식별)한다는 사실 이외에도 남이 나를 불러(참조, 릴레이션쉽) 줄 때 사용해야 하는 것이기 때문이다. 즉, 비록 내 이름은 '나의 것'이 분명하지만 내가 나를 부를 때가 아니라 남이 나를 부르기 위해 사용하는 것이므로 나를 불러줄 주변 엔터티가 모두 등장한 후에 확정하는 것이 바람직하기 때문이다.
이런 이유로 인해 확정 식별자를 결정하는 단계는 대부분의 엔터티가 정의된 후에 실시한다. 나를 불러 줄 주변 엔터티가 아직 정의되지 않았는데 그들을 무시하고 나만의 입장에서 독선적으로 결정하는 것은 결코 좋은 방법이라 할 수 없다. 우리가 조직의 대표를 선출할 때에도 많은 심사숙고를 해야 하듯이 엔터티를 대표할 식별자를 결정하는 일은 매우 종합적이고 전략적이어야 한다. 설사 논리적인 형태가 복잡한 데이터 모델이라 하더라도 이 전략의 합리성에 따라 실제로 일어나는 액세스는 단순하게 만들 수도 있는 정말 중요한 단계이다.
이런 중차대한 결정을 주변의 고려 요소가 모두 등장하지 않은 상태에서 어찌 함부로 정의할 수가 있겠는가? 그렇기 때문에 아무리 마음이 급하더라도 아직은 때가 도래하지 않았기 때문에 이제 최종 식별자에 대한 생각은 잊어 버리고 지금은 오로지 자신의 출생에 대한 비밀을 밝히는 데만 주력하기로 하자.
본질 식별자를 정의하는 방법은 키이 엔터티와 행위 엔터티가 서로 다르다. 행위 엔터티를 정의하는 방법에는 상황에 따라 '하향식'과 '상향식'으로 접근하는 방식을 적용할 수 있다. 키이 엔터티는 부모가 없이 창조된 집합이므로 식별자 또한 창조시켜 주어야 한다. 그러나 행위 엔터티는 항상 부모가 누구인지를 확인하는 방식으로 진행된다.






  1.6 유형별 엔터티 표현방법  
  지금까지 우리가 정의해 왔던 엔터티들을 목적이나 용도, 혹은 뚜렷한 특징들을 나타내기 위해 형태별로 구분해 둘 필요가 있을 것이다.
세상(데이터 모델)에는 그 주체가 되는 인간(엔터티)이 존재한다. 인간에게 존재하는 이러한 유형들이 엔터티에서도 거의 유사하게 존재한다. 살아 있는 정상적인 사람들을 일반(normal) 엔터티, 마치 식물인간처럼 앞으로 다른 것으로 대체를 하거나 통합시키기 위해 아직은 없애지 않고 남겨 두었지만 삭제한 것이나 다름없는 의미의 제거(drop) 엔터티, 외계에서 온 우주인과 유사한 외부(external) 엔터티, 만화의 주인공과 비슷한 가상(pseudo) 엔터티, 손오공의 분신술로 만든 복제(clone) 엔터티, 역할을 대신하기 위해 존재하는 대체(代替, substitute) 엔터티, 임신 중이기는 하지만 곧 세상에 태어날 준비를 하고 있는 의미인 추가(additional) 엔터티로 분류할 수 있겠다.
이와 같은 여러 유형의 엔터티를 적절하게 분류해서 지정해 두는 것은 여러 가지의 의미를 가진다. 가령, 데이터 모델을 보다 정밀하게 표현할 수 있고, 남들이 모델을 좀더 정확하게 이해하는데 기여할 수 있으며, 모델링 진행과정에서 작업 대상을 식별하거나 진행관리를 할 수 있다는 부가적인 장점도 있으므로 많이 활용할 필요가 있다.
이와 같은 여러 유형의 엔터티를 적절하게 분류해서 지정해 두는 것은 여러 가지의 의미를 가진다. 가령, 데이터 모델을 보다 정밀하게 표현할 수 있고, 남들이 모델을 좀더 정확하게 이해하는데 기여할 수 있으며, 모델링 진행과정에서 작업 대상을 식별하거나 진행관리를 할 수 있다는 부가적인 장점도 있으므로 많이 활용할 필요가 있다.



  1.6.1 제거(drop) 엔터티
제거 엔터티를 남겨두는 이유는 마치 여러분이 개인용 컴퓨터에서 파일을 삭제시키면 원래의 디렉토리에서는 삭제되지만 '휴지통'에 들어가 있음으로써 이를 복원하거나 내용을 참조해 보거나 영구히 삭제시킬 수 있는 기회를 제공해 주려고 배려를 하는 것과 같은 이유라 할 수 있다.
이미 나름대로의 확실한 역할을 하고 있던 어떤 존재가 갑자기 혼자만 함부로 사라질 수는 없기 때문에 설혹 제거를 하겠다고 하더라도 잠정적인 삭제 상태로 만들어 두고, 주변 관계를 말끔하게 정리한 후에야 원하는 대로 사라지게 하여야 할 것이다.
엔터티를 제거 상태로 표시하게 되는 또 하나의 활용 형태를 생각해 보자. 제거 엔터티란 의미는 앞으로 없애 버릴 엔터티를 표시해 두겠다는 것이다. 이 말은 곧 ERP패키지의 데이터 모델을 커스터마이징할 때나 리버스 모델링을 하여 만들어진 현행(as-is) 데이터 모델에서 새로운 목표(to-be) 데이터 모델을 결정해갈 때 앞으로는 사용하지 않고 버리겠다는 의사표시로도 활용할 수 있다는 것을 말한다.



  1.6.2 외부(external) 엔터티
'외부'라는 말은 자기 집합을 제외한 나머지란 의미를 가지고 있다. 즉, 외부라는 집합을 정확히 정의하기 위해서는 먼저 내부 집합이 구체적으로 정의되어야 함을 뜻한다.
사실 일견 당연해 보이는 이 개념은 보는 사람의 시각에 따라 다를 수가 있다. 가령, 회사 전체 시스템을 내부로 보고 타사에 있는 개념적인 집합들을 외부로 볼 수 있는 방법이 있다. 회사 내에서도 OLTP, DW, 혹은 계정계, 정보계라는 이름으로도 시스템을 구분해 볼 수 있다. 아니면 H/W환경이나 DBMS에 따라 별도의 시스템으로 구분하는 방법도 있을 것이다. 또한 협의로 본다면 같은 OLTP내에서도 '인사, 회계, …'와 같이 서브시스템별로 나눈 각각을 내부로 생각할 수도 있다.
그러나 외부 엔터티란 우리 중의 누구도 관리하거나 책임질 필요가 없으며, 우리가 관리하는 어떤 ERD에서도 소유주가 존재하지 않는 그야말로 우리가 아닌 제3자가 관리하는 엔터티란 의미가 숨어 있다. 이 외부 엔터티는 우리가 소유하고 있는 엔터티가 아니므로 나중에 구현 단계에 가서라도 직접 릴레이션쉽을 가지고 액세스 할 수 없는 엔터티라는 의미도 같이 포함되어 있다.



  1.6.3 가상(pseudo) 엔터티
가상 엔터티란 말 그대로 상상 속에서 존재한다는, 다시 말해서 개념적으로만 존재하는 엔터티를 말한다. 우리가 사는 세상에도 따지고 보면 물리적으로 공간을 차지하고 있지는 않지만 개념적으로만 존재하는 것들이 생각보다 매우 많이 있다. 반드시 눈으로 보여져야, 손으로 만질 수 있어야 존재하는 것은 아니다.





  1.6.4 대체(substitute) 엔터티
대체 엔터티란 야구에서 사용하는 '대타'나 '대주자', 혹은 조립공정을 가진 생산라인에서 주로 사용하는 '대체 자재'라는 개념과 매우 유사하다. 이들이 가지고 있는 공통적인 특성은 동일한 하나의 역할을 위해서 한 가지 이상의 실체가 존재할 수 있다는 것이다.


  1.6.4.1 대체 엔터티 - 대안수립용
가령 A~I까지 9개의 엔터티로 구성된 데이터 모델이 있다고 가정해 보자. 그런데 A엔터티 대신에 A´로 하는 것도 생각해 볼 수 있고, B엔터티를 B´로 하는 경우에 대해서도 충분히 검토할 가치가 있다고 가정하자. 대신 생각을 단순하게 하기 위하여 나머지 7개의 엔터티는 복수안이 없다고 가정한다. 그러나 이처럼 단 2개의 엔터티가 복수안을 가지고 있다고 하더라도 우리는 총 4벌의 ERD를 추가로 그려야 각각의 경우에 대비할 수 있다.
엔터티가 단 9개뿐인 ERD 에서 2개 엔터티만 복수안을 가지고 있어도 이러할진대 수백 개의 엔터티를 가지고 있으면서 수십 개의 엔터티가 여러 개의 대안을 가지고 있다면 도대체 몇 벌의 ERD가 필요하겠는가?
이와 같은 경우 대표되는 9개의 엔터티를 선정하고, A' 및 B'는 대안으로서 관리하면 한벌의 ERD만 가지고서 각각의 경우에 대처 할 수 있을 것이다.



  1.6.4.2 대체 엔터티 - 엔터티 형태 일부 조정 시


어떤 논리적 모델링을 가지고 다음 단계인 데이터베이스 설계 단계에서 분산 시스템으로 설계하여야 한다고 가정해 보자. 데이터베이스 설계 단계에서는 시스템의 물리적인 요소들을 감안해야 하고 해당 노드의 특성도 반영되어야 하므로 그림 우측처럼 각 노드별로 가져 갈 속성과 개체집합의 범위가 서로 다르게 결정되기로 했다고 가정하자.
이때 우리가 취할 수 있는 방법은 크게 두 가지가 있다.
첫 번째 방법은 데이터 모델에서는 하나의 엔터티만 정의하고 데이터베이스 설계 단계에서 노드별로 서로 다르게 테이블을 정의하는 것이다.
두 번째 방법은 지금 설명하고자 하는 대체 엔터티를 활용하는 방법이다. 데이터 모델링 단계에서 미리 각 노드별 특성을 감안하여 각 노드별로 대체 엔터티를 메달아 두는 방법이다. 이 대체 엔터티는 원래의 엔터티와 동일한 집합일 수도 있지만 자기만 필요한 속성(가로)과 개체(세로)들로 구성할 수가 있다.
마찬가지로 방법으로 우측 하단에 있는 대체 엔터티는 요즈음 고객관리를 위해 많이 활용하고 있는 콜센터나 고객지원센터 시스템에서 발생할 수 있는 예제이다. 대부분의 회사에는 이처럼 이미 특수한 목적을 위해 존재하는 시스템이 있는데 대개의 경우 기존과는 조금 다른 아키텍처로 구축되어 있는 경우가 많다. 물론 새로운 통합 데이터 모델을 사용하도록 시스템을 변경할 수도 있겠지만 만약 특별한 제한요소가 있다면 어쩔 수 없이 그들만의 고유한 엔터티를 생성할 수 밖에 없을 것이다. 이러한 경우에도 별도의 ERD를 작성할 필요 없이 대체 엔터티를 활용함으로써 쉽게 해결할 수 있다






  1.6.4.3 대체엔터티-서브타입의 상세표현


이 활용 형태는 데이터 모델을 좀더 명확하게 표현하기 위해 여러 각도에서 바라 본 모습을 각기 다른 엔터티로 그려 볼 때 활용하는 방법이다.
물론 우리는 서브타입세트를 이용하여 하나의 엔터티 내에서도 여러 차원에서 바라 본 데이터 모델을 그려낼 수가 있다. 사실 서브타입세트를 이용하여 여러 각도에서 바라 본 집합의 형태를 표현하는 경우는 다음과 같은 상황일 때 가장 적절하다. 즉, 가장 대표적인 서브타입세트로 전체를 표현했지만 그 중에서 일부분에 대해서는 좀더 상세하게 보강하여 표현하고 싶을 때 이러한 부분만 강조한 서브타입세트를 그리고자 하는 경우이다.
이와는 다르게 만약 모든 유형의 서브타입세트마다 전체 집합을 나타내려 한다면 불가능하지는 않지만 그림이 너무 복잡해지게 될 것이다. 이러한 경우 대체 엔터티를 사용하면 매우 쉽고 단순한 모양으로 표현할 수 있다. 다음 그림은 이런 경우에 대체 엔터티를 사용한 사례를 보여주고 있다.
그림에는 나타나 있듯이 서브타입세트에 따라 데이터 모델을 바라 본 모습이 서로 다른 것을 발견할 수 있다. 각 속성들의 위치 - 즉, 슈퍼타입이나 서브타입에 대한 소속 - 가 서로 달라질 수 있으며, 속성에 붙어 있는 선택사양은 물론 릴레이션쉽 또한 들어오고 나가는 위치가 서로 다르게 표현된다는 것을 알 수 있다.



  1.6.5 추가(additional) 엔터티
추가 엔터티를 활용하는 경우는 크게 세 가지로 나눌 수 있다.
첫 번째는 리버스 모델링에서 현재(as-is) 시스템에는 없지만 리버스를 하는 과정에, 혹은 논리화를 하는 과정에서 앞으로 있어야 할 것으로 예상되는 엔터티가 나타났을 때 이를 일단 정의해 두고 나중에 최종적으로 확정하겠다고 할 때 적용하는 경우이다.
두 번째의 활용 형태는 이미 구축되어 운용되고 있는 시스템의 데이터 모델에 업무의 변화로 인해 데이터 모델의 변경을 시도하는 경우에 활용하는 경우이다. 운용 중인 시스템의 데이터 모델이라면 이미 거기에 있는 엔터티는 확정되어 있는 것들이다. 확정되어 있는 수 많은 엔터티들 사이에 새롭게 정의 - 즉, 추가 - 할 엔터티가 별도의 표시를 가지지 않는다면 뒤섞여 버려서 찾기가 어려워질 것이 틀립없다. 이 엔터티는 아직 완전히 확정이 되지 않았을 뿐이지 결코 가상의 집합이라고는 할 수 없으므로 가상엔터티와는 별도로 관리해야 한다.
활용 형태의 세 번째는 ERP패키지를 도입하여 우리에게 맞도록 데이터 모델을 커스토마이징하는 경우에 적용하는 경우이다. 즉, 패키지에 원래부터 있던 데이터 모델을 기존의 것으로 보고 우리 업무에 맞도록 새롭게 추가한 엔터티들을 추가 엔터티로 표시하는 방법이다. 적용방법은 다르지 않지만 패키지를 도입할 때는 충분히 의미가 있을 것이다.

 

| | 목록으로