[ TIL ] [ ์ •๊ทœ๊ณผ์ • : ์ฃผํŠน๊ธฐํ”„๋กœ์ ํŠธ์ฃผ์ฐจ ] PRISMA schema 1:1๊ด€๊ณ„ / 1:N๊ด€๊ณ„

2023. 9. 16. 20:59ใ†0. TiL ( Today I Learned )

์ฃผํŠน๊ธฐ์—์„œ ๋ฐฐ์šด API์ž‘์„ฑ, ๊ทธ๋ฆฌ๊ณ  ERD๋ฅผ ์ œ์ž‘ํ–ˆ๋‹ค. 

๊ต์œก๋ฐ›์„ ๋•Œ๋ณด๋‹ค ํ”„๋กœ์ ํŠธ์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์กฐ๊ธˆ ์ปค์กŒ๋‹ค๊ณ  ๊ทธ๋งŒํผ ์ž‘์„ฑ์—๋„ ์–ด๋ ค์›€์„ ๋А๊ผˆ๋‹ค.

ERD๋„ ์ปฌ๋Ÿผ์ด ๋ช‡ ๊ฐœ ๋” ์ƒ๊ธฐ๋‹ˆ, ์ •๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์ด ์–ด๋””๋กœ ๋˜์–ด์•ผ ํ• ์ง€ ๋ณต์žกํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ, API์ž‘์„ฑ๊ณผ, schema๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ๋„ ๊ณ„์† ๋นˆ ๊ณณ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค.

ํ˜„์—…์— ๊ฐ€๋ฉด ์ด๊ฒƒ๋ณด๋‹ค ๋ช‡ ๋ฐฐ๋Š” ๋” ํฐ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ฒŒ ๋  ๊ฑด๋ฐ, ๊พธ์ค€ํžˆ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค!


ERD๋งŒ๋“ค๊ธฐ : https://drawsql.app/teams/no-55/diagrams/prisma-community-hub

 

Prisma-Community-Hub | DrawSQL

Database schema diagram for Prisma-Community-Hub.

drawsql.app

[ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ • ]

# ํ”„๋กœ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
yarn init -y

# ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
yarn add express prisma @prisma/client cookie-parser jsonwebtoken

# nodemon ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ DevDependency๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
yarn add -D nodemon

# ์„ค์น˜ํ•œ Prisma๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜์—ฌ, Prisma๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
npx prisma init

]Prisma model 1:1 ๊ด€๊ณ„ ์‚ดํŽด๋ณด๊ธฐ

// schema.prisma 

model Users {
  userId    Int      @id @default(autoincrement()) @map("userId")
  email     String   @unique @map("email")
  password  String   @map("password")
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  UserInfos UserInfos? // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”๊ณผ ์‚ฌ์šฉ์ž ์ •๋ณด(UserInfos) ํ…Œ์ด๋ธ”์ด 1:1 ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.
// ๋ฌผ์Œํ‘œ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค๋Š”๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ„.
// ์ฆ‰ userinfos์ด๊ธด ํ•˜์ง€๋งŒ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ ํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค ๋ผ๋Š”๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ„. 
// ์‚ฌ์šฉ์ž์™€ ์‚ฌ์šฉ์ž์ •๋ณด๊ฐ€ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋‹ค๋Š”๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ„

// model Users๋Š” ์—ฐ๊ด€๊ด€๊ณ„์ •์˜์˜ ์ปฌ๋Ÿผ์ผ๋ฟ, ์ปฌ๋Ÿผ์€ ์ƒ๊ธฐ์ง€์•Š์Œ!!!!!! 
  @@map("Users")
}


model UserInfos {
  userInfoId   Int      @id @default(autoincrement()) @map("userInfoId")
  UserId       Int      @unique @map("UserId") // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค
  name         String   @map("name")
  age          Int?     @map("age")
  gender       String   @map("gender")
  profileImage String?  @map("profileImage")
  createdAt    DateTime @default(now()) @map("createdAt")
  updatedAt    DateTime @updatedAt @map("updatedAt")

  // Users ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  User Users @relation(fields: [UserId], references: [userId], onDelete: Cascade)
// model user/info user์˜ userid๊ด€๊ณ„์„ค์ •
// ๋‚˜๋Š” ์‚ฌ์šฉ์ž์ •๋ณดํ…Œ์ด๋ธ”์—์žˆ๋Š” UserId ์ปฌ๋Ÿผ์€ ์œ ์ €์Šคํ…Œ์ด๋ธ”์—์žˆ๋Š” ์œ ์ €์•„์ด๋”” ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ• ๊ฑฐ๋‹ค.
onDelete: Cascade -> ์‚ฌ์šฉ์ž์ •๋ณด๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ์ •๋ณด๋„ ์‚ญ์ œ๋œ๋‹ค.
  @@map("UserInfos")
}

