Bird
Raised Fist0
SQLquery~10 mins

One-to-one relationship design in SQL - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - One-to-one relationship design
Create Table A
Create Table B
Add Primary Key to A
Add Primary Key to B
Add Foreign Key in B referencing A
Enforce Unique Constraint on Foreign Key in B
One-to-One Relationship Established
Create two tables each with a primary key. Then add a foreign key in one table referencing the other, with a unique constraint to ensure one-to-one mapping.
Execution Sample
SQL
CREATE TABLE Person (
  PersonID INT PRIMARY KEY,
  Name VARCHAR(100)
);

CREATE TABLE Passport (
  PassportID INT PRIMARY KEY,
  PersonID INT UNIQUE,
  FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
);
Creates two tables Person and Passport with a one-to-one relationship via PersonID.
Execution Table
StepActionResultNotes
1Create Person table with PersonID primary keyPerson table createdPersonID uniquely identifies each person
2Create Passport table with PassportID primary keyPassport table createdPassportID uniquely identifies each passport
3Add PersonID column to Passport with UNIQUE constraintPersonID column addedEnsures one passport per person
4Add FOREIGN KEY constraint on Passport.PersonID referencing Person.PersonIDForeign key constraint addedLinks passport to person
5Insert PersonID=1, Name='Alice' into PersonRow insertedPerson Alice added
6Insert PassportID=101, PersonID=1 into PassportRow insertedPassport linked to Alice
7Attempt to insert PassportID=102, PersonID=1 into PassportError: UNIQUE constraint violationCannot assign second passport to same person
8Attempt to insert PassportID=103, PersonID=2 into PassportError: FOREIGN KEY violationPersonID=2 does not exist in Person table
9Insert PersonID=2, Name='Bob' into PersonRow insertedPerson Bob added
10Insert PassportID=103, PersonID=2 into PassportRow insertedPassport linked to Bob
💡 Execution stops after successful inserts and constraint violations prevent invalid data.
Variable Tracker
TableStartAfter Step 5After Step 6After Step 9After Step 10
Personempty[{PersonID:1, Name:'Alice'}][{PersonID:1, Name:'Alice'}][{PersonID:1, Name:'Alice'}, {PersonID:2, Name:'Bob'}][{PersonID:1, Name:'Alice'}, {PersonID:2, Name:'Bob'}]
Passportemptyempty[{PassportID:101, PersonID:1}][{PassportID:101, PersonID:1}][{PassportID:101, PersonID:1}, {PassportID:103, PersonID:2}]
Key Moments - 3 Insights
Why does inserting a second passport with the same PersonID fail?
Because the UNIQUE constraint on Passport.PersonID prevents multiple passports linking to the same person, ensuring one-to-one relationship (see Step 7 in execution_table).
Why can't we insert a passport with a PersonID that doesn't exist in Person?
The FOREIGN KEY constraint requires the PersonID in Passport to exist in Person table, so inserting a non-existent PersonID causes an error (see Step 8).
Why do we add UNIQUE constraint on the foreign key column?
To ensure each PersonID appears only once in Passport, enforcing one-to-one instead of one-to-many relationship.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what happens at Step 7 when inserting PassportID=102 with PersonID=1?
ARow inserted successfully
BError due to UNIQUE constraint violation
CError due to FOREIGN KEY violation
DNo action taken
💡 Hint
Check Step 7 in execution_table where the UNIQUE constraint on PersonID causes the error.
At which step does the Person table first get a row inserted?
AStep 1
BStep 3
CStep 5
DStep 6
💡 Hint
Look at execution_table rows for when PersonID=1 is inserted.
If we remove the UNIQUE constraint on Passport.PersonID, what would happen?
AMultiple passports can link to the same person
BForeign key constraint will fail
CPerson table will reject inserts
DNo change in behavior
💡 Hint
Refer to key_moments explaining the role of UNIQUE constraint in enforcing one-to-one.
Concept Snapshot
One-to-one relationship design:
- Create two tables each with a primary key.
- Add a foreign key in one table referencing the other.
- Add UNIQUE constraint on the foreign key column.
- This ensures each row in one table matches exactly one row in the other.
- Prevents duplicates and enforces strict pairing.
Full Transcript
This visual execution trace shows how to design a one-to-one relationship in SQL. First, we create two tables Person and Passport, each with a primary key. Then, we add a PersonID column to Passport with a UNIQUE constraint and a foreign key referencing Person.PersonID. This setup ensures each passport links to exactly one person and vice versa. The execution table walks through creating tables, adding constraints, inserting valid rows, and shows errors when constraints are violated. The variable tracker shows how data changes in both tables after each step. Key moments clarify why UNIQUE and foreign key constraints are needed. The quiz tests understanding of constraint enforcement and insertion order. The snapshot summarizes the key steps to enforce one-to-one relationships in databases.

Practice

(1/5)
1. What is a key characteristic of a one-to-one relationship in database design?
easy
A. Each row in one table matches exactly one row in another table
B. Each row in one table can match many rows in another table
C. Rows in both tables have no connection
D. One table contains all data without links

