Archive

[DB] Prisma 기초

manon_e 2021. 10. 10. 23:14
반응형

Prisma

: ORM으로 객체를 schema로 정의한 다음, 그 객체와 내가 선택한 DB를 연결시켜주는 매개체

  • Node.js와 Typescript ORM
  • 직관적인 데이터모델, 자동화된 마이그레이션, 타입안정성, 자동완성 기능

 

💡ORM ( Object Relational Mapping )

: ‘객체로 연결’

객체와 관계형 데이터베이스의 데이터를 자동으로 mapping(연결)해주는 framwork

  • 객체지향 프로그래밍은 class를 사용하고, 관계형 db는 table을 사용하기 때문에 객체모델과 관계형 모델간에 불일치가 존재 → ORM을 통해 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결
  • app과 db연결 시 SQL언어가 아닌 application 개발 언어로 db를 접근할 수 있게 해주는 툴
  • ORM은 SQL 문법 대신 application 개발언어를 그대로 사용할 수 있게 함으로써, 개발 언어의 일관성과 가독성을 높여줌

 

SQL ( Structured Query Language )

: DB에서 데이터를 추출하고 조작하는데 사용하는 데이터 처리 언어

 

 

DBMS ( Database management System )

: db를 관리하고 운영하는 소프트웨어

  1. 대용량 데이터를 사용하고 저장, 관리할 수 있다.
  2. 공유개념, 동시에 다른 사용자가 공유할 수 있다.

종류 : 계층형, 망형, 관계형, 객체지향형 등

현재 사용되는 DBMS는 관계형(RDBMS) 이 많이사용 (MySQL, Oracle, SQLite, PostgresSQL)

 

RDBMS (Relational DBMS)

: 최소단위 table로 구성 (하나의 열 column과 행 row로 구성)

 

SQL (Structured Query Language)

: DBMS에 데이터를 구축, 관리하고 활용하기 위해서 사용되는 언어 (= 데이터베이스용 프로그래밍 언어)

db에 query를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.

 

Query

: (질문, 문의하다) db에 사용자가 요청한 특정 데이터를 보여달라는 요청

ex) 쿼리문을 작성하다 → db에서 원하는 정보를 가져오는 코드를 작성

  • parameter → Get : /products/5
  • query → Get : /products?id=5

일반적으로 query는 어떤 키워드를 검색, 요청 시 필요한 옵션을 전달할 때 사용 (filtering, sorting, searching)

 


 

.env

DATABASE_URL="file:./database.db"

 

 

 

prisma/schema.prisma

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

// DB schema 작성예시
model User {
  id Int @id @default(autoincrement())
  username String @unique
  email String? @unique
  password String?
  phone String? @unique
  github_id String? @unique
  avatar String? 
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
}

 

 

migrarion - schema 변경시 실행

npx prisma migrate dev

→ SQL 코드로 변환된 migration.sql 파일 생성

 

 

 

typescript로 작성된 client 생성

→ node_modules/.prisma/client/index.d.ts

npx prisma generate

 

 

 

prisma studio 실행

npx prisma studio

 

 

 

connect table

model SMSToken {
  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
}
  • onDelete : related 되어있는 부모 table이 삭제되었을 때 설정
    • Cascade : child table도 같이 삭제
    • SetNull : child에서 연결된 항목을 null로 설정 (값을 optional로 바꿔야됨)
    • Restrict(기본) : prevent deleting a parent record
반응형

'Archive' 카테고리의 다른 글

[React] Router  (0) 2021.10.24
[VSC] Prettier 적용방법  (0) 2021.10.16
[DB] Prisma  (0) 2021.10.10
export / export default  (0) 2021.10.02
--save-dev ?  (0) 2021.09.25