演进你的 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 演进了你的数据库 🚀