One-to-one relationships connect two pieces of data so each item matches exactly one item in the other set. This helps keep data organized and easy to find.
When each user has exactly one profile with extra details.
When each product has one unique warranty record.
When each employee has one personal locker assigned.
When each car in a system has one registration document.
Syntax
GraphQL
type User {
id: ID!
name: String!
profile: Profile!
}
type Profile {
id: ID!
bio: String
user: User!
}
Use a field in one type to link to the other type.
Mark the linked field as non-null if it must always exist.
Examples
This example shows a person linked to exactly one passport, and vice versa.
GraphQL
type Person {
id: ID!
name: String!
passport: Passport!
}
type Passport {
id: ID!
number: String!
person: Person!
}
Each employee has one locker, and each locker belongs to one employee.
GraphQL
type Employee {
id: ID!
name: String!
locker: Locker!
}
type Locker {
id: ID!
location: String!
employee: Employee!
}
Sample Program
This query fetches a user and their linked profile using a one-to-one relationship.
GraphQL
type User {
id: ID!
name: String!
profile: Profile!
}
type Profile {
id: ID!
bio: String
user: User!
}
query GetUserWithProfile {
user(id: "1") {
id
name
profile {
id
bio
}
}
}
OutputSuccess
Important Notes
One-to-one links help avoid repeating data in multiple places.
Make sure to keep the link consistent on both sides to avoid confusion.
Summary
One-to-one relationships connect exactly one item to one other item.
They keep data neat and easy to access.
Use linked fields in GraphQL types to represent these connections.
Practice
(1/5)
1. What does a one-to-one relationship in GraphQL represent?
easy
A. Each item in one type is linked to exactly one item in another type.
B. Each item in one type can link to many items in another type.
C. Items are not linked between types.
D. One item links to zero or many items in the same type.
Solution
Step 1: Understand relationship types
One-to-one means each item in one set matches exactly one item in another set.
Step 2: Apply to GraphQL context
In GraphQL, this means a field in one type points to exactly one item in another type.
Final Answer:
Each item in one type is linked to exactly one item in another type. -> Option A
Quick Check:
One-to-one = single matching pair [OK]
Hint: One-to-one means exactly one match per item [OK]
Common Mistakes:
Confusing one-to-one with one-to-many
Thinking items can link to multiple items
Assuming no links exist
2. Which of the following is the correct GraphQL syntax to define a one-to-one relationship between User and Profile types?
easy
A. type User { profile: String }
B. type User { profiles: [Profile] }
C. type User { profile: [Profile] }
D. type User { profile: Profile }
Solution
Step 1: Identify one-to-one field type
One-to-one means a single object, so the field should be of type Profile, not a list.
Step 2: Check syntax correctness
type User { profile: Profile } uses profile: Profile, which is correct syntax for one-to-one.
Final Answer:
type User { profile: Profile } -> Option D
Quick Check:
Single object field = one-to-one [OK]
Hint: Use single type, not list, for one-to-one fields [OK]
Common Mistakes:
Using list syntax for one-to-one
Using wrong field type like String
Missing colon or braces
3. Given the schema:
type User { id: ID! name: String profile: Profile }
type Profile { id: ID! bio: String }
And the query:
{ user(id: "1") { name profile { bio } } }
If user with id "1" has name "Alice" and profile bio "Loves cats", what is the expected output?
Hint: Returned data matches requested fields exactly [OK]
Common Mistakes:
Assuming profile is null when data exists
Omitting nested profile field
Expecting error when schema is correct
4. Identify the error in this GraphQL schema for one-to-one relationship:
type User { id: ID! profile: [Profile] }
type Profile { id: ID! user: User }
medium
A. User type must not have profile field.
B. Using list syntax [Profile] for one-to-one relationship is incorrect.
C. Missing exclamation mark after Profile.
D. Profile type cannot reference User.
Solution
Step 1: Check field type for one-to-one
One-to-one means a single object, not a list. Using [Profile] means many profiles.
Step 2: Confirm correct syntax
Field should be profile: Profile without brackets for one-to-one.
Final Answer:
Using list syntax [Profile] for one-to-one relationship is incorrect. -> Option B
Quick Check:
List means many, not one [OK]
Hint: No brackets for one-to-one fields [OK]
Common Mistakes:
Confusing one-to-one with one-to-many
Adding unnecessary exclamation marks
Thinking references are not allowed
5. You want to model a one-to-one relationship between Author and Biography in GraphQL. Which schema design ensures each author has exactly one biography and each biography belongs to exactly one author?
hard
A. type Author { id: ID! name: String biography: Biography } type Biography { id: ID! text: String }
B. type Author { id: ID! name: String biographies: [Biography]! } type Biography { id: ID! text: String author: Author }
C. type Author { id: ID! name: String biography: Biography! } type Biography { id: ID! text: String author: Author! }
D. type Author { id: ID! name: String biographyId: ID! } type Biography { id: ID! text: String }
Solution
Step 1: Check for required one-to-one fields
Both Author and Biography have non-nullable fields pointing to each other, ensuring exactly one match.
Step 2: Validate mutual references
Each Author has one Biography! and each Biography has one Author!, enforcing one-to-one.
Final Answer:
type Author { id: ID! name: String biography: Biography! } type Biography { id: ID! text: String author: Author! } -> Option C
Quick Check:
Mutual non-null fields = strict one-to-one [OK]
Hint: Use non-null mutual fields for strict one-to-one [OK]
Common Mistakes:
Using lists instead of single objects
Making fields nullable allowing missing links
Not linking both types mutually
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.