데이터베이스

Prisma Relation

realtrynna 2022. 10. 17. 17:58

 

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