A relation in Prisma connects two models, like a link between tables in a database. It helps you organize and access related data easily.
Click to reveal answer
intermediate
How do you define a one-to-many relation in Prisma schema?
You add a field with type of the related model and use @relation attribute. For example, a User has many Posts: model User { id Int @id @default(autoincrement()) posts Post[] } model Post { id Int @id @default(autoincrement()) userId Int user User @relation(fields: [userId], references: [id]) }
Click to reveal answer
beginner
What does the @relation attribute do in Prisma?
The @relation attribute tells Prisma how two models are connected. It specifies which fields link the models and which fields are referenced, making the relation clear.
Click to reveal answer
intermediate
How do you represent a many-to-many relation in Prisma?
You create two models with array fields of each other. Prisma automatically creates a join table. Example: model Student { id Int @id @default(autoincrement()) courses Course[] } model Course { id Int @id @default(autoincrement()) students Student[] }
Click to reveal answer
beginner
Why are relations important in Prisma when using NestJS?
Relations help NestJS apps fetch and manage connected data easily. They let you get related records in one query, making your app faster and simpler to write.
Click to reveal answer
In Prisma, how do you link a Post to a User in a one-to-many relation?
AAdd a posts field in User only
BUse @manyToOne attribute in Post
CAdd a user field in User model
DAdd a userId field in Post and use @relation to User
✗ Incorrect
You add a userId field in Post and use @relation to connect it to User.
What does Prisma create automatically for many-to-many relations?
AA join table to connect the two models
BA single combined model
CNo extra tables are created
DA foreign key in one model only
✗ Incorrect
Prisma creates a join table behind the scenes to manage many-to-many relations.
Which Prisma attribute specifies how two models are connected?
A@link
B@connect
C@relation
D@join
✗ Incorrect
The @relation attribute defines the connection between models.
In a one-to-many relation, which side holds the foreign key field?
AThe many side
BThe one side
CBoth sides
DNeither side
✗ Incorrect
The many side holds the foreign key field to link back to the one side.
Why use relations in Prisma with NestJS?
ATo disable data fetching
BTo fetch related data easily and write simpler queries
CTo write more complex SQL manually
DTo avoid using databases
✗ Incorrect
Relations let you fetch connected data easily and keep your code simple.
Explain how to set up a one-to-many relation between User and Post models in Prisma.
Think about which model holds the foreign key and how @relation connects them.
You got /4 concepts.
Describe the difference between one-to-many and many-to-many relations in Prisma.
Consider how data is connected and stored in the database.
You got /4 concepts.
Practice
(1/5)
1. What type of relation in Prisma connects one record to many records in another model?
easy
A. One-to-many relation
B. One-to-one relation
C. Many-to-many relation
D. No relation
Solution
Step 1: Understand relation types in Prisma
Prisma supports one-to-one, one-to-many, and many-to-many relations to connect models.
Step 2: Identify the relation connecting one record to many
One-to-many means one record in a model relates to multiple records in another model.
Final Answer:
One-to-many relation -> Option A
Quick Check:
One record linked to many = One-to-many [OK]
Hint: One record to many records means one-to-many relation [OK]
Common Mistakes:
Confusing one-to-one with one-to-many
Thinking many-to-many is one-to-many
Assuming no relation means one-to-many
2. Which of the following is the correct Prisma schema syntax for a one-to-one relation between User and Profile models?
easy
A. model User {\n id Int @id @default(autoincrement())\n profiles Profile[]\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n user User\n}
B. model User {\n id Int @id @default(autoincrement())\n profile Profile? @relation(fields: [profileId], references: [id])\n profileId Int?\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n user User?\n}
C. model User {\n id Int @id @default(autoincrement())\n profile Profile\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n user User\n}
D. model User {\n id Int @id @default(autoincrement())\n profileId Int\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n}
Solution
Step 1: Check one-to-one relation syntax
One-to-one relations use a single optional foreign key field with @relation specifying fields and references.
Step 2: Verify the syntax
The correct schema declares profile Profile? @relation(fields: [profileId], references: [id]) and profileId Int? in User, with user User? in Profile. This matches the pattern for optional one-to-one.
Final Answer:
Schema with explicit optional FK and @relation -> Option B
Quick Check:
One-to-one uses single foreign key with @relation [OK]
Hint: One-to-one needs single foreign key with @relation fields [OK]
Common Mistakes:
Using array [] for one-to-one relation
Missing @relation fields and references
Not making foreign key optional
3. Given the Prisma models below, what will be the result of the query prisma.user.findUnique({ where: { id: 1 }, include: { posts: true } }) if user with id 1 has two posts?
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
userId Int
user User @relation(fields: [userId], references: [id])
}
medium
A. An error because 'include' is not valid here
B. An object with user data but 'posts' will be undefined
C. An object with user data and an array of two post objects under 'posts'
D. An array of posts only without user data
Solution
Step 1: Understand the Prisma query with include
The query fetches a user by id and includes related posts as an array.
Step 2: Check relation and data
User with id 1 has two posts, so 'posts' will be an array of two post objects inside the user object.
Final Answer:
User object with posts array of two posts -> Option C
Quick Check:
Include fetches related data as array [OK]
Hint: Include fetches related records as array or object [OK]
Common Mistakes:
Expecting posts to be undefined without include
Thinking include causes error
Expecting only posts without user
4. Identify the error in this Prisma schema for a one-to-many relation between Author and Book models:
model Author {
id Int @id @default(autoincrement())
name String
books Book
}
model Book {
id Int @id @default(autoincrement())
title String
authorId Int
author Author @relation(fields: [authorId], references: [id])
}
medium
A. Author model is missing a primary key
B. Missing @relation on Author.books field
C. authorId should be optional in Book model
D. The 'books' field in Author should be an array (Book[]) not a single Book
Solution
Step 1: Check relation type from schema
Author to Book is one-to-many, so Author.books must be an array of Book.
Step 2: Identify the mistake
Author.books is declared as a single Book, which is incorrect for one-to-many.
Final Answer:
'books' must be Book[] array -> Option D
Quick Check:
One-to-many uses array field [OK]
Hint: One-to-many needs array [] on 'many' side field [OK]
Common Mistakes:
Using single object instead of array for many side
Forgetting @relation decorator
Making foreign key optional incorrectly
5. You want to fetch all Order records with their related Customer data, but only include customers who have placed more than 5 orders. Which Prisma query approach correctly applies this filter using relations?
model Customer {
id Int @id @default(autoincrement())
name String
orders Order[]
}
model Order {
id Int @id @default(autoincrement())
total Float
customerId Int
customer Customer @relation(fields: [customerId], references: [id])
}
hard
A. Use findMany on Order with include: { customer: true } and a where on customer orders count > 5
B. Use findMany on Customer with where: { orders: { some: {} } } and include orders
C. Use findMany on Order with where: { customer: { orders: { count: { gt: 5 } } } } and include customer
D. Use findMany on Customer with include: { orders: true } and filter orders count > 5 in JavaScript
Solution
Step 1: Understand filtering by related model count
Prisma allows filtering with nested conditions on related models using 'where' and relation filters.
Step 2: Identify correct query
Using findMany on Order with include: { customer: true } and where: { customer: { orders: { _count: { gt: 5 } } } } fetches the desired orders with customers who have more than 5 orders.
Final Answer:
findMany on Order with relational where filter and customer include -> Option A
Quick Check:
Filter related model count in where clause [OK]
Hint: Filter related model count in where clause with include [OK]
Common Mistakes:
Filtering in JavaScript instead of query
Using incorrect nested where syntax
Filtering on Customer without including orders count
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.