schema 만들기

pengooseDev·2022년 11월 28일
0

우리가 Velog 개발자라고 가정하자.
유저가 글을 포스팅한다.
이에 대한 schema를 어떻게 작성할 것인가?


추상화

유저가 작성한 글에서 우리는 어떤 정보가 필요할까?
수 많은 Post들을 관리하기 위한 고유한 id
다른 유저에게 보여줄 제목인 title
해당 글의 내용인 content
해당 글의 공개여부를 결정하는 published
글쓴이와 해당 유저의 블로그에 들어가면 글을 모아볼 수 있는 author id가 필요할 것이다.

model Post {
  id         Int     @id @default(autoincrement())
  title      String
  content    String?
  published  Boolean @default(false)
  author     User?   @relation(field: [authorId])
  authorId   Int?
}

따라서 Velog는 위와 같은 schema를 데이터베이스에서 사용할 것이다.


참조 무결성(Referential integrity)

관계형 데이터베이스에서 존재하지 않는 id를 참조할 때, 에러가 발생하는 건 너무 직관적으로 받아들여진다.
하지만 PlanetScale은 Scaling에 초점을 두었기 때문에, 참조한 객체의 존재여부를 확인하는 과정이 생략된다.

따라서 PlanetScale에서 참조 무결성(Referential integrity)을 보증하기 위해, Prisma를 컴파일러로 사용할 수 있다.

이에 대한 코드는 아래와 같다.

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["referentialIntegrity"] 
  //1. 다른 객체에 연결할 때, 객체의 존재를 확정받음.
}

datasource db {
  provider             = "mysql"
  url                  = env("DATABASE_URL")
  referentialIntegrity = "prisma" 
  //2. 그 확정을 prisma로 받겠음.
}

schema를 PlanetScale에 push하기

DataBase에서 만들 Schema를 생성했다면, 이를 PlanetScale로 Push해야한다.

  • 터미널에서 PlanetScale의 Database에 연결이 되어있는지 확인.
  • .env에서 올바른 주소 기입하였는지 확인.

npx prisma db push


에러가 난다면?

첫 번째 경우

Prisma의 참조 무결성(referentialIntegrity) 설정을 DB와 connect한 이후 변경했다면, 터미널에서 PlanetScale을 종료한 다음, 재실행 해주어야 한다.

pscale connect {DB이름}


두 번째 경우

Error: Command failed with ENOENT: yarn add @prisma/client@4.6.1
spawn yarn ENOENT

위와 같은 오류가 발생한다면 yarn이 없어 prisma가 PlanetScale에 push를 하지 못하는 경우이다. yarn을 설치해주자.

npm install --global yarn


0개의 댓글