테이블 설계, ORM - TypeORM, Prisma

강준호·2024년 2월 16일

NodeJs

목록 보기
3/7

Redis - 메모리 에 저장하는 데이터베이스. 컴퓨터 전원이 꺼지면, 날라가. But 읽고 쓰기가 매우 빨라.

FireStore, MongoDB - 도큐먼트 기반

Redis - 값으로 JSON 도 넣을 수 있고 편하게 쓸 수 있음.


설치

npm i pg
npm i @types/pg
npm i typeorm

ORM

  • 레코드, 인스턴스를 프로그래밍의 객체로 가져와준다.

prisma

설치

npm install bcrypt
npm i -D @types/bcrypt
$ npm install prisma @prisma/client
$ npx prisma init
> format document 에서 prisma 포멧 추가

사용

migration

  • 작업이 시간대별로 남아있음.
npx prisma migrate dev

2가지를 업데이트 해줌.(db 업데이트와, 타입)

npx prisma generate
  • 타입만 업데이트 해주는것

  • 스키마에 적혀있는 내용을 그대로 타입을 generate 해줌.

만약! 타입이 좀 안맞는거 같으면

=> nodemodules 에 프리즈마 지우고 npx prisma generate 로 타입 다시 설정


프리즈마의 기능

  1. 프리즈마 클라이언트
  2. 마이그레이트
  3. 스튜디오

1대1 1대 N , N:M

1:1

  • 종속적인 애(user profile)가 주된 레코드(user)를 관리해.
  • 마치 부하가 주인꺼 짐 드는마냥.
  • 외래키를 설정해 줄 수 있는데, 이때 CASCADE 를 설정할 수 있어.

1: N

  • 한명이 여려명 이름 외우는건 어려워. N 에 1의 정보를 저장하는게 효율적이야.

N:M

  • 이 경우 N(User) or M(Post) 에 저장하는건 컬럼을 계속 추가해야하거나, 배열로 관리하는것. 매우 비효율적

  • 중간에 별도의 테이블을 하나 만들어.(좋아요를 저장하는) 컬럼을 최소 두개만들어. (userId, postId)

  • 프리즈마는 이 중간 테이블을 알아서 만들어줘.

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id                Int          @id @default(autoincrement())
  email             String       @unique
  encryptedPassword String
  createdAt         DateTime     @default(now())
  profile           UserProfile? // 종이되는건 처음에 없어도 되서 ? 달아줌.
}

model UserProfile {
  id          Int     @id @default(autoincrement())
  nicckname   String?
  name        String?
  gender      String?
  age         Int?
  phoneNumber String?
  address     String?
  user        User    @relation(fields: [userId], references: [id]) //종이되는 녀석에 주를 연결해주고. 주의 타입까지만 쓰면 자동으로 틀이 생겨.
  userId      Int     @unique //1대1 관계로  확실하게 인식하려면 unique 
}
  • 프로필 create로 만들때 같이 만들겠다 하면 profil: {create: {에 넣기}}

오류 터져도 서버 살리기

  • NextFuntion
    next(e)

0개의 댓글