The short answer is that table design in a NoSQL database like DynamoDB is different than in a SQL database. DynamoDB is built to handle internet scale, which gives it some distinct advantages. ****What is internet scale?**** DynamoDB supports some of the largest scale applications in the world by providing consistent, single-digit millisecond response times at any scale. With DynamoDB, you can build applications with virtually unlimited throughput and storage. To enable this extreme size and performance for your data, there is a trade-off: you have to partition your data. Your table is laid out in storage by the primary key that you query by. To query by additional factors, you can create Global Secondary Indexes and Local Secondary Indexes. You can learn more about these indexes and how to use them here: https://medium.com/@jun711.g/aws-dynamodb-global-and-local-secondary-indexes-comparison-80f4c587b1d7 To data model in DynamoDB, you can use a tool called NoSQL Workbench. This tool is available for download here: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.html If you want to learn more about DynamoDB, there are some good workshops available here: https://amazon-dynamodb-labs.workshop.aws/ Answer from Ted Trentler on repost.aws
🌐
AWS
docs.aws.amazon.com › amazon dynamodb › developer guide › best practices for designing and architecting with dynamodb
Best practices for designing and architecting with DynamoDB - Amazon DynamoDB
1 month ago - Learn about best practices for designing and architecting with Amazon DynamoDB, a NoSQL database service. This page covers key differences between relational and NoSQL design, two key concepts for NoSQL design, and a general approach to NoSQL design. Receive specific guidance on partitions, ...
🌐
Reddit
reddit.com › r/aws › dynamodb single table deign: simple guide to modeling & querying on to many relationships. (using excel to plan out the queries)
r/aws on Reddit: DynamoDB Single Table Deign: Simple Guide To Modeling & Querying On To Many Relationships. (Using Excel to plan out the queries)
October 3, 2022 - I'd replace Excel by an AWS made tool called NoSQL Workbench ; it's dedicated to DynamoDB and allows you, among other things, to create "facets" (data access patterns) and add sample data so you can see the table either per facet or entirely. ... One of the things that I hear about single table design is that you need to understand all your access patterns up front.
🌐
Hello Interview
hellointerview.com › home › system design › key technologies › dynamodb
DynamoDB Deep Dive for System Design Interviews | Hello Interview System Design in a Hurry
February 15, 2026 - Unlike traditional RDBMS, DynamoDB is schema-less, meaning you don't need to define a schema before inserting data. This means items in the same table can have different sets of attributes, and new attributes can be added to items at any point ...
🌐
Medium
joudwawad.medium.com › dynamodb-data-modeling-fundamentals-9cfdf7f4dcb6
DynamoDB Data Modeling Fundamentals | Medium
June 11, 2026 - This is possible because DynamoDB ... as each other. ... In this design, different types of data are stored as items in the same table, and each item is identified by a unique sort key....
🌐
DeBrie Advisory
alexdebrie.com › posts › dynamodb-single-table
The What, Why, and When of Single-Table Design with DynamoDB | DeBrie Advisory
February 5, 2020 - The main reason for using a single table in DynamoDB is to retrieve multiple, heterogenous item types using a single request. While reducing the number of requests for an access pattern is the main reason for using a single-table design with DynamoDB, there are some other benefits as well.
Find elsewhere
🌐
DEV Community
dev.to › urielbitton › advanced-single-table-design-patterns-with-dynamodb-4g26
Advanced Single Table Design Patterns With DynamoDB - DEV Community
January 7, 2025 - These concepts will easily level up your understanding of DynamoDB and allow you to build more performant and scalable databases than ever before. The single table design in key-value databases aims to solve the issue of querying multiple entities to fetch related data and to reduce your table costs to one table’s minimal cost.
🌐
Medium
medium.com › @nabtechblog › advanced-design-patterns-for-amazon-dynamodb-c31d65d2e3de
Advanced Design Patterns for Amazon DynamoDB | by National Australia Bank | Medium
February 14, 2019 - SQL databases were designed when storage was expensive, and now that storage is cheap and compute is expensive, NoSQL is a better fit for systems optimized for maximum possible performance. OLTP = Online Transaction Processing (usage patterns known in advance) OLAP = Online Analytical Processing (ad-hoc unpredictable queries) DynamoDB is recommended for the following example use cases:
🌐
AWS
aws.amazon.com › blogs › compute › creating-a-single-table-design-with-amazon-dynamodb
Creating a single-table design with Amazon DynamoDB | Amazon Web Services
July 28, 2021 - This post looks at implementing common relational database patterns using DynamoDB. Instead of using multiple tables, the single-table design pattern can use adjacency lists to provide many-to-many relational functionality.
🌐
Reddit
reddit.com › r/aws › single table design for dynamodb: the reality
r/aws on Reddit: Single table design for DynamoDB: The reality
December 13, 2023 - Making a "single table" the primary design goal is bad - I don't think it takes any concrete numbers to see that. But if you want to learn more about the importance of item size, data types, the way that various request types are metered (with some numbers included), I would recommend the following videos. Seemingly small differences can manifest in surprisingly meaningful ways - there is a lot of nuance in DynamoDB data modeling.
🌐
Jeff Everhart
jeffreyeverhart.com › home › lessons learned designing dynamodb tables and queries
Lessons Learned Designing DynamoDB Tables and Queries - Jeff Everhart Jeff Everhart
September 9, 2023 - First we’ll take a look at the query operation of the DynamoDB client, which uses primary key attribute to perform an efficient lookup when we have the primary key of our record already. The benefit of using a query operation as opposed to a scan is that we only consume read capacity for the records that are returned from our query, not the total size of the table. This being said, it’s ideal for you to design you DynamoDB tables in a way that takes advantage of this feature of the query operation.
🌐
DataCamp
datacamp.com › tutorial › single-table-database-design-with-dynamodb
Performance and Scalability Unleashed: Mastering Single Table Database Design with DynamoDB | DataCamp
September 7, 2023 - The access heat map will look something like as follows: AWS DynamoDB is a fully managed, serverless, wide column key value store which means it supports many items, or rows, in a table but those items don’t necessarily have the same attributes.
Top answer
1 of 1
3

