[TIL] Project 2
첫번재 글쓴지 지금 이미 3주정도가 지나갔는데 너무 많은일이일어났다.
여러가지 일은 많았지만 결과적으로는 프로젝트 진행은 아직 뭐가 없다 :)
오늘은 오랫만에 프리즈마 ORM사용하면서 나중에 와서 다시 볼수있는 documentation을 위해 작성 :
npx prisma init
init 하면 아래와같이 생성되는 파일들이있다.
1. ~/prisma/schme.prisma 생성
2. root에 .env파일생성
More information about the schema.prisma
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
datasource: This is used to define the database. It specifies which database engine Prisma will use and provides details like the database's location (URL).
generator: This statement configures how the Prisma client is generated.
Schema Configuration
기본적인 Prisma Schema
model Students {
studentId Int @id @default(autoincrement()) @map("studentId")
studentName String @unique @map("productName")
score Int @default(50) @map("score")
info String? @map("info") @db.Text
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
@@map("Students")
1. 데이터 유형 (Int, String, DateTime 등):
Prisma는 정수를 위한 Int, 텍스트를 위한 String, 날짜와 시간 값을 위한 DateTime 등 여러 데이터 유형을 지원합니다.
2. 선택적 필드 (?):
데이터 유형 뒤에 물음표 (?)가 붙으면, 해당 컬럼이 NULL 값을 허용한다는 것을 의미합니다. 이는 데이터베이스에서 이 필드에 값을 제공하는 것이 선택적임을 나타냅니다.
3.제약 조건 (UNIQUE, AUTO_INCREMENT):
Prisma에서는 SQL과 유사한 제약 조건을 사용할 수 있습니다.
UNIQUE는 컬럼의 각 값이 다른 값과 다르게 유지되도록 보장합니다.
AUTO_INCREMENT는 주로 기본 키에 사용되며, 숫자 값이 자동으로 증가하도록 사용됩니다.
4.테이블 이름 매핑 (@@map("Students")):
@@map("Students") 주석은 테이블을 실제 데이터베이스에서 다른 이름으로 매핑하는 데 사용됩니다.
@@map()을 사용하지 않으면, Prisma는 테이블 이름의 모든 대문자를 데이터베이스에서 소문자로 자동 변환합니다.
1:1 관계설정
model Teachers {
teacherId Int @id @default(autoincrement()) @map("teacherId")
name String @unique @map("name")
Class Classes?
@@map("Teachers")
}
model Classes{
classId Int @id @map("classId")
teacherId Int @id @map("tacherId")
// Teacher 테이블과 1:1관계설정
Teacher Teachers @relation(filed:[teacherId], reference: [teacherId], onDelete:Cascade)
@@map("Classes")
}
- 관계를 설정하려는 모델(class)에서 어떤 모델과 관계를 맺을지(teacher) 설정해야함
- 관계를 맺게되는 모델(teacher)에서 어떤 모델이 관계를 맺는지(class) 설정해야함
- 관계를 맺게되는 모델(teacher)에서, 타입을 지정할 때, **Optional Parameter(?)**를 지정해줘야함
Details of the Classes Model Configuration:
teachers: Instead of a basic type like Int or String, the model that is being referenced (teacher) is specified.
fields: This specifies the foreign key column in the teacher model. Here, it's set to the teacherId column.
references:
key: Specifies the column in the referenced model (teacher). In this case, it's the userId column of the teacher model.
onDelete | onUpdate:
These settings determine the action to take when the referenced model is either deleted or modified.
The Cascade option is set so that when a teacher is deleted, the linked class is also deleted.
1:N관계설정
model Teachers {
teacherId Int @id @default(autoincrement()) @map("teacherId")
name String @unique @map("name")
Students Students[]
@@map("Teachers")
}
model Students{
studentId Int @id @map("studentId")
teacherId Int @id @map("tacherId")
// Students 테이블과 1:N관계설정
Teacher Teachers @relation(filed:[teacherId], reference: [teacherId], onDelete:Cascade)
@@map("Classes")
}
- 관계를 설정하려는 모델(studnets)에서 어떤 모델과 관계를 맺을지(teachers) 설정해야합니다.
- 관계를 맺게되는 모델(teachers)에서 어떤 모델이 관계를 맺는지(studetns) 설정해야합니다.
- 관계를 맺게되는 모델(teacher)에서, 타입을 지정할 때, 배열 연산자([])를 작성해줘야합니다.
npx prisma db push
# schema.prisma 파일에 설정된 모델을 바탕으로 MySQL에 정보를 업로드합니다.
npx prisma studio
Prisma가좋은게 워크벤치나 다른 어플리케이션 없이 GUI가 제공되는게좋은것같다.
localhost:5555로 바로 들어가서 볼수있음!
'IT > TIL(Today I Learnt)' 카테고리의 다른 글
[TIL] 2024년 2주차 (2) | 2024.01.15 |
---|---|
[TIL] Happy New Year (2) | 2024.01.10 |
[TIL] Project 1 (3) | 2023.12.08 |
[TIL] 스프린트171 회고 (0) | 2023.08.08 |
[TIL] 0506 I love you Nissan (3) | 2023.06.05 |