npm i prisma
npx prisma init
초기화 결과
- prisma/schema.prisma 파일 생성: 이 파일에서 데이터베이스의 구조와 규칙(스키마)을 정의.
- .env 파일 생성: 데이터베이스에 접속하기 위한 DATABASE_URL 환경 변수가 여기에 저장.
- 중요: .env 파일에는 중요한 정보가 들어 있으므로 절대 깃헙에 올리지 않도록 .gitignore에 포함해야 합니다.
DATABASE_URL="file:./database.db"
model User {
id Int @id @default(autoincrement())//기본 키, 자동 증가
username String @unique .//고유값
email String? @unique // 선택적 필드 (?)
password String?
phone String? @unique
githubId String? @unique
avatar String? //이미지 넣을때(깃허브면 프로필 사진 저장 가능)
createdAt DateTime @default(now()) //생성 시간
updatedAt DateTime @updatedAt //수정 시간
}
<save 시 릴레이션 자동완성 방법>
플러그인 prisma 다운
cmd + shift + p로 JSON settings 파일을 열고
"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
}
npx prisma migrate dev
Enter a name for the new migration: -> 이름을 정해주고 엔터 (예시: add_user, smstoken)
npm install @prisma/client
import { PrismaClient } from "@prisma/client";
const db = new PrismaClient();
async function createUser() {
await db.user.create({
data: {
username: "홍길동",
phone: "010-1234-5678",
},
});
}
createUser();
//export default db;
npx prisma studio
npx prisma studio 재시작하는걸 추천schema.prisma 파일 수정
npx prisma migrate dev로 마이그레이션 적용
Studio를 다시 실행 (npx prisma studio)
@relation(fields, references) : 관계를 정의하고, 외래 키 필드와 참조되는 모델의 필드를 연결.model SMSToken {
// id Int @id @default(autoincrement())
id Int @id @default(autoincrement())
token String @unique
created_at DateTime @default(now())
updated_at DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
userId Int
}
//user User 까지만 작성하면 자동완성으로 relation은 나옴!! -편안-
model SMSToken {
// id Int @id @default(autoincrement())
id Int @id @default(autoincrement())
token String @unique
created_at DateTime @default(now())
updated_at DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
}
Cascade: 참조 레코드를 삭제하면 참조 레코드의 삭제가 트리거된다. (사용자가 삭제됐을때 사용자가 연결된 모든 SMSToken들도 같이 지워진다)
Restrict: 참조 레코드가 있는 경우 삭제를 방지한다.
NoAction: Restrict과 유사하지만 사용 중인 데이터베이스에 따라 다르다.
SetNull: 참조 필드가 NULL로 설정된다. (optional일 때만 정상 작동/사용자가 삭제됐을때 null로 설정)
SetDefault: 참조 필드가 기본값으로 설정된다.
초기 설정이 좀 복잡해보이기는 하는데 다른 데이터베이스를 다루는 프로그램(?)보다는 단순하다고 하니 열심히 연습해봐야겠다.
db 초기 설계만 잘끝낸다면 분명 좋은 프로젝트가 완성되지 않을까 하는 기대가 생긴다!