요즘 정말 많이 듣는 말은 데이터 중복을 없애 달라는 내용입니다. 데이터베이스를 사용한다고 하면 데이터의 중복을 없애고 공통 데이터를 뽑아 모델링 해달라고 합니다. 그런데, 이렇게 중복을 제거하고 공통화 하는데에도 두가지 정도의 수준이 있을 수 있습니다. 오늘은 이에 대해서 살펴 보겠습니다.
데이터가 중복된 형태는 아래와 같이 나타납니다.
대출 엔터티에도 반납 엔터티에도 신청한 사람의 성명과 회원번호 그리고 연락처가 나타납니다. 컬럼이 중복되니 이것을 공통 데이터 즉 중복제거의 대상으로 뽑을 수 있겠지요.
간단하게 컬럼의 중복 만을 제거하면 아래와 같이 서브타입으로 만들 수 있습니다.
서브타입에 대해서는 (서브타입 사용하기) 라는 이전글을 참고하세요.
이것은 성명과 회원번호가 여러개의 테이블에 산재되어 있지 않게 되었기 때문에 확실히 컬럼 수준의 정리는 되었다고 할 수 있습니다. 그러나 이 모델에 들어갈 데이터를 잘 생각 해 보면, 데이터 수준에서는 중복이 있다는 것을 알 수 있습니다. 한 사람이 여러번 대출을 하고, 또 여러번 반납을 하는 경우 그 누적 횟수만큼 고스란히 그 신청장의 정보가 쌓이게 됩니다. 실제 한 사람인데도 중복된 데이터가 들어가게 되는 것이죠.
그런데 한 사람에 대한 데이터는 한 건만 쌓이도록 관리하고 싶다면, 아래와 같이 모델링 할 수 있구요, 이제는 데이터 수준까지 중복이 제거되었다고 할 수 있게 됩니다.
이렇게 되면 물리적인 회원의 최종적인 성명과 회원번호 한건씩만 데이터가 존재하게 되어 언제나 최종의 회원정보를 볼 수 있게 되는 장점이 있습니다. 하지만 이것이 도리어 단점이 될 수도 있는것이, 10년전의 대출건을 조회하더라도 홍길동 씨의 당시 연락처는 없이 현재의 연락처가 보이게 되니까요.
따라서 이러한 모습(마지막 데이터 수준의 중복제거형태)으로 모델링 하는 것이 언제나 정답은 아닙니다. 상황에 따라서 업무처리 당시의 신청자 정보가 남아있어야 하는 경우는 서브타입 형태의 모델이 더 적절할 수도 있거든요.
그러니 언제나 데이터 모델을 작성할 때는 '중복의 제거' 또는 '공통 데이터 도출'이라고 단순하게 말하지 말고, 정말 필요한 수준이 무엇인지 따져보는 자세가 필요합니다.
'Data Modeling' 카테고리의 다른 글
속성이냐 엔터티냐 (0) | 2013.05.10 |
---|---|
서브타입 해체하기 (0) | 2013.05.01 |
이력 데이터 관리하기 (4) | 2013.04.24 |
서브타입 사용하기 (0) | 2013.04.13 |
엔터티 분할하기 (0) | 2013.04.06 |