跳到主要內容

演進您的 schema

在您的 schema 中新增 Tag 模型

在本節中,您將演進您的 Prisma schema,然後使用 prisma migrate dev 產生遷移並將其套用至您的資料庫。

基於本指南的目的,我們將對 Prisma schema 進行以下變更

  1. 建立一個名為 Tag 的新模型,其中包含以下欄位
    • id:一個自動遞增的整數,將作為模型的主鍵
    • name:一個非空的 String
    • posts:一個隱式多對多關係欄位,連結到 Post 模型
  2. 使用連結到 Tag 模型的隱式多對多關係欄位 tags 更新 Post 模型

一旦您對您的 schema 進行了變更,您的 schema 應如下所示

prisma/schema.prisma
model Post {
id Int @id @default(autoincrement())
title String @db.VarChar(255)
createdAt DateTime @default(now()) @db.Timestamp(6)
content String?
published Boolean @default(false)
authorId Int
user User @relation(fields: [authorId], references: [id])
tags Tag[]
}

model Profile {
id Int @id @default(autoincrement())
bio String?
userId Int @unique
user User @relation(fields: [userId], references: [id])
}

model User {
id Int @id @default(autoincrement())
name String? @db.VarChar(255)
email String @unique @db.VarChar(255)
post Post[]
profile Profile?
}

model Tag {
id Int @id @default(autoincrement())
name String
posts Post[]
}

若要將您的 Prisma schema 變更套用至您的資料庫,請使用 prisma migrate dev CLI 命令

npx prisma migrate dev --name tags-model

此命令將會

  1. 為遷移建立新的 SQL 遷移檔案
  2. 將產生的 SQL 遷移套用至資料庫
  3. 重新產生 Prisma Client

以下遷移將會產生並儲存在您的 prisma/migrations 資料夾中

prisma/migrations/TIMESTAMP_tags_model.sql
 -- CreateTable
CREATE TABLE "Tag" (
"id" SERIAL NOT NULL,
"name" VARCHAR(255) NOT NULL,

CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "_PostToTag" (
"A" INTEGER NOT NULL,
"B" INTEGER NOT NULL
);

-- CreateIndex
CREATE UNIQUE INDEX "_PostToTag_AB_unique" ON "_PostToTag"("A", "B");

-- CreateIndex
CREATE INDEX "_PostToTag_B_index" ON "_PostToTag"("B");

-- AddForeignKey
ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Post"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE;

恭喜,您剛剛使用 Prisma Migrate 演進了您的資料庫 🚀