スキーマを進化させる
スキーマに Tag
モデルを追加する
このセクションでは、Prisma スキーマを進化させ、prisma migrate dev
を使用してマイグレーションを生成してデータベースに適用します。
このガイドの目的のために、Prisma スキーマに次の変更を加えます。
- 次のフィールドを持つ
Tag
という新しいモデルを作成します。id
: モデルの主キーとなる自動インクリメント整数name
: null 値を許容しないString
posts
:Post
モデルにリンクする暗黙的な多対多リレーションフィールド
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
このコマンドは次のことを行います:
- マイグレーション用の新しい 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 でデータベースを進化させました 🚀