Prisma Many to Many(다대다) schema 작성
해당 스키마는 아래 글을 참고로 만들었습니다.
링크 : SQL 관계도 Many to Many(다대다 관계)
해당 링크의 스키마를 작성하기 위해서 아래와 갖이 코드를 작성합니다.
// prisma/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")
}
model users {
id Int @default(autoincrement()) @id
full_name String @unique
created_at DateTime @default(now()) @db.Timestamptz(3)
comments joinTable[]
}
model joinTable{
users users @relation(fields: [userId], references: [id]) // users와joinTable은 1:N이다
userId Int
comment comments @relation(fields: [commentId], references: [id]) // comments와 joinTable은 1:N이다.
commentId Int
@@id([userId, commentId]) // userId, commentId는 Primary key이다
}
model comments {
id Int @default(autoincrement()) @id
content String
users joinTable[]
}
코드1) schema.prisma code
-- CreateTable
CREATE TABLE "users" (
"id" SERIAL NOT NULL,
"full_name" TEXT NOT NULL,
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "joinTable" (
"userId" INTEGER NOT NULL,
"commentId" INTEGER NOT NULL,
CONSTRAINT "joinTable_pkey" PRIMARY KEY ("userId","commentId")
);
-- CreateTable
CREATE TABLE "comments" (
"id" SERIAL NOT NULL,
"content" TEXT NOT NULL,
CONSTRAINT "comments_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_full_name_key" ON "users"("full_name");
-- AddForeignKey
ALTER TABLE "joinTable" ADD CONSTRAINT "joinTable_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "joinTable" ADD CONSTRAINT "joinTable_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "comments"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
코드2) migrate후 자동 생성된 sql
![]() |
사진1) 실제 터미널 정보 |
NestJS프로젝트에서 생성한 파일이지만 schema.prisma 파일은 어느 프레임워크에서도 사용할수 있어 보입니다.
댓글
댓글 쓰기