1. なぜ複数テーブルではなく「シングルテーブル」なのか?
DynamoDBではテーブル間のJOINが不可能です。従来のRDBMSのようにテーブルを正規化して分割すると、1つの画面を表示するために複数回のネットワークラウンドトリップが発生し、レイテンシと課金コストが跳ね上がります。
2. パーティションキー(PK)とソートキー(SK)の多重定義
ジェネリックなPK/SK属性名を使用し、プレフィックスを付けることで複数のエンティティを1つのテーブルに共存させます。
// ユーザーエンティティ
PK: USER#1001 SK: METADATA#1001
// 注文エンティティ
PK: USER#1001 SK: ORDER#20260927#9981
// 注文明細
PK: ORDER#9981 SK: ITEM#SKU4821
3. GSI(グローバルセカンダリインデックス)による逆引き検索
GSI1-PKとGSI1-SKを定義することで、「特定のユーザーの注文一覧」も「特定の注文の状態」も、すべて単一のQueryリクエスト(1桁ミリ秒)で取得可能になります。