์‚ฌ์šฉ์ž(Users) ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž ์ •๋ณด(UserInfos) ๋ชจ๋ธ๊ณผ 1:1 ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ, 1:1 ๊ด€๊ณ„๋ž€ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1:1 ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.

 

๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๋ชจ๋ธ(UserInfos)์—์„œ ์–ด๋–ค ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„๋ฅผ ๋งบ์„์ง€(Users) ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๊ด€๊ณ„๋ฅผ ๋งบ๊ฒŒ ๋˜๋Š” ๋ชจ๋ธ(Users)์—์„œ ์–ด๋–ค ๋ชจ๋ธ์ด ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”์ง€(UserInfos) ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๊ด€๊ณ„๋ฅผ ๋งบ๊ฒŒ ๋˜๋Š” ๋ชจ๋ธ(Users)์—์„œ, ํƒ€์ž…์„ ์ง€์ •ํ•  ๋•Œ, Optional Parameter(?) ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

→ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

์‚ฌ์šฉ์ž ์ •๋ณด(UserInfos) ๋ชจ๋ธ์—์„œ๋Š”, 

Users

์ผ๋ฐ˜์ ์ธ Int, String๊ณผ ๊ฐ™์€ ํƒ€์ž…์ด ์•„๋‹Œ, ์ฐธ์กฐํ•  ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ์ง€์ •ํ•œ๋‹ค.

์‚ฌ์šฉ์ž(Users) ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ Users๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

fields

์‚ฌ์šฉ์ž ์ •๋ณด(UserInfos) ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์™ธ๋ž˜ํ‚ค(Forien Key) ์นผ๋Ÿผ์„ ์ง€์ •ํ•œ๋‹ค.

์—ฌ๊ธฐ์„ , UserId ์นผ๋Ÿผ์œผ๋กœ ์™ธ๋ž˜ํ‚ค๋ฅผ ์ง€์ •ํ–ˆ๋‹ค.

 

references

key: ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋ธ์˜ Column๋ฅผ ์ง€์ •ํžŒ๋””.

์—ฌ๊ธฐ์„ , ์‚ฌ์šฉ์ž(Users) ๋ชจ๋ธ์˜ userId ์นผ๋Ÿผ์„ ์ฐธ์กฐํ•œ๋‹ค.

 

onDelete | onUpdate

์ฐธ์กฐํ•˜๋Š” ๋ชจ๋ธ์ด ์‚ญ์ œ or ์ˆ˜์ •๋  ๊ฒฝ์šฐ ์–ด๋–ค ํ–‰์œ„๋ฅผ ํ• ์ง€ ์„ค์ •ํ•œ๋‹ค.

Cascade ์˜ต์…˜์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œ๋  ๊ฒฝ์šฐ ๊ทธ์— ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

Prisma 1:N ์—ฐ๊ด€ ๊ด€๊ณ„

// schema.prisma

model Users {
  userId    Int      @id @default(autoincrement()) @map("userId")
  email     String   @unique @map("email")
  password  String   @map("password")
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  UserInfos UserInfos? // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”๊ณผ ์‚ฌ์šฉ์ž ์ •๋ณด(UserInfos) ํ…Œ์ด๋ธ”์ด 1:1 ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.
  Posts     Posts[] // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”๊ณผ ๊ฒŒ์‹œ๊ธ€(Posts) ํ…Œ์ด๋ธ”์ด 1:N ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.
-> [] ๋ฐฐ์—ด์„ ์“ฐ๋ฉด ํฌ์ŠคํŠธ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ์„์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒƒ์„ ์œ ์ถ”ํ•˜๋ฉด๋จ !!! 
  @@map("Users")
}

model Posts {
  postId    Int      @id @default(autoincrement()) @map("postId")
  UserId    Int      @map("UserId") // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค
  title     String   @map("title")
  content   String   @map("content") @db.Text
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  // Users ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  User     Users      @relation(fields: [UserId], references: [userId], onDelete: Cascade)

  @@map("Posts")
}

 

์ด๋Ÿฐ 1:N ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๋ชจ๋ธ(Posts)์—์„œ ์–ด๋–ค ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„๋ฅผ ๋งบ์„์ง€(Users) ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๊ด€๊ณ„๋ฅผ ๋งบ๊ฒŒ ๋˜๋Š” ๋ชจ๋ธ(Users)์—์„œ ์–ด๋–ค ๋ชจ๋ธ์ด ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”์ง€(Posts) ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๊ด€๊ณ„๋ฅผ ๋งบ๊ฒŒ ๋˜๋Š” ๋ชจ๋ธ(Users)์—์„œ, ํƒ€์ž…์„ ์ง€์ •ํ•  ๋•Œ, ๋ฐฐ์—ด ์—ฐ์‚ฐ์ž([])๋ฅผ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.
→ ์‚ฌ์šฉ์ž๋Š”, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒŒ์‹œ๊ธ€์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€ ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ ์ž‘์„ฑํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํšŒ์› ํƒˆํ‡ด(onDelete)ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์ž‘์„ฑํ•œ ๋ชจ๋“  ๊ฒŒ์‹œ๊ธ€์ด ์‚ญ์ œ๋˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ์ด๋Ÿฐ ์„ค์ •์€ @relation ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

