メインコンテンツにスキップ

JavaScriptプロジェクトでPostgreSQLデータベースのスキーマを進化させる

スキーマに`Tag`モデルを追加

このセクションでは、Prismaスキーマを進化させ、prisma migrate devを使用してマイグレーションを生成し、データベースに適用します。

このガイドの目的のため、Prismaスキーマに以下の変更を加えます

  1. 以下のフィールドを持つ`Tag`という新しいモデルを作成します
    • `id`: モデルのプライマリキーとなる自動インクリメント整数
    • `name`: null非許容の`String`
    • `posts`: `Post`モデルにリンクする暗黙的な多対多のリレーションフィールド
  2. `Post`モデルに、`Tag`モデルにリンクする暗黙的な多対多のリレーションフィールドを持つ`tags`フィールドを追加して更新します

スキーマに変更を加えたら、スキーマは以下のようになるはずです

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スキーマの変更をデータベースに適用するには、`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でデータベースを進化させました 🚀

© . All rights reserved.