跳到主要內容

在 Javascript 專案中演進 SQL Server 資料庫的 schema

將 Tag 模型新增到您的 schema

在本節中,您將演進您的 Prisma schema,然後使用 prisma migrate dev 命令生成並應用遷移到您的資料庫。

為了本指南的目的,我們將對 Prisma schema 進行以下更改

  1. 建立一個名為 Tag 的新模型,包含以下欄位
    • id:一個自增整數,將作為該模型的主鍵
    • name:一個非空的 String 型別欄位
    • posts:一個隱式的多對多關係欄位,連結到 Post 模型
  2. 更新 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

此命令將

  1. 為遷移建立一個新的 SQL 遷移檔案
  2. 將生成的 SQL 遷移應用到資料庫
  3. 重新生成 Prisma Client

以下遷移將被生成並儲存到您的 prisma/migrations 資料夾中

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

CONSTRAINT [Tag_pkey] PRIMARY KEY ([id])
);

-- CreateTable
CREATE TABLE [dbo].[_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 [dbo].[_PostToTag] ADD CONSTRAINT [_PostToTag_A_fkey] FOREIGN KEY ([A]) REFERENCES [dbo].[Post]([id]) ON DELETE CASCADE ON UPDATE CASCADE;

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

恭喜

© . This site is unofficial and not affiliated with Prisma Data, Inc.