One-to-many relations (Prisma ORM v7) (/docs/orm/v7/prisma-schema/data-model/relations/one-to-many-relations)
For the complete Prisma documentation index, see llms.txt. A markdown version of any docs page is available by appending
.mdto its URL.
How to define and work with one-to-many relations in Prisma.
Location: ORM > v7 > Prisma Schema > Data Model > Relations > One-to-many relations
One-to-many (1-n) relations connect one record on one side to zero or more records on the other side:
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
}This expresses:
- A user can have zero or more posts
- A post must always have an author
You can also reference a field other than the primary key. The referenced field on the parent model must be unique, so mark it with @unique (an @id field is already unique). To reference several fields at once, they must together form a @@id or @@unique; see Multi-field relations.
model User {
id Int @id @default(autoincrement())
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
authorEmail String
author User @relation(fields: [authorEmail], references: [email])
}Multi-field relations (relational databases only)
Section titled “Multi-field relations (relational databases only)”model User {
firstName String
lastName String
post Post[]
@@id([firstName, lastName])
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorFirstName, authorLastName], references: [firstName, lastName])
authorFirstName String
authorLastName String
}1-n in the database
Section titled “1-n in the database”The difference between 1-1 and 1-n is that in a 1-1 relation the foreign key must have a UNIQUE constraint. Without UNIQUE, multiple records can point to the same parent, making it 1-n.
Required vs optional relation fields
Section titled “Required vs optional relation fields”The annotated relation field and relation scalar can be either optional or mandatory. The list side is always mandatory.
Optional 1-n (can create Post without User):
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}Mandatory 1-n (must assign User when creating Post):
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
}Related pages
Section titled “Related pages”Many-to-many relations: How to define and work with many-to-many relations in Prisma.One-to-one relations: How to define and work with one-to-one relations in Prisma.Referential actions: Referential actions let you define the update and delete behavior of related models on the database levelRelation mode: Manage relations between records with relation modes in PrismaSelf-relations: How to define and work with self-relations in Prisma.