본문 바로가기

DB

데이터베이스 식별, 비식별 관계

식별 관계와 비식별 관계란 무엇을 의미하는가?

예를 들어, 축구팀 엔티티와 축구선수 엔티티가 있다. 축구팀은 여러 명의 축구선수를 소유할 수 있으며, 축구선수는 하나의 축구팀에게 소속된다. 하지만 축구선수는 축구팀이 없어도 존재할 수 있다. 소속이 없는 선수의 경우에 말이다. 그러므로 이때 축구선수와 축구화의 관계는 비식별 관계라고 할 수 있다. 이제 축구선수 엔티티와 선수 기록 엔티티를 예를 들어보자. 선수 기록은 축구선수 없이 존재할 수가 없다. 그러므로 축구선수와 선수 기록 간의 관계는 식별 관계이다.

데이터베이스 관점에서 다시 말해보면

식별 관계에서 부모 엔티티의 기본키는 자식 엔티티에 꼭 포함되어 있으며 항상 기본키로 사용된다. 반면에 비식별 관계에서는 부모 엔티티의 기본키가 자식 엔티티에 포함되어 있지만 기본키로 사용되지는 않는다.

더 나아가

또한 비식별자 관계는 optional, mandatory 두 가지로 다시 나누어질 수 있다. optional 한 관계에서는 자식 테이블로 들어가 있는 속성이 null을 허용한다. 반면에 mandatory 한 관계에서는 null을 허용하지 않는다.

꼭 그래야 만 하는지 생각해보기

만약 비식별 관계에서 식별 관계를 사용하게 되면 어떻게 되는가? 

먼저 부모 테이블과 관계없는 데이터의 삽입 삭제가 어려워질 것이다. 이적시장에서 무소속 선수를 먼저 데이터에 넣으려고 하는데 식별 관계로 되어 있다면 부모 테이블(팀)의 기본키가 필요하기 때문이다. 프런트단에서 생각해 보아도 화면이 항상 팀의 정보를 가지고 있는 동시에 축구선수를 삽입해야 해서 부담감이 증가하게 될 것 같다.  

반대로 식별관계에서 비식별을 사용하게 되면 어떻게 되는가?

선수 기록을 추가해야 할 때 대상자인 축구선수가 필요하다. 그런데 비식별 관계를 사용하게 된다면 축구선수가 없이도 선수의 기록이 들어가게 될 위험성이 있다. 

 

 

'DB' 카테고리의 다른 글

몽구스 여러개의 조건으로 다큐먼트 찾기  (0) 2019.06.16