Solution

  1. Step 1: Understand one-to-one relationship meaning

    A one-to-one relationship means each record in one table corresponds to exactly one record in another table.
  2. Step 2: Compare options to definition

    Each row in one table matches exactly one row in another table matches this definition perfectly, while others describe different relationships or no relationship.
  3. Final Answer:

    Each row in one table matches exactly one row in another table -> Option A
  4. Quick Check:

    One-to-one = single matching row [OK]
Hint: One-to-one means one row links to exactly one row [OK]
Common Mistakes:
  • Confusing one-to-one with one-to-many
  • Thinking tables have no relation
  • Assuming one table holds all data
2. Which SQL constraint is commonly used to enforce a one-to-one relationship between two tables?
easy
A. FOREIGN KEY without UNIQUE
B. CHECK constraint on any column
C. UNIQUE constraint on the foreign key column
D. NOT NULL constraint on primary key

Solution

  1. Step 1: Identify constraint enforcing uniqueness

    To ensure one-to-one, the foreign key must be unique so no duplicates link to the same row.
  2. Step 2: Match constraints to this need

    UNIQUE constraint on the foreign key column enforces this, while FOREIGN KEY alone does not guarantee uniqueness.
  3. Final Answer:

    UNIQUE constraint on the foreign key column -> Option C
  4. Quick Check:

    Unique foreign key = one-to-one [OK]
Hint: Use UNIQUE on foreign key to enforce one-to-one [OK]
Common Mistakes:
  • Using FOREIGN KEY without UNIQUE allows many-to-one
  • Confusing CHECK with uniqueness
  • Assuming NOT NULL enforces one-to-one
3. Given these tables:
CREATE TABLE Person (
  PersonID INT PRIMARY KEY,
  Name VARCHAR(50)
);

CREATE TABLE Passport (
  PassportID INT PRIMARY KEY,
  PersonID INT UNIQUE,
  Number VARCHAR(20),
  FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
);

What does the UNIQUE constraint on PersonID in Passport ensure?
medium
A. Each person can have multiple passports
B. Each passport belongs to exactly one person, and each person has at most one passport
C. PersonID can be null in Passport
D. PassportID can be duplicated

Solution

  1. Step 1: Understand UNIQUE on PersonID in Passport

    The UNIQUE constraint means no two rows in Passport can have the same PersonID, so one person links to at most one passport.
  2. Step 2: Analyze relationship enforced

    Since Passport has a foreign key to Person and PersonID is unique, each passport belongs to one person, and each person can have only one passport.
  3. Final Answer:

    Each passport belongs to exactly one person, and each person has at most one passport -> Option B
  4. Quick Check:

    Unique foreign key = one-to-one link [OK]
Hint: UNIQUE foreign key means one-to-one link [OK]
Common Mistakes:
  • Thinking one person can have many passports
  • Ignoring UNIQUE constraint effect
  • Assuming null allowed without checking
4. Consider this table design:
CREATE TABLE Employee (
  EmployeeID INT PRIMARY KEY,
  Name VARCHAR(50)
);

CREATE TABLE EmployeeDetails (
  DetailID INT PRIMARY KEY,
  EmployeeID INT,
  Address VARCHAR(100),
  FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID)
);

What is missing to enforce a one-to-one relationship between Employee and EmployeeDetails?
medium
A. Add PRIMARY KEY on EmployeeID in EmployeeDetails
B. Add NOT NULL constraint on EmployeeID in EmployeeDetails
C. Remove FOREIGN KEY constraint
D. Add UNIQUE constraint on EmployeeID in EmployeeDetails

Solution

  1. Step 1: Identify current constraints

    EmployeeDetails has a foreign key to Employee but no uniqueness on EmployeeID, so multiple details can link to one employee.
  2. Step 2: Determine what enforces one-to-one

    Adding UNIQUE on EmployeeID ensures each employee links to at most one detail, enforcing one-to-one.
  3. Final Answer:

    Add UNIQUE constraint on EmployeeID in EmployeeDetails -> Option D
  4. Quick Check:

    Unique foreign key needed for one-to-one [OK]
Hint: Add UNIQUE on foreign key column for one-to-one [OK]
Common Mistakes:
  • Assuming NOT NULL enforces one-to-one
  • Removing foreign key breaks relationship
  • Confusing primary key with foreign key uniqueness
5. You want to split user data into two tables: User and UserProfile. Each user has exactly one profile. Which design best enforces this one-to-one relationship?
hard
A. User and UserProfile share the same primary key column
B. UserProfile has a foreign key to User without UNIQUE constraint
C. UserProfile has no foreign key but a separate primary key
D. UserProfile has a foreign key to User with UNIQUE constraint on that foreign key

Solution

  1. Step 1: Understand one-to-one enforcement methods

    One way is to share the same primary key in both tables, ensuring exactly one matching row.
  2. Step 2: Compare options

    User and UserProfile share the same primary key column uses the same primary key in both tables, which is a strong one-to-one design. UserProfile has a foreign key to User with UNIQUE constraint on that foreign key is valid but less strict. Options B and C do not enforce one-to-one properly.
  3. Final Answer:

    User and UserProfile share the same primary key column -> Option A
  4. Quick Check:

    Shared primary key = strict one-to-one [OK]
Hint: Use shared primary key for strict one-to-one [OK]
Common Mistakes:
  • Ignoring uniqueness on foreign key
  • Assuming foreign key alone enforces one-to-one
  • Not linking tables properly