aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit
feat(db): Aurora DSQL の FOREIGN KEY 対応を取り込み、参照整合性を DB 側へ移譲する
- Vorherrschende Sprache
- TypeScript
- Sterne
- 229
- Forks
- 45
- Ø Merge
- 1 Min.
- Gemergte PRs (30 T.)
- 4
Beschreibung
## Problem
Aurora DSQL が FOREIGN KEY に対応しました([Working with foreign key constraints](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/working-with-foreign-key-constraints.html))。`ADD CONSTRAINT` に `NOT VALID` が必要な点を除けば、ほぼ Postgres と同じように書けます。
一方 kit は FK 非対応前提のままで、`packages/db/src/dsql-compat.ts` が生成 SQL から `REFERENCES` / `FOREIGN KEY` を無言で削除します。schema.ts に `.references()` を書いてもエラーにならず、FK なしのテーブルができます。`DROP CONSTRAINT` も "Table recreation required." で弾かれますが、こちらも今は使えます。
FK 非対応時代は「無言で削除」が妥当でしたが、現在の仕様であればDB側でも参照整合性を設けるのが好ましそうです。
## Proposed solution
- `dsql-compat.ts`: FK をそのまま通し、`ADD CONSTRAINT` には `NOT VALID` を自動付与(`CREATE INDEX` → `ASYNC` と同じ方針)。`DROP CONSTRAINT` も許可する
- サンプルスキーマ: `TodoItem.userId` → `User.id` に FK を追加(参照アクションは既定の NO ACTION)
- アプリ層: `safe-action.ts` の users 行の存在チェックを削除。FK があれば重複するため
- `AGENTS.md` / `packages/db/README.md` と ADR を更新
`ALTER TABLE` 許可リスト全体の見直しは #220 のスコープなので、ここでは FK 周りだけに絞ります。
Beitragsleitfaden
Rechercherichtung
Beginne mit packages/db/src/dsql-compat.ts und vergleiche die Behandlung von Foreign Keys mit dem bestehenden CREATE INDEX → ASYNC-Verhalten. Untersuche anschließend safe-action.ts, das Beispielschema, AGENTS.md, packages/db/README.md und die relevante ADR. Als abgeschlossen gilt die Änderung, wenn der FK-SQL mit dem erforderlichen ADD CONSTRAINT-Verhalten erhalten bleibt, DROP CONSTRAINT erlaubt ist, doppelte Anwendungsprüfungen entfernt sind und Schema sowie Dokumentation die Änderung widerspiegeln.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- aws, sql, typescript
- Bereich
- backend, databases, documentation
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 68/100