// Users ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
User     Users      @relation(fields: [UserId], references: [userId], onDelete: Cascade)

 

์—ฌ๊ธฐ์„œ `User`๋Š” ๊ฒŒ์‹œ๊ธ€(`Posts`)์ด ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ์ง€์ •ํ•˜๊ณ , `fields`๋Š” ๊ฒŒ์‹œ๊ธ€(`Posts`) ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์™ธ๋ž˜ํ‚ค ์นผ๋Ÿผ์„ ์ง€์ •ํ•œ๋‹ค. `references`๋Š” ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋ธ์˜ ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•˜๊ณ , `onDelete`๋Š” ์ž ์กฐํ•˜๋Š” ๋ชจ๋ธ์ด ์‚ญ์ œ๋  ๊ฒฝ์šฐ ์–ด๋–ค ํ–‰์œ„๋ฅผ ํ• ์ง€ ์„ค์ •ํ•œ๋‹ค.

`onDelete`์˜ ๊ฒฝ์šฐ, `Cascade` ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œ๋  ๊ฒฝ์šฐ ์—ฐ๊ด€๋œ ๊ฒŒ์‹œ๊ธ€ ๋˜ํ•œ ์‚ญ์ œ๋˜๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€(Comments) ๋˜ํ•œ, **๊ฒŒ์‹œ๊ธ€(Posts)**๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ์ž(Users) ๋ชจ๋ธ๊ณผ 1:N ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์ž‘์„ฑ๋œ Prisma model์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

// schema.prisma

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

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

model Users {
  userId    Int      @id @default(autoincrement()) @map("userId")
  email     String   @unique @map("email")
  password  String   @map("password")
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  UserInfos UserInfos? // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”๊ณผ ์‚ฌ์šฉ์ž ์ •๋ณด(UserInfos) ํ…Œ์ด๋ธ”์ด 1:1 ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.
  Posts     Posts[] // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”๊ณผ ๊ฒŒ์‹œ๊ธ€(Posts) ํ…Œ์ด๋ธ”์ด 1:N ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.
  Comments  Comments[] // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”๊ณผ ๋Œ“๊ธ€(Comments) ํ…Œ์ด๋ธ”์ด 1:N ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.

  @@map("Users")
}

model Posts {
  postId    Int      @id @default(autoincrement()) @map("postId")
  UserId    Int      @map("UserId") // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค
  title     String   @map("title")
  content   String   @map("content") @db.Text
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  // Users ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  User     Users      @relation(fields: [UserId], references: [userId], onDelete: Cascade)
  Comments Comments[] // ๊ฒŒ์‹œ๊ธ€(Posts) ํ…Œ์ด๋ธ”๊ณผ ๋Œ“๊ธ€(Comments) ํ…Œ์ด๋ธ”์ด 1:N ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค.

  @@map("Posts")
}

model UserInfos {
  userInfoId   Int      @id @default(autoincrement()) @map("userInfoId")
  UserId       Int      @unique @map("UserId") // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค
  name         String   @map("name")
  age          Int?     @map("age")
  gender       String   @map("gender")
  profileImage String?  @map("profileImage")
  createdAt    DateTime @default(now()) @map("createdAt")
  updatedAt    DateTime @updatedAt @map("updatedAt")

  // Users ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  User Users @relation(fields: [UserId], references: [userId], onDelete: Cascade)

  @@map("UserInfos")
}

model Comments {
  commentId Int      @id @default(autoincrement()) @map("commentId")
  PostId    Int      @map("PostId") // ๊ฒŒ์‹œ๊ธ€(Posts) ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค
  UserId    Int      @map("UserId") // ์‚ฌ์šฉ์ž(Users) ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค
  content   String   @map("content")
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  // Posts ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  Post Posts @relation(fields: [PostId], references: [postId], onDelete: Cascade)
  // Users ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  User Users @relation(fields: [UserId], references: [userId], onDelete: Cascade)

  @@map("Comments")
}

ํž˜๋‚ด์•ผํ•˜๋‹ˆ๊นŒ 

ํž˜๋˜๋Š” ์งค๋กœ ๋งˆ๋ฌด๋ฆฌ ํ•ด๋ณธ๋‹น...

2์ฃผ ํ”„๋กœ์ ํŠธ ํ™”์ดํŒ…...