Skip to content

One-to-many relations

Source URL: https://docs.prisma.io/docs/orm/prisma-schema/data-model/relations/one-to-many-relations

How to define and work with one-to-many relations in Prisma.

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 non-ID field with @unique:

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
}

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.

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
}