개발(레거시)/문제 해결

Typeorm 식별 관계 문제

이하눌 2022. 10. 3. 12:23
typeorm을 사용해서 데이터베이스를 구축하는 중에서 식별 관계를 구축하는 과정에서 만난 문제를 해결하는 과정이 담긴 짧은 글

문제의 식별 관계부분

회원과 트레이너가 1대 1로 매칭 되어 트레이닝이 성사된다. 그리고 이 둘이 기본키에 참여하므로 식별 관계이다. 또한 트레이닝이 있어야 기록(식단이나 운동 영상)이 존재하기 때문에 기록은 약 엔티티이다. 다시 말하자면, 기록은 그 자체로서 의미를 가질 수 없다. 왜냐하면 현재 하고 있는 프로젝트 기획에서 트레이닝이 성립돼야 기록을 작성할 수 있기 때문이다. 약한 엔티티는 엔티티를 고유하게 식별하기 위해서 다른 엔티티 타입으로부터 키 속성을 가져온다. 

 

문제

식별관계로 하자니 트레이닝과 기록이 one to many 이기 때문에 결국 기록의 기본 키 집합에 새로운 칼럼을 추가해야 한다. 예를 들어 나는 자동으로 증가하는 정수 id 값을 history_id로 삽입했다. 그렇게 되면 피드백과 one to one 관계에서 ERD는 위와 같이 모든 키를 가져온다. 하지만 typeorm에서는 history_id가 이미 고유하고 최소성을 만족하기 때문에 식별 관계를 설정할 때, FK 겸 PK로 history_id 만 가져오도록 강제한다.

 

해결

시키는 대로 하자..

 

위와 같이 history의 고유성과 최소성만을 만족하는  history_id만 one to one 약 엔티티의 기본키로 설정했다. 

 

회고

위와 같은 상황에서 필수적 비식별관계 (부모 테이블의 PK를 FK를 비식별로 가져와 null 무결성 제약을 건다.)를 사용할 수도 있었을 것 같다. 아직은 속도의 관점에서 모델링을 하는 것은 약한 것 같다.