1 분 소요

ORM 🙀

ORM : Object-relational-mapping의 약어로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것이다.
데이터베이스 데이터 ⬅️ 매핑 ➡️ Object 필드
class User extends Model {}
User.init(
  {
    username: DataTypes.STRING,
    birthday: DataTypes.DATE,
  },
  { sequelize, modelName: "user" }
);

ORM 중 하나인 sequelize 의 문법이다.

username, birtday라는 속성이 있으며 이것들의 데이터타입은 각각 string과 date다.

이것은 database관점으로 username, birtday라는 field가 있고 string과 date의 타입을 가진다고 생각하면된다.


Migrations : 코드로 작성한 클래스를 실제 데이터베이스에 테이블로 옮기는 과정

모델을 생성하면 ORM이 migration 파일을 생성하고, migration 파일이 데이터베이스에 적용된다. ORM에서는 데이터베이스의 구조를 migration file들을 통해 주로 관리함

Prisma 🙀

Prisma : nodejs환경에서 데이터베이스에 대한 접근을 쉽게 도와주는 소프트웨어로 기존의 ORM들과는 다르게 GraphQL를 사용하여 격이다른 생산성을 보여준다.
Prisma를 다운받고 활용해보자


npm install prisma --save-dev ➡️ 설치

npm install @prisma/client --save ➡️ 설치

npm install dotenv -D ➡️ 환경변수 사용가능

npx prisma ➡️ 잘깔렸으면 명령어 나옴

npx prisma init ➡️ 초기셋팅 명령어

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
mysql로 바꿔주기
DATABASE_URL="mysql://root:비밀번호@localhost:3306/prisma"
.env에서 url바꿔주기


SHOW GLOBAL VARIABLES LIKE 'PORT'; ➡️ mysql에서 port번호 찾기

npx prisma migrate dev --name init ➡️ schema.prisma에서 table을 만들고나서 명령어실행하면 db에 연동됨


model categories {
  id     Int      @id @default(autoincrement())
  name   String
  drinks drinks[]
}

model drinks {
  id            Int             @id @default(autoincrement())
  korean_name   String
  english_name  String
  drink_info    String
  is_new        Boolean
  category_id   Int
  categories    categories      @relation(fields: [category_id], references: [id])
  likeBool      likeBool[]
  images        images[]
  allergy_drink allergy_drink[]
  nutrients     nutrients[]
}

model users {
  id            Int     @id @default(autoincrement())
  email         String  @unique
  password      String
  username      String?
  address       String?
  phone_number  String?
  policy_agreed Boolean @default(true)
}
prisma object로 table생성


npm i -D prettier-plugin-prisma

명령어를 사용하여 설치하면 참조당하는 곳에

‘참조하는 테이블’ ‘참조하는 테이블’ [] 이라고 쓰면 자동으로 FK가 설정된다..

업데이트: