dynamodb-single-table
DynamoDB Single-Table Design Pipeline
This skill orchestrates a 3-step pipeline for designing and implementing a DynamoDB single-table design. Use it when the user wants the full workflow or needs guidance on which step to take next.
Pipeline Overview
Step 1 Step 2 Step 3
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Access Patterns │ ──> │ Table Design │ ──> │ Query Interfaces │
│ │ │ │ │ │
│ Elicit entities │ │ Design PK/SK/GSI │ │ Generate method │
│ & access patterns │ │ Map AP -> Query │ │ signatures & types│
│ Output: .md file │ │ Output: .md file │ │ Output: .md file │
└──────────────────┘ └──────────────────┘ └──────────────────┘
Skill: Skill: Skill:
dynamodb-access-patterns dynamodb-table-design dynamodb-query-interfaces
Step 0: Detect Pipeline State
Before routing, check if the user's project already has pipeline artifacts. Search for files matching these patterns:
**/access-patterns.mdor**/access_patterns.md**/table-design.mdor**/table_design.md**/query-interfaces.mdor**/query_interfaces.md
Also check common locations:
docs/dynamodb/docs/- Project root
Based on what exists:
| Files Found | State | Action |
|---|---|---|
| None | Fresh start | Route to dynamodb-access-patterns |
| Access patterns only | Step 1 complete | Route to dynamodb-table-design with the file path |
| Access patterns + table design | Steps 1-2 complete | Route to dynamodb-query-interfaces with the file path |
| All three files | Pipeline complete | Ask if they want to add entities, modify, or review |
| Table design only (no access patterns) | Partial/legacy | Warn that access patterns should be documented; offer to backfill or continue to Step 3 |
Tell the user what you found:
I found existing DynamoDB design artifacts in your project:
[x] Access Patterns: docs/dynamodb/access-patterns.md
[x] Table Design: docs/dynamodb/table-design.md
[ ] Query Interfaces: (not found)
You're ready for Step 3. Should I generate the query interfaces from
your table design?
How to Route
| User wants to... | Route to |
|---|---|
| Start designing from scratch | dynamodb-access-patterns |
| Define entities and how they'll be queried | dynamodb-access-patterns |
| Has access patterns, needs key design | dynamodb-table-design |
| Has a table design, needs code interfaces | dynamodb-query-interfaces |
| Add a new entity to an existing table | Start with dynamodb-access-patterns for the new entity, then continue the pipeline |
| Understand single-table design concepts | Answer directly using the concepts below |
Core Concepts (Quick Reference)
What is Single-Table Design?
All entity types live in ONE DynamoDB table. You pre-join related data into item collections (items sharing a partition key) so they can be fetched in a single Query call. This eliminates the need for joins and reduces network round-trips.
When to Use Single-Table Design
- You need sub-30ms response times at any scale
- You have well-defined access patterns that won't change frequently
- You need to fetch multiple entity types in a single request
- You're building OLTP workloads (not analytics)
When NOT to Use Single-Table Design
- Your access patterns are still evolving rapidly (early-stage startup)
- You use GraphQL with per-type resolvers (the resolver model negates single-query benefits)
- You need flexible ad-hoc queries (consider a relational database instead)
Key Principles
- Access patterns first. Never design keys without knowing your queries.
- Pre-join into item collections. Related data shares a partition key.
- One table, generic key names. Use
pk/sk(notuserId/orderId). - GSIs for alternate access patterns. Reuse before creating new ones (max 20).
- Composite sort keys for multi-field sorting. Encode hierarchy in the SK.
- No Scans. Every query must use a partition key. If you need Scan, redesign.
- Transactions for multi-item writes. Ensure consistency across item collections.
Artifacts Produced
By the end of the pipeline, the user will have 3 files:
| File | Content | Produced by |
|---|---|---|
access-patterns.md |
Entities, attributes, all read/write/delete patterns | dynamodb-access-patterns |
table-design.md |
PK/SK design, GSIs, access pattern -> query mapping | dynamodb-table-design |
query-interfaces.md |
Entity types, key builders, repository method signatures | dynamodb-query-interfaces |
These files serve as the specification for the implementation phase.
More from juancarestre/dynamodb-skills
dynamodb-access-patterns
Interactive skill for eliciting, formalizing, and persisting DynamoDB access patterns. Use when the user wants to start designing a DynamoDB table, define entities, or document how their application will read and write data. This is Step 1 of a 3-step pipeline: access patterns -> table design -> query interfaces. The output is a structured .md file that feeds into the dynamodb-table-design skill.
22dynamodb-query-interfaces
Generates language-agnostic repository interfaces (method signatures, input/output types, and entity models) from a DynamoDB table design document. Use when the user has a table design .md file (from dynamodb-table-design skill) and wants to generate the code skeleton for their data access layer. This is Step 3 of a 3-step pipeline: access patterns -> table design -> query interfaces.
21dynamodb-table-design
Designs a DynamoDB single-table structure from a documented set of access patterns. Use when the user has an access patterns .md file (from dynamodb-access-patterns skill) and wants to design partition keys, sort keys, GSIs, composite keys, and map every access pattern to a concrete DynamoDB query operation. This is Step 2 of a 3-step pipeline: access patterns -> table design -> query interfaces.
19