이번에는 Type Orm을 이용하여 데이터베이스 테이블 간의 관계 설정과 Join 하는 방법에 대해 알아보겠다. TypeORM에서는 다른 Entitiy와 관계를 설정할 수 있는 방법을 지원하고 있다. 만약 프로젝트를 진행할 때 synchronize 방식으로 데이터 베이스와 연결하여 테이블을 생성한다면 더더욱 Type ORM 관계 설정에 대해서 더 잘 알아야 한다.
상위 관계는 하나의 workspaces(회사 단위)에 여러 개의 channels(채널)이 존재한다. 1:N의 관계의 설정이다.
내부 속성에 대해서 알아보면 @OneToMany에는 workspaces에서 향하고 있는 테이블을 적어 놓으며, @ManyToOne 테이블의 channel에는 @OneToMany의 속성 반대로 넣어주면 된다.
JoinColumn을 붙여줘야 하는데 관계에서 어디에 위치하든 상관이 없지만 보통 foreign key가 있는 곳에 위치한다. 따라서 상위 상황에서는 channel에 JoinColumn이 위치했고 foreign key 정보가 들어있다. name에는 foreign key 이름을 적어주고, referencedColumnName에는 foreign key가 향하고 있는 Workspaces column을 적어주면 된다. 이렇게 해주면 자동으로 join을 해준다.
하단의 관계는 사용자는 여러 개의 workspace에 들어갈 수 있고 한 workspace에는 여러 사용자가 있을 수 있는 상황이다.#### Users
N : N 관계에서는 JoinTable을 사용해야 한다. N : N 관계이기 때문에 중간 테이블이 생성된다. 따라서 name에는 중간 테이블명을 넣어놓아야 한다. JoinColumn과 InverseJoinColumn이 바뀌면 에러가 발생할 수도 있다. 되도록 InverseJoinColumn은 참조하는 테이블을 넣어주고 JoinColumn은 현재 위치한 테이블을 넣어준다. 이거는 규칙처럼 생각하면 된다.
N : N 관계에서 보통 버그가 자주 발생한다. 그렇다면, 1:N 두개로 나뉘는 방법을 시도하는 것이 좋다. 그렇지만 join 할 때 좀 더 편하기 위해서 N : N 관계를 설정한다.