@@id
複合主キーの指定
単一フィールドの@idとの違い
code:prisma(js)
// 単一の主キー
model User {
id Int @id @default(autoincrement())
email String
}
// 複合主キー
model Post {
authorId Int
slug String
title String
@@id(authorId, slug)
}
主な特徴
一意制約 + NOT NULL: 複合主キーを構成するフィールドは自動的にすべてNOT NULLになる
@idとの排他: 同一モデル内で@idと@@idは併用できない
インデックス: 主キーなので暗黙的にインデックスが張られる
デフォルトのクライアントAPI名: authorId_slug のようにフィールド名を_で連結した名前になる
クライアントからの参照
複合主キーのレコードを引くときは、フィールド名を連結したオブジェクトで指定する。
code:typescript
await prisma.post.findUnique({
where: {
authorId_slug: {
authorId: 1,
slug: "hello-world",
},
},
});