在 Typescript 專案中演進 PostgreSQL 資料庫的 schema
向您的 schema 新增一個 Tag 模型
在本節中,您將演進您的 Prisma schema,然後使用 prisma migrate dev 生成並應用遷移到您的資料庫。
為了本指南的目的,我們將對 Prisma schema 進行以下更改
- 建立一個名為
Tag的新模型,包含以下欄位id:一個自增整數,將作為該模型的主鍵name:一個非空的String字串posts:一個隱式的多對多關係欄位,連結到Post模型
- 更新
Post模型,新增一個tags欄位,該欄位是一個隱式的多對多關係欄位,連結到Tag模型
一旦您對 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
此命令將
- 為遷移建立新的 SQL 遷移檔案
- 將生成的 SQL 遷移應用到資料庫
- 重新生成 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 演進了您的資料庫 🚀