
Prisma ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋ฏธํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ์ํฐํฐ๋ฅผ ํํํฉ๋๋ค.
๊ฐ ๋ชจ๋ธ์ ์ค์ DB์ ํ ์ด๋ธ๋ก ๋งคํ๋๋ฉฐ, ๋ชจ๋ธ ์์ ํ๋๋ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ํด๋นํฉ๋๋ค.
์ค๋์ ์ด Prisma ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์ ๊ด๊ณ ์ค์ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
@id: ๊ธฐ๋ณธ ํค (Primary Key)
id Int @id๋ ์ด ํ๋๊ฐ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค์์ ์๋ฏธํฉ๋๋ค.
๊ธฐ๋ณธ ํค๋ ํ
์ด๋ธ ๋ด์์ ๊ฐ ๋ ์ฝ๋๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ํ๋์
๋๋ค.
@default(autoincrement()): ๊ธฐ๋ณธ๊ฐ ๋ฐ ์๋ ์ฆ๊ฐ
@default: ๋ฐ์ดํฐ๊ฐ ์
๋ ฅ๋์ง ์์์ ๋ ์๋์ผ๋ก ์ฑ์์ง๋ ๊ฐ์ ์ค์ ํฉ๋๋ค. autoincrement(): ๊ธฐ๋ณธ ํค์ธ id์ ์๋ ์ฆ๊ฐ ๊ธฐ๋ฅ์ ๋ถ์ฌํฉ๋๋ค.@unique: ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด
email String @unique๋ ํด๋น ํ๋๊ฐ ํ
์ด๋ธ ๋ด์์ ์ค๋ณต๋ ์ ์๋ ๊ณ ์ ํ ๊ฐ์์ ๋ํ๋
๋๋ค.
์ค๋ณต๋ ์ด๋ฉ์ผ ๊ฐ ์
๋ ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ง์์ค๋๋ค.
? (Optional ํ๋, ๋ ๊ฐ๋ฅ)
name String?์ฒ๋ผ ํ๋๋ช
๋ค์ ?๊ฐ ๋ถ์ผ๋ฉด, ํด๋น ํ๋๋ ๊ฐ์ด ์์ด๋ ๋จ(Null ํ์ฉ)์ ์๋ฏธํฉ๋๋ค.
๊ฐ์ด ์์ ๊ฒฝ์ฐ Prisma Client์์๋ null ํน์ undefined๋ก ์ทจ๊ธํฉ๋๋ค.
@default(...) โ ๊ธฐ๋ณธ๊ฐ ์ง์
role Role @default(USER)๋ role ํ๋์ ๊ธฐ๋ณธ๊ฐ์ด USER์์ ๋ปํฉ๋๋ค.
๋ ์ฝ๋ ์์ฑ ์ role ๊ฐ์ ์ฃผ์ง ์์ผ๋ฉด ์๋์ผ๋ก USER๊ฐ ์
๋ ฅ๋ฉ๋๋ค.
๋ฐฐ์ด ํ์
Post[] โ 1:N ๊ด๊ณ ํํ
posts Post[]๋ ํ User๊ฐ ์ฌ๋ฌ ๊ฐ์ Post๋ฅผ ๊ฐ์ง ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋ฐฐ์ด ํ๊ธฐ([])๋ ์ผ๋๋ค(1:N) ๊ด๊ณ์์ โ๋คโ ์ชฝ์ ๋ํ๋
๋๋ค.
model Profile {
id Int @id @default(autoincrement())
bio String
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
user User @relation(...)๋ Profile์ด User์ ๊ด๊ณ๊ฐ ์์์ ๋ํ๋
๋๋ค.fields: [userId]๋ Profile ๋ชจ๋ธ ๋ด ์ธ๋ํค ์ญํ ์ ํ๋ ํ๋์
๋๋ค.references: [id]๋ User ๋ชจ๋ธ์ ๊ธฐ๋ณธ ํค(id)๋ฅผ ์ฐธ์กฐํ๋ค๋ ์๋ฏธ์
๋๋ค.userId Int @unique โ Profile ํ ๊ฐ๋น User๊ฐ 1:1 ๋์๋จ(์ ๋ํฌ ์ ์ฝ ๋๋ฌธ์).์ฆ, Profile์ userId๋ฅผ ํตํด User๋ฅผ ๊ฐ๋ฆฌํค๊ณ , User์ Profile์ 1:1 ๊ด๊ณ์
๋๋ค.
model Post {
updatedAt DateTime @updatedAt
}
@updatedAt์ ๋ ์ฝ๋๊ฐ ์์ ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ์ฌ ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค.model Post {
createdAt DateTime @default(now())
}
model Post {
categories Category[]
}
model Category {
posts Post[]
}
Post์ Category๊ฐ ๋ค๋๋ค ๊ด๊ณ์์ ์๋ฏธํฉ๋๋ค. enum Role {
USER
ADMIN
}
enum์ ๋ฏธ๋ฆฌ ์ ์๋ ๊ฐ๋ค์ ์งํฉ์ ์๋ฏธํฉ๋๋ค.role Role @default(USER)์ฒ๋ผ ํ๋ ํ์
์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.| ํค์๋ ๋ฐ ๋ฌธ๋ฒ | ์๋ฏธ |
|---|---|
@id | ๊ธฐ๋ณธ ํค ์ง์ |
@default(autoincrement()) | ์๋ ์ฆ๊ฐํ๋ ์ซ์ (์ฃผ๋ก ๊ธฐ๋ณธ ํค์ ์ฌ์ฉ) |
@unique | ์ค๋ณต ๋ถ๊ฐ๋ฅํ ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด |
? | ํ๋๊ฐ optional (null ๊ฐ๋ฅ) |
@default(value) | ํ๋ ๊ธฐ๋ณธ๊ฐ ์ง์ |
[] | ๋ฐฐ์ด ํ์ , 1\:N ๋๋ ๋ค๋๋ค ๊ด๊ณ ํํ |
@relation(fields: [...], references: [...]) | ๊ด๊ณ ์ฐ๊ฒฐ ํ๋์ ์ฐธ์กฐ ํ๋ ์ง์ (์ธ๋ํค ์ญํ ) |
@updatedAt | ์์ ๋ ๋ ์๋์ผ๋ก ํ์ฌ ์๊ฐ์ผ๋ก ๋ณ๊ฒฝ |
@default(now()) | ์์ฑ ์ ํ์ฌ ์๊ฐ ์๋ ํ ๋น |
enum | ์ ํ๋ ๊ฐ ์งํฉ์ผ๋ก ํ๋ ํ์ ์ง์ |
์ฐธ๊ณ - Prisma ๊ณต์ ๋ฌธ์: Prisma Data Model - Models