본문 바로가기

데이터 Story/모델링 이론

관계 도출 시 핵심 요소

아래는 관계를 도출할 때 반드시 염두에 두어야 하는 내용입니다.

 

첫째. 속성으로 관리하려는 관계

둘째. 참조 무결성 관계 Referencial Integrity Relationship

셋째. 바로 상위의 1촌 관계

 

당연한 얘기지만 관계선을 표현할 때 최우선으로 고려해야 할 것이 관리하고자 하는 관계인지를 따져야 한다는 것입니다. 간혹 관리하지 않아도 무관한 관계선을 표현하는 예가 있습니다.

 

이는 업무에 관한 얘기이기도 합니다. 데이터로 업무가 틀렸음을 판단할 수 있는 경우가 있습니다. 더 나아가 효율적인 업무도 데이터를 보고 만들 수 있습니다(물론 모델러가 업무의 잘잘못을 따지는 것은 바람직하지 않다고 보며 이와 관련된 논쟁은 약간 소모적인 논쟁이 됩니다). 어쨌든 틀리거나 무의미한 업무에 대해서 검증은 해야 합니다. 이런 과정에서 자주 등장하는 것이 필요 없는 관계선입니다.

 

관리할 필요가 있는 관계인지를 따질 때 추출 관계는 제외해야 합니다. 추출(중복) 관계는 기본적으로 관리할 필요가 없으며 성능 문제가 있을 때에 한해 선택적으로 관리하는 것이 원칙입니다.

 

관계선으로 표현되면 속성이 따라가게 되는데요. 그 속성이 반드시 필요한 속성인지, 없어도 무관한 속성인지를 따지는 것은 좋은 습관입니다. 관계선으로 표현된 속성이 없어도 업무를 하는 데 지장이 없다면 삭제하는 게 맞습니다.

 

두 번째는 참조 무결성Referencial Integrity 입니다. 참조 무결성에 대한 내용은 별도로 설명하겠습니다. 간단하게 설명하면 외래 식별자(Foreign Key) 속성의 값은 상위(부모) 엔터티의 주 식별자 값과 일치하거나 널(Null) 값이어야 한다는 것입니다. 관계선으로 연결된 두 엔터티의 연관된 인스턴스 사이에 일관성을 유지하기 위한 제약입니다.

 

관계를 도출할 때 주의할 세 번째 사항은 1촌 관계인데요. 상위(부모) 하나의 엔터티와의 관계만을 관계선으로 표현해야 합니다. 1촌 관계만을 관계선으로 표현해야 하는데요.

 

관계를 분석할 때 제대로 못 하는 것이 1촌 관계인 바로 위의 부모 엔터티를 파악하지 못하는 것입니다. 바로 위만 정확하면 나머지는 모두 정확해집니다. 때에 따라서는 성능 문제를 해결하기 위해서 바로 위의 관계 이외에도 더 상위(부모) 엔터티와 관계를 관리할 필요도 있습니다. 이를 추출(중복) 관계라고 합니다.

 

[그림1]과 같은 관계가 있다면 ad관계와 bd관계는 추출(중복) 관계입니다. 따라서 D 엔터티의 a 속성, b 속성은 추출(중복) 속성입니다. D 엔터티 입장에서는 바로 위의 상위 엔터티가 C 엔터티이므로 cd관계가 중요합니다. 1촌 관계인 cd관계만 알면 됩니다.


 

[그림1]

 

[그림1] D 엔터티와 같이 상위 엔터티와의 관계를 모두 표현하면 모델의 가독성을 떨어트리게 됩니다. 업무를 파악하는 데 도움을 주는 것이 아니라 방해가 되고요. 굳이 추출(중복) 관계(속성)를 채택해야 하느냐, 정합성을 어떻게 유지하느냐는 논쟁은 자연히 따라다니고요.

 

1촌 관계와 꼭 필요한 관계, RI 관계는 반드시 염두에 두어야 합니다.

 

 

 


'데이터 Story > 모델링 이론' 카테고리의 다른 글

잘못 표현된 관계선 2  (0) 2011.02.16
잘못 표현된 관계선 1  (4) 2011.02.16
관계선이 의미하는 것  (4) 2011.02.16
종속 관계와 참조 관계  (7) 2011.02.16
관계란?  (0) 2011.02.16