Skip to content

Single-Table Design

Single-Table Design is an important part of building production-ready DynamoDB systems. This lesson explains what single-table design means, how it works, and how to apply it with practical examples you can reuse.

Single-Table Design Overview

At its core, single-table design is about doing one thing well inside your DynamoDB project. Once you understand the pattern, you can apply it consistently across features and teams.

Good single-table design pays off across the whole codebase: fewer surprises, easier testing, and smoother onboarding. The snippet below is a solid starting point.

// single-table design: many entity types share one table
// USER#42 / PROFILE           -> user profile
// USER#42 / ORDER#2024-001    -> an order for that user
// ORDER#2024-001 / ITEM#1     -> a line item

const key = { pk: 'USER#42', sk: 'ORDER#2024-001' };

Single-table design models relationships through carefully composed partition and sort keys.

Single-Table Design Example

import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';

const docClient = DynamoDBDocumentClient.from(new DynamoDBClient({}));
// docClient.send(new PutCommand(...)) etc.
  • Start from a minimal Single-Table Design example and grow it only as needed.
  • Keep configuration explicit so Single-Table Design behaves the same in every environment.
  • Name things clearly so teammates understand your Single-Table Design at a glance.
  • Add tests around Single-Table Design early to lock in expected behaviour.

Amazon DynamoDB Cheatsheet

Handy DynamoDB (AWS SDK v3) reference related to single-table design.

Operation Command Purpose
Create/replace PutCommand Write an item
Read one GetCommand Fetch by primary key
Update UpdateCommand Modify attributes
Delete DeleteCommand Remove an item
Query QueryCommand Efficient key-based read
Scan ScanCommand Full-table read (avoid)
Transaction TransactWriteCommand Atomic multi-item writes

How Single-Table Design Works in DynamoDB

Single-Table Design builds on DynamoDB's key-value and document model, where every item lives in a partition chosen by its partition key and is optionally ordered by a sort key.

Single-table design models relationships through carefully composed partition and sort keys.

  • Design access patterns first, then model keys around them.
  • Prefer Query over Scan for predictable performance.
  • Use expressions to read and write only what you need.
  • Keep items small and avoid hot partitions.

Practical Guidance for Single-Table Design

In production, single-table design should be cost-aware and resilient. Right-size capacity, handle throttling with retries, and lean on indexes to support your query patterns.

Concern Recommendation
Performance Query by key; avoid table scans
Cost Use on-demand or right-sized provisioned capacity
Modeling Design for known access patterns
Reliability Retry throttled requests with backoff

Common Mistakes

  • Copying single-table design snippets without understanding what each line does.
  • Skipping error handling and edge cases when wiring up single-table design.
  • Leaving single-table design untested, so regressions slip into production.
  • Over-engineering single-table design before you actually need the extra flexibility.

Key Takeaways

  • Single-Table Design is a core part of working effectively with DynamoDB.
  • Start small and keep single-table design focused on a single responsibility.
  • Apply consistent patterns so single-table design scales across your project.
  • Test and document single-table design to keep it maintainable over time.

Pro Tip

Bookmark this single-table design pattern and reuse it. Consistency across your DynamoDB codebase is worth more than clever one-off solutions.