Pros of having surrogate key + unique business fields
This pattern separates technical identity from business rules — which is the core reason it scales in real systems.
1️⃣ Stable identity + flexible business rules
Why it matters
Business data changes. Primary keys should not.
Example
users (
id BIGSERIAL PRIMARY KEY, -- surrogate key
email TEXT NOT NULL,
UNIQUE (email)
)
Scenario:
- User changes email
emailis updated- No foreign keys break
idremains stable
If email were the PK:
❌ FK cascade pain
❌ Cache invalidation chaos
❌ API contracts break
2️⃣ Strong data integrity (DB-enforced)
Why it matters
Only the database can guarantee global correctness.
Example
UNIQUE (email)
Two concurrent requests try to create the same user:
- App-level check → race condition
- DB constraint → atomic guarantee
This is critical in:
- Distributed systems
- Microservices
- Multi-node deployments
This is critical in:
- Distributed systems
- Microservices
- Multi-node deployments
3️⃣ Better performance & smaller indexes
Why it matters
Surrogate keys are:
- Small
- Fixed-size
- Cache-friendly
Example
orders.user_id → users.id
vs
orders.user_email → users.email
Benefits:
- Faster joins
- Smaller B-tree indexes
- Less memory & IO
This matters at scale.
4️⃣ Cleaner foreign keys & schema evolution
Why it matters
Foreign keys define coupling.
Example
orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id)
)
If business rules change:
- Email format changes
- Multiple emails per user
- Email becomes nullable
➡️ No FK refactor required.
5️⃣ ORM & tooling friendliness
Why it matters
Most ORMs expect:
- Single-column PK
- Immutable identity
Example (JPA mindset)
@Entity
class User {
@Id
Long id;
@Column(unique = true)
String email;
}
Composite or natural PKs:
- Complicate mappings
- Break lazy loading
- Hurt caching
6️⃣ Clear separation of concerns (conceptual clarity)
| Layer | Responsibility |
|---|---|
| Surrogate key | Technical identity |
| UNIQUE fields | Business rules |
| FK relations | Data consistency |
This makes schemas:
- Easier to reason about
- Easier to review
- Easier to evolve
Senior engineers think this way.
7️⃣ Easier debugging & auditing
Example
User(id=91238123, email=alex@example.com)
IDs are immutable
Business data can change
Logs stay consistent
Audits stay meaningful
Real-world examples (very interview-friendly)
Example 1: Users
id (PK) -- surrogate
email (UNIQUE) -- natural key
Example 2: Orders
id (PK)
order_number (UNIQUE) -- shown to customers
Example 3: Accounts
id (PK)
iban (UNIQUE)
Example 4: Products
id (PK)
sku (UNIQUE)
When this pattern is NOT ideal (be honest)
- Truly immutable natural keys
- ISO country codes
- Currency codes
Even then — teams often still use surrogate IDs for consistency.
One-sentence interview answer (perfect)
Using a surrogate key with unique business fields gives us a stable technical identity while still enforcing business-level uniqueness and correctness at the database level.
What interviewers hear when you say this ✅
“This person has designed real production schemas.”