- 속성으로 관리하려는 관계
- 참조 무결성 제약 Referencial Integrity Constraints
- 바로 상위의 1촌 관계
계속 강조하고 있는 위의 요소는 사실 참조 무결성 제약이 존재할 때만 관계선으로 표현해야 한다는 것으로 간단히 설명할 수 있습니다.
이번 글은 잘못 표현된 관계를 RI 관점에서 살펴보도록 하겠습니다.
[그림1] 모델에서 외국인 고객은 고객 엔터티에 통합되지 않고 별개로 관리되고 있습니다. 이 모델에서 외국인거래 엔터티는 외국인이 거래한 데이터를 관리하는 엔터티이므로 b관계는 꼭 필요한 맞는 관계입니다. 1촌 관계이고요.
[그림1]
그런데 b관계로 표현하지 않고 a관계로 표현하면 잘못된 관계입니다. 식별자(PK)가 같아서 무심코 표현한 것이죠. 고객 엔터티와 외국인거래 엔터티의 관계인 a관계는 RI 관계가 아닙니다. 실제 데이터는 아래 릴레이션과 같이 관리됩니다.
[외국인고객]
#고객번호 |
123 |
234 |
345 |
456 |
567 |
[외국인거래]
#거래번호 |
고객번호 |
00001 |
123 |
00002 |
234 |
00003 |
345 |
[고객]
#고객번호 |
987 |
876 |
654 |
외국인거래 엔터티의 고객번호 데이터는 외국인고객 엔터티에만 존재하며 고객 엔터티에는 존재하지 않습니다. 따라서 고객 엔터티와는 RI 관계가 없는 것입니다.
만약 외국인 고객이 고객 엔터티에 통합된다면 위의 모델은 [그림2]와 유사해집니다. [그림2]에서 b관계는 1촌 관계고 RI 관계입니다. 그런데 a관계는 일단 2촌 관계입니다.
[그림2]
그리고 업무 규칙과 달리 아래와 같은 릴레이션이 생길 수 있기 때문에(a관계가 아래 ‘00004’ 거래 데이터를 묵인하는 결과) a관계는 잘못된 관계입니다.
[외국인고객]
#고객번호 |
123 |
234 |
345 |
456 |
567 |
[외국인거래]
#거래번호 |
고객번호 |
00001 |
123 |
00002 |
234 |
00003 |
345 |
00004 |
987 |
[고객]
#고객번호 |
987 |
876 |
654 |
단순히 추출 관계로만 관리하려면 ‘987’ 인스턴스가 생기지 않도록 체크를 해야 합니다. 하지만 이런 정합성을 맞추는 것은 대단히 어렵습니다. 성능 상 불가피할 때만 a관계를 추출 관계로 채택해야지 아무 때나 채택하는 것은 좋지 않습니다.
엔터티에 존재하는 데이터를 기준으로 RI 관계를 따져 RI 관계가 존재할 때만 관계선을 표현해야 합니다.
'데이터 Story > 모델링 이론' 카테고리의 다른 글
다수의 관계 속성 & 하나의 관계 엔터티 (0) | 2011.02.17 |
---|---|
관계가 쉬워진 Turning Point (0) | 2011.02.17 |
잘못 표현된 관계선 1 (4) | 2011.02.16 |
관계 도출 시 핵심 요소 (0) | 2011.02.16 |
관계선이 의미하는 것 (4) | 2011.02.16 |