Working with Field Attributes

1. Using @id Attribute

AspectNotes
PurposeMarks field as primary key
CombineUsually with @default(...)
MongoMust use @map("_id")

2. Using @unique Attribute

OptionDescription
mapCustom DB constraint name: @unique(map: "uq_users_email")
sortAsc | Desc (PG/MSSQL)
lengthIndex prefix length (MySQL)

3. Using @default Attribute

Default SourceExample
Literal@default(0), @default("draft")
Function@default(now())
Enum value@default(ACTIVE)
Raw SQL@default(dbgenerated("gen_random_uuid()"))

4. Using @map Attribute

ScopeAttributeEffect
Field@map("col_name")Column name in DB
Model@@map("table_name")Table name in DB
Enum valueVALUE @map("db_value")Stored representation

5. Using @updatedAt Attribute

updatedAt DateTime @updatedAt
BehaviorDetail
Auto-setPrisma writes new Date() on every update
InitialSet on create as well
OverridePass explicit value to bypass

6. Using @relation Attribute

OptionDescription
fieldsLocal FK field(s)
referencesReferenced field(s) on related model
nameRelation label for disambiguation
onDeleteCascade | Restrict | SetNull | SetDefault | NoAction
onUpdateSame options as onDelete
mapFK constraint name

7. Using @ignore Attribute

UseEffect
Field-levelExcluded from generated client
Model-level @@ignoreSchema retained but unavailable to client
Common caseLegacy tables without PK after introspection

8. Using @db Attribute

ExampleNative Type
@db.VarChar(255)varchar(255)
@db.Texttext
@db.Uuiduuid
@db.Timestamptz(6)timestamp with tz
@db.Moneymoney

9. Combining Multiple Attributes

id    String  @id @default(uuid(7)) @db.Uuid @map("user_id")
email String  @unique(map: "uq_users_email") @db.Citext
RuleDetail
OrderFree; reads left-to-right
Conflicting defaultsLast wins (validator warns)

10. Understanding Attribute Precedence

PrecedenceDetail
@id vs @unique@id implies unique; cannot combine on same field
@default vs explicit valueExplicit value in create wins over default
@@id vs @idMutually exclusive per model
Field @map vs DB introspectionSchema mapping wins