[TIL] Project 2

IT/TIL(Today I Learnt)|2024. 1. 5. 00:40

 

 

첫번재 글쓴지 지금 이미 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")
  
}
  1. 관계를 설정하려는 모델(class)에서 어떤 모델과 관계를 맺을지(teacher) 설정해야함
  2. 관계를 맺게되는 모델(teacher)에서 어떤 모델이 관계를 맺는지(class) 설정해야함
  3. 관계를 맺게되는 모델(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")
  
}
  1. 관계를 설정하려는 모델(studnets)에서 어떤 모델과 관계를 맺을지(teachers) 설정해야합니다.
  2. 관계를 맺게되는 모델(teachers)에서 어떤 모델이 관계를 맺는지(studetns) 설정해야합니다.
  3. 관계를 맺게되는 모델(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

댓글()