
Prisma Relation
최근 진행한 프로젝트에서 ORM을 도입하지 않아 엄청난 생산성의 저하를 경험하였다. ORM의 여러 가지 강점 중 개인적으로 테이블 간의 참조 관계 설정이 간단하고 관계에 따라 생성되는 메서드를 사용할 수 있다는 부분이 제일 편리하고 생산성이 높아지는 거 같다. 이를 통해 데이터베이스 모델 설계에 집중할 수 있어 여러모로 사용하지 않을 이유가 없다.
1:1(일대일)
양쪽에서 최대 하나의 레코드에 연결 가능하다. 한 명의 사용자는 하나의 프로필을 갖는다.
User(사용자)
사용자는 프로필을 항상 갖지 않아도 되므로 ? 옵셔널로 설정한다.

Profile(프로필)
참조 관계는 @relation 메서드로 설정한다. fields는 외래키(Foreign Key)를 가리키며 references는 참조하고 있는 테이블의 기본키(Primary Key)를 가리킨다. Profile model의 실제 테이블에는 userId 컬럼이 생성된다.

1:N(일대다)
한쪽에서 다수의 레코드에 연결 가능하다. 한 명의 사용자는 여러 개의 게시글을 갖는다.
User(사용자)
사용자는 여러 개의 게시글을 가질 수 있으므로 Post mode의 배열로 넣어준다.

Post(게시글)
Profile과 다르게 사용자가 아닌 경우 게시글을 작성할 수 없으므로 ? 옵셔널을 사용하지 않는다. @relation 메서드로 관계를 설정하며 fields는 외래키(Foreign Key)를 가리키며 references는 참조하고 있는 테이블의 기본키(Primary Key)를 가리킨다. Post model의 실제 테이블에는 userId 컬럼이 생성된다.

N:M(다대다)
한쪽에 있는 N 개 이상의 레코드가 다른 쪽에 있는 N 개 이상의 레코드에 연결될 수 있다. 하나의 게시글은 여러 개의 해시태그를 가질 수 있으며 해시태그 하나는 여러 게시글에 속할 수 있다. 다대다 테이블의 참조 관계는 함축적(Implicit)과 명시적(Explicit) 방법으로 설정할 수 있다.
함축적
각 model의 컬럼 타입을 참조하는 모델의 배열 형태로 설정한다. 함축적 설정은 사용자가 작성한 코드를 바탕으로 실제 테이블을 자동으로 생성하며 @relation 메서드를 통해 생성될 테이블의 이름을 명명할 수 있다. Prisma의 model은 생성되지 않았으므로 기본적인 CRUD 메서드(findUnique, create 등)는 사용할 수 없으나 각 테이블에서 관계 메서드(include)는 사용 가능하다.
Post(게시글)

Hashtag(해시태그)

명시적
Schema에 model을 직접 생성하여 생성된 model을 참조하는 방식이다. Post와 Hashtag model의 @relation 메서드로 각 model의 1:N 관계가 적용되는 HashtagToPost model 과의 관계를 설정한다. model이 생성되었으므로 기본적인 CRUD 메서드(findUnique, create 등)를 사용할 수 있다.

참고 자료
https://www.prisma.io/docs/concepts/components/prisma-schema/relations
'데이터베이스' 카테고리의 다른 글
트랜잭션 격리 수준에 따른 문제점 (0) | 2022.11.14 |
---|---|
MySQL 옵티마이저 (0) | 2022.11.01 |
Prisma (0) | 2022.10.13 |
DBMS (0) | 2022.10.03 |
MySQL 자료형 옵션 (0) | 2022.05.08 |