Skip to main content
Prisma Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

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 .md to 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:

prisma
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.

prisma
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)”
prisma
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):

prisma
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):

prisma
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
}
  • 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 level
  • Relation mode: Manage relations between records with relation modes in Prisma
  • Self-relations: How to define and work with self-relations in Prisma.
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu