_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › 개체집합에대하여..
|
|
이제 데이터 모델링을 위해 알아보아야 할 것들을 모두 알아보았다. 다른 필요한 것들은 데이터베이스론 서적을 참고하여야 할 것이다. 이제 우리는 개체집합, 관계집합, 속성집합에 대해서 자세히 알아볼 것이다. 또한 여러 가지 모델링 기법에 대해서도 알아볼 것이다. 먼저 개체집합에 대해서 알아보도록 하자.
[edit]
1 개체와 개체집합 #개체(Entity) 또는 객체(Object)는 객체지향의 개념에서 빠져서는 안될 중요한 개념이다. 간단하게 그림을 보면 개체와 개체집합에 대해서 쉽게 설명할 수 있다.
![]() 사원번호가 ‘PMA42628M’인 사원은 하나의 개체이다. 또한 사원번호가 ‘VPA30890F’인 사원도 하나의 개체이다. 즉, 이러한 개체들의 모임이 바로 ‘개체집합’인 것이다. 여기서 알아야 할 것은 ‘집합’이다. 단순히 ‘~~의 모임’ 이 되어서는 안 된다. 우리는 수학시간에 집합에 대해서 다음과 같은 문제를 접하고는 했다.
1. 키가 180Cm 이상인 사람들의 모임
2. 키 큰 사람들의 모임 이 두 문장을 가지고 개체집합의 개념을 알아보도록 하겠다. 수학시간에 배운 바로는 1은 집합이며, 2는 집합이 아니다라고 배웠다. 맞다. 그렇다면 우리가 앞서 살펴본 “사원”은 개체집합인가? “창문 밖에 지나가는 30대 가량으로 보이는 정장차림의 남자”는 사원인가? 섣불리 대답을 못할 것이다. 답을 못하는 이유는 집합의 정의처럼 “조건”을 제시하지 않았기 때문이다. 그렇다면 “OO 주식회사의 사원번호를 부여 받은 주민등록번호가 있는 국내거주자”라고 한다면 밖에 지나가는 남자가 사원인지 아닌지를 알 수 있을 것이다. 물론 필자가 이야기한 조건도 부족할 수도 있다. 이러한 조건들을 사용자들의 머리 속에서 끄집어 내어 정리하는 것이 바로 모델링이다.
[edit]
2 개념의 범위를 정하라 #데이터 모델링의 핵심기법은 “개념의 범위를 정의하는 것” 이다. 개체집합이건 관계집합이건 개념의 범위가 정해지면 그것으로 추상화는 끝이다. 이러한 개념의 범위에서 그래픽적인 요소를 가미하여 데이터 모델은 표현된다. 가장 큰 개념의 범위는 시스템을 구축하고자 하는 조직이다. 물론 내/외부 환경적인 요인이 개념의 범위에 필요할 수도 있다. 그러므로 시스템화 하고자 하는 범위가 개념의 가장 큰 범위가 된다. 모든 관점은 해당 조직에서의 개념이 된다.
![]()
물론 쓰여져 있는 담배의 개념보다 더 구체적으로 정의되었다고 가정하자. 이것은 담배를 제조/판매하는 조직에서 본 관점일 것이다. 그렇다면 다음과 같은 정의를 가지는 “담배”는 이 조직에서 담배일까? "쌍떡잎 식물 통화식물목 가지과의 여러해살이풀" [edit]
3 개체집합의 개념 #이제 본격적으로 개체집합의 개념을 살펴보도록 하겠다. 개체집합의 선정 과정은 매우 중요한 과정이다. 물론 시스템을 구성하는 모든 요소가 중요하기는 하지만 개체집합에 1%의 중요성을 더 주고 싶다. 그 이유는 모든 데이터가 원천적으로 담겨질 곳을 설계하는 것이기 때문이다. 개체집합을 어떻게 정의하느냐에 따라서 모델의 모양이 틀려진다. 이에 대해서는 나중에 관계집합을 다루는 부분에서 살펴보도록 하겠다. 우선 다음의 그림을 보도록 하자. A라는 제조업체의 “사원” 개체집합이다.
![]() 위 그림은 “사원” 개체집합을 나타내는 그림이다. 아래의 사람 모양의 그림은 실제로 구현된(어커런스, 인스턴스) 것을 나타낸다. 소속부서의 경우는 개체집합의 한 요소가 아닌 관계의 표현이다. 이에 대해서도 역시 관계집합에서 다루도록 하겠다. 우선은 개체집합의 개념에 집중을 하도록 하자.
“한 조직(기업) 내에서 존재하는”의 뜻은 가장 큰 도메인을 나타낸다. 만약 ‘이재학’, ‘나병우’를 해당 기업의 관점이 아닌 자동차 영업 사원의 관점에서 본다면 “고객” 개체집합이 될 수 있다. 물론 고객의 정의를 “자동차를 살 수 있는 운전 면허가 있는 국내/외 성인 남/여” 쯤으로 정의했을 때이다. 이처럼 도메인에 따라서 개체집합의 정의가 틀려질 수 있기 때문에 개념의 범위를 한정 지은 것이다.
필자가 보기에는 매우 명확한 정의라 생각된다. 개체집합은 위에서 이야기한 개체집합의 정의에 따라 다음의 물음에 명확히 답할 수 있어야 한다.
다음의 예를 보자.
라이터 가게에서 정보시스템을 도입하려 한다. 그러면 해당 조직에서만 필요한 데이터가 있다는 것이다. 라이터 가게의 관계자 이외의 사람들이 과연 제품명, 원산지 등에 관심이 있겠냐는 것이다. 철저히 개념의 범위를 좁혀야 한다. 만약 우리나라의 대부분의 국민들이 애국심이 너무나도 뛰어나 국산품을 매우 애용한다면 원산지에 대한 정보는 다른 사람들에게도 매우 중요한 데이터가 될 것이다. ![]() 위 그림은 두 개 이상의 개체와 항목에 대한 내용이다. 만약 “제조일”만 있다고 생각하여 보자. 제조일만 보면 도저히 어떤 것에 대한 제조일을 나타내는지 알 수가 없다. 즉, 항목이 한 개밖에 없다면 의미를 알 수 없다는 뜻이다. 제품이 “불티나”만 있다면 관리해야 할 필요성이 있을까? 당연히 관리해야 할 필요성은 없다. 그러므로 개체집합은 두 개 이상의 항목과 두 개 이상의 개체가 있어야 개체집합으로써의 자격이 될 수 있다는 것이다.
![]() 모두 같은 라이터라고 볼 수 있는가? 그림만을 가지고 볼 때 이것을 모두 같은 라이터라고 묻는다면 비율을 어떻게 될지 몰라도 O, X로 분류될 수 있을 것이다. 역시 이렇게 나뉘는 이유는 도메인이 정확하지 않기 때문이다. “불만 켜지면 모두 라이터다” 라고 한다면 그림에는 없지만 가스레인지도 라이터다. 주로 담뱃불을 붙일 때 사용된다고 한다면 역시 가스레인지도 경우에 따라 라이터가 될 수 있다. 가스레인지로 담뱃불을 붙여본 사람은 알 것이다. (적어도 필자는 그렇게 했다) 애매모호하다면 개체집합의 정의가 부실한 것이다. 그러므로 무언가 석연치 않다면 개체집합의 정의를 더욱 명확히 내릴 필요가 있다는 뜻이 된다. 개체집합의 정의를 명확히 내릴수록 구체화되며, 개체집합의 정의가 덜 명확할수록 추상화 레벨은 높아진다.
[edit]
4 개체집합을 선정하기 어려운 이유 #실제로 개체집합을 도출하는 과정은 매우 힘든 과정이다. 모델러는 모든 업무를 알 수 없기 때문에 사용자의 머리 속에서 또는 기존의 시스템과 문서들을 통해 모델을 완성하기 위한 개체집합을 도출해야 하기 때문이다. 그러나 이 또한 체계적인 방법을 가지고 접근한다면 그리 어려울 것도 없다. 단지 체계적인 단계를 거치면서 각 단계를 충실히 수행하는 것이 중요하다. 다음은 개체집합을 도출하는데 어려운 이유이다.
매입입력
(등록자, 등록일자, 매입번호, 매입일자, 업체코드, 업체명, 품목, 구분, 매입금액, 지급금액, 지급예정일, 미지급잔액, 계산서여부, 최종수정자, 최종수정일자, 수정내용, 수정종류) * 밑줄은 기본키를 나타낸다. 릴레이션명(개념적 : 개체집합, 물리적 : 테이블)을 보아도 벌써 데이터 모델에 “처리”가 들어간 것을 볼 수 있다. 아마도 해당 조직에서 사용하는 문서에 나오는 항목들을 모조리 기술했다고 할 수 있을 것이다. 다른 릴레이션을 보아도 똑같을 것이다. 실제 구현된 테이블은 분명히 처리의 흐름에 따라서 그려져 있을 것이고, 엄청난 데이터의 중복이 있었을 것이다. 이러한 “처리”는 데이터 모델의 매우 큰 적이다. 데이터 모델은 정적이다. 그러므로 시간의 흐름에 따른 처리에 대한 내용은 포함되어서는 안 된다. 시간은 이력관리를 고려할 때나 나와야 한다.
[edit]
5 문제점이 있는 ERD의 예 #다음은 ERD의 한 예이다.
![]() 그림을 보면 “소유자”, “노동자”, “조종사”는 “사람” 개체집합으로 일반화되었다. 일단 살펴보아야 할 것은 “사람” 개체집합의 개념이 너무 넓지 않은가를 살펴보아야 한다. 중요한 것은 “소유자”는 관계집합이지 개체집합이 아니라는 것이다. “소유자”의 개념은 “고객” 이 될 것이다. 그리고 “조종사”의 개념도 애매모호하기 짝이 없다. “비행기”를 소유하고 있는 사람도 비행기를 조종할 수 있고, 조종하지 않을 수도 있다. 그러므로 “조종사”의 개념의 범위와 “소유자”의 개념의 범위는 중첩된다. 만약 비행기를 가지고 있으나 조종을 하지 못하는 “고객”을 위해 해당 조직에서 “조종사”를 제공해 준다면 “노동자”, “조종사”는 아마도 “사원”쯤으로 봐도 될 것이다. “비행기”의 경우 세상의 모든 비행기가 관리대상인지 특정 지역의 비행기가 관리대상인지 등에 대한 개념의 범위가 확정되어야 할 것이다. 관리 대상의 범위가 너무 넓으면 의미가 희석되어 프로젝트 진행에 혼란을 가져온다. 위 ERD는 어느 책에서 발췌한 것이다. 애매모호하기 짝이 없는 데이터 모델이다. 이러한 상태로 개발이 이루어진다면 예상보다 긴 프로젝트가 될 가망성이 매우 높다.
|
가시에 찔리지 않고서는 장미를 모을 수 없다. (핀페이) |