1. 모델 정의:
2. 필드 정의:
3. 기본 키 및 관계 정의:
4. 추가 옵션 정의:
// 카테고리 모델
model Category {
id Int @id @default(autoincrement())
name String
description String? // ? 표시는 null 값 허용
// 카테고리와 메뉴 간의 일대다 관계
menus Menu[]
}
// 메뉴 모델
model Menu {
id Int @id @default(autoincrement())
name String
price Int ?
description String @db.Text @map("description")
isActive Boolean @default(true)
createdAt DateTime @default(now())
category Category? @relation(fields: [categoryId], references: [id])
categoryId Int?
}
name String
: Prisma에서는 기본적으로 필드의 null 값을 허용하지 않는다. 필수(required)로 간주로 간주
db 저장시 필드 값이 항상 존재해야함)
price Int ?
: null 값이 허용될 경우 데이터탙입 뒤에 ? 붙여
description String @db.Text
: 긴 텍스트 사용시
외래 키(Foreign Key)
는 부모테이블의 (참조할) 필드. 이키는 자식 테이블에 추가됨
isActive Boolean @default(true)
: 데이터 삽입될때 기본적으로 'true' 설정
createdAt DateTime @default(now())
: 데이터 삽입시 현재 날짜와 시간 자동 추가
categoryId Int @map("categoryId") // 부모테이블 필드 선언
category Categories @relation(fields:[categoryId], references:[categoryId], onDelete: Cascade) // 관계
참조할 부모 테이블 필드
를 자식 테이블에 선언
@relation
으로 관계 맺기
(fiedls : 현재 자식테이블의 외래키인 categoryId, references : [부모모델 categoryId 필드] , 참조될 열(부모 행)이 삭제시 자식행도 함께 삭제)
menus Menus[] // 1:n 연관관계 (자식 테이블의 모델 )
`자식 테이블의 모델`을 추가한다
## 1:1 관계
````js
model User {
id Int @id @default(autoincrement())
username String
userInfo UserInfo?
}
model UserInfo {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id]) ..
userId Int @unique // 부모 테이블 필드
}
참조할 부모 테이블 필드
선언 + @unique 추가해주기
@relation으로 관계
맺기 ( field : 현재 이테이블에서 불리는 이름, reference : 부모테이블의 필드이름)
userInfo UserInfo?
인 이유는? : 1:1에서 자주 사용되는 패턴중에 하나인데 때로는 모든 사용자에 대해 연결된 정보가 없을 수 있기 때문에 이러한 관계를 옵셔널하게 만들어야 함
ex) 만약 UserInfo가 생성되지 않은 경우에는 해당 사용자의 UserInfo 필드에는 null이 할당됨
근데 optional 설정을 하지 않았을 경우 prisma는 기본(필수 필드)이 null 불가이기 때문에 아직 생성되지 않은 사용자에 대해 오류가 발생할수 있음
? 로 하면 이렇게 하면 사용자에 대한 연결된 정보가 없는 경우에도 오류를 방지할수 있음