Working with Model Attributes

1. Using @@id Attribute

AspectNotes
PurposeComposite primary key
Syntax@@id([userId, roleId])
Optionsname, map
LookupfindUnique({ where: { userId_roleId: {...} } })

2. Using @@unique Attribute

OptionUse
fieldsField array for composite uniqueness
nameClient-side compound key alias
mapDB constraint name
clusteredSQL Server clustered index flag

3. Using @@index Attribute

OptionDescription
fieldsIndexed columns (ordered)
nameClient key (rare)
mapDB index name
typeHash | Gin | Gist | SpGist | Brin (PG)
opsOperator class per field
@@index([createdAt(sort: Desc)])
@@index([tags], type: Gin)

4. Using @@map Attribute

PatternExample
Snake_case@@map("user_profiles")
Schema-qualifiedUse @@schema("auth") + @@map

5. Using @@ignore Attribute

WhenEffect
Unsupported modelKeeps DDL but hides from client
After introspectionAuto-added when PK missing

6. Using @@schema Attribute

RequirementDetail
PreviewpreviewFeatures = ["multiSchema"]
DatasourceList schemas = ["public","auth"]
Usage@@schema("auth") inside model/enum

7. Using @@fulltext Attribute

DBNotes
MySQLStable; native FULLTEXT index
PostgreSQLPreview fullTextSearchPostgres
Syntax@@fulltext([title, content])

8. Combining Multiple Model Attributes

model Order {
  id        Int      @id @default(autoincrement())
  userId    Int
  status    Status
  createdAt DateTime @default(now())

  @@unique([userId, createdAt])
  @@index([status])
  @@index([createdAt(sort: Desc)])
  @@map("orders")
  @@schema("commerce")
}
TipDetail
Group togetherPlace at end of model body
Index per queryAdd @@index for each frequent where/orderBy

9. Understanding Attribute Order

PositionConvention
FirstComposite keys (@@id, @@unique)
MiddleIndexes
LastMapping/schema (@@map, @@schema)

10. Validating Model Attributes

ValidationTool
Staticprisma validate
RuntimeMigration engine on migrate dev
Common errorDuplicate map names, unknown fields