Looking at your access patterns, this is a possible table design. I'm not sure if it's going to really work with your TimeId, especially for the Local Secondary Index (see note below), but I hope it's a good starting point for you.

# Table
-----------------------------------------------------------
pk       | sk                   | value | other attributes
-----------------------------------------------------------
TimeId   | GAME#TEAM{teamname}  | true  | ...
TimeId   | STATS#TEAM{teamname} |       | ...
GameId   | GAME                 |       | general game data (*)
TeamName | TEAM                 |       | general team data (*)
 
# Local Secondary Index
-------------------------------------------------------------------------------
pk from Table as pk | value from Table as sk | sk from Table + other attributes
-------------------------------------------------------------------------------
TimeId              | true                   | GAME#Team{teamname} | ...

With this Table and Local Secondary Index you can satisfy all access patterns with the following queries:

  1. Retrieve all games by timeId:

    Query Table with pk: {timeId}

  2. Retrieve all games per timeId and by TeamName

    Query table with pk: {timeId}, sk: GAME#TEAM{teamname}

  3. Retrieve all games per timeId and if value = true

    Query LSI with pk: {timeId}, sk: true

  4. Retrieve all teamStats per timeId

    Query table with pk: {timeId}, sk: begins with 'STATS'

  5. Retrieve all teamStats by timeId and TeamName

    Query table with pk: {timeId}, sk: STATS#TEAM{teamname}

*: I've also added the following two items, as I assume that there are cases where you want to retrieve general information about a specific game or team as well. This is just an assumption based on my experience and might be unnecessary in your case:

  1. Retrieve general game information

    Query table with pk: {GameId}

  2. Retrieve general team information

    Query table with pk: {TeamName}

Note: I don't know what value = true stands for, but for the secondary index to work in my model, you need to make sure that each combination of pk = TimeId and value = true is unique.

To learn more about single-table design on DynamoDB, please read Alex DeBrie's excellent article The What, Why, and When of Single-Table Design with DynamoDB.

🌐
Emshea
emshea.com › post › part-1-dynamodb-single-table-design
Part 1: Refactoring to single-table design in Amazon DynamoDB
This blog post is Part 1 in a series on refactoring my daily Chinese vocab app to a single-table design in Amazon DynamoDB. In this post, I explain why I chose single-table design, the resources I used to learn it, and walk through the design process and a few example access patterns.
🌐
ScyllaDB
scylladb.com › learn › dynamodb › introduction-to-dynamodb
Introduction to DynamoDB | ScyllaDB
January 13, 2025 - While DynamoDB was inspired by the original paper, it was not beholden to it. Many things had changed in the world of Big Data over the intervening years since the paper was published. It was designed to build on top of a “core set of strong distributed systems principles resulting in an ultra-scalable and highly reliable database system.”
🌐
Simple AWS
newsletter.simpleaws.dev › p › dynamodb-database-design
Database Design in Amazon DynamoDB
January 12, 2026 - While it describes single table design accurately, several new releases have made single table design no longer the best choice. The current best option is single table per domain, which clusters groups of entities that are semantically related and are queried together, and places each cluster in a single table. I describe this approach in an updated article: DynamoDB Database Design in 2026.
🌐
System Design School
systemdesignschool.io › blog › dynamodb-single-table-design
Optimizing Database Performance: Advantages of Using Amazon''s DynamoDB Single Table Design in Serverless Applications
Reduced Complexity: With the single table design, developers deal with only one table schema, making it simple to manage over time. Greater Performance: By storing all your application data entities in one place, you eliminate the need for expensive join operations in traditional SQL databases. Cost-Effective: With fewer API operations and less index storage for identical datasets, costs are minimized. Enhanced Flexibility: DynamoDB Single Table Design offers dynamism.