꿀팁,참고

240708 TIL - 오십여섯번째날 스키마. 프리즈마

8나지 2024. 7. 8. 15:27
주제1 스키마. 프리즈마
작성이유 참고하기 위해

 

문제상황

상황 프리즈마.스키마 사용방법

DBMS
: 데이터베이스 관리 시스템 - (MySQL, PostgresQL, MS-SQL, Oracle 등.. 그걸 편리하게 사용하게 해주는 prisma)

Orm : 필드명 테이블 명을 변경해서 디비에 요청 => 우리가 테이블과 필드명을 굳이 하지 않아도 됨 (프리즈마 : ORM중 하나)
;

  1. 설계를 orm이 알 수 있도록 동기화 해야함 => 디비에 있는 것을 orm에 알려주는 것
  2. 프리즈마로 설계문서(청사진) 대로 디비에 반영할 것 => 자동으로 결국 디비에 있는 것을 내 orm에게 동기화 할 수 있도록 하는 것과 2번 방법이 다름
    => orm과 디비를 동기화 해야함
사용방법
설치

Prisma

https://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-postgresql

이미 DB 에 table 이 존재할 경우 반영

prisma cli 설치

command line 에서 prisma 관련 명령을 실행 하는 기능 제공 : yarn add prisma
설치 확인 : npx prisma

프로젝트에 prisma 초기화
- .env 에 database 환경변수 추가 됨
- 이후 설치되고, 프로젝트에서 사용될 prisma client 를 사용하기 위한 설정 파일 생성 : npx prisma init

DB 정보 작성
- .env 에 database 정보 작성
DB type 수정
- schema.prisma 에서 사용할 DB type 수정 : ./prisma/schema.prisma 의 db->provider 를 mysql 로 수정
원격의 db 구조를 프로젝트에 끌어오기
- schemas.prisma 에 db 의 table 구조가 자동 작성됨 : npx prisma db pull
@prisma/client 설치
- 프로젝트 코드에서 실제로 사용할 패키지 설치 : yarn add @prisma/client
prisma client 에 schema.prisma 적용 : npx prisma generate

해결방법 풀이
그 외 오류 났을 때 
예시 : petSitter PetSitter @relation(fields: [sitterId], references: [id])

스키마.프리즈마 관계설정 할 때


이 스키마 정의에서 `petSitter`와 `PetSitter`는 다른 용도로 사용되고 있습니다.

- `petSitter`는 데이터베이스 테이블 이름을 나타냅니다. 일반적으로 데이터베이스 테이블 이름은 소문자와 언더스코어로 작성합니다.[5]

- `PetSitter`는 Prisma 클라이언트에서 사용할 모델 이름을 나타냅니다. 모델 이름은 대문자 캐멀 케이스로 작성하는 것이 관례입니다.[5]

따라서 `petSitter`는 실제 데이터베이스 테이블 이름이고, `PetSitter`는 이 테이블에 대응하는 Prisma 모델 이름입니다. 이렇게 다른 네이밍 규칙을 사용하는 이유는 코드 가독성과 일관성을 높이기 위함입니다.


 

 

 


 

npx prisma db push --force-reset

프리즈마 변경시 (npx prisma db push 인데 가끔 잔여 데이터베이스 찌꺼기 같은게 남아있을 경우)