본문 바로가기

데이터 Story/모델링 이론

잘못 표현된 관계선 2

 

- 속성으로 관리하려는 관계

- 참조 무결성 제약 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 관계가 존재할 때만 관계선을 표현해야 합니다.