과제 하면서 고민하게 만들었던 부분을 기록하려 한다.
오늘은 prisma에서 외부 테이블의 기본키를 참조할 때,
하나의 기본키로 외부의 테이블에 두 개의 외래키를 지정하는 방식을 다룰 것이다.
ERD로 먼저 보면 아래와 같다.
Users 테이블과 Follow 테이블은 1:N 관계이며,
Follow의 followerId와 followingId는 Users테이블의 userId를 참조한다.
이처럼 만든 이유는 user가 탈퇴하였을 경우 follow테이블에 있는 팔로워와 팔로잉도 함께 삭제되어야 하기 때문.
두 개의 외래키가 하나의 기본키를 참조하도록 하려는데 여기저기 찾아봤지만 내 상황에 딱 맞는 해결법은 나오지 않아서, 참조하는 여러 방법들을 하나하나 찾아보고 조합해서 사용해보았다.
// Users Table model model Users { ... ... follower Follow[] @relation("follower") following Follow[] @relation("following") } // Follow Table model model Follow { ... ... follower Users @relation("follower", fields: [followerId], references: [userId], onDelete: Cascade) following Users @relation("following", fields: [followingId], references: [userId], onDelete: Cascade) }
위처럼 Users 테이블에는 각각 follower, following 이라는 이름을 사용하여 Follow와의 관계를 정의해주고, @relation 애너테이션을 통해 이름을 지정해준다.
그 후,
Follow 테이블에서 follower와 following을 사용해 Users와 관계를 정의하면서,
기본적으로 사용하던 @relation 애너테이션에 fields 앞에
Users 테이블에서 지정한 이름과 동일하게 "follower", "following" 이름을 지정해준다.
이렇게 하면 Users와 Follow의 1:N 관계가 정의되고,
우리가 원하던 Users 테이블의 기본키를 가지고 Follow 테이블의 외래키를 두 개 설정해 줄 수 있다.