One index, many questions
Different entity types share generic index keys, so one index serves several access patterns.
Why
Here one table holds projects and tasks, and one index, GSI1, serves both. The trick is generic key names: projects write OWNER#ada into gsi1pk, tasks write STATUS#doing into the same attribute.
So one index answers 'Ada's projects' and 'tasks in progress': two access patterns, two entity types, one set of index keys. This overloading is the heart of single-table design.
Generic, overloaded keys let one index do the work of many. That is how a single table serves a whole application.
These rows are real and already here. Running an operation against them downloads a DynamoDB-compatible engine, about 850 KB, and executes it in this tab.
On GSI1, project items set gsi1pk to OWNER#ada. So this Query returns Ada's projects.
Run an operation to see the raw engine response.