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

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

スキーマに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.