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

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

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

おめでとうございます

© . All rights reserved.