Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@

## References

| ファイル | 内容 |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `docs/requirements.md` | 要件概要(目的・スコープ・方針) |
| `docs/data-model.md` | データモデルに関するコンテクスト(メタデータ) |
| `docs/adr.md` | 意思決定記録(なぜその選択か) |
| `docs/roadmap.md` | ロードマップ+マイルストーン |
| `docs/ui-mockups/` | MVP の UI モック 9 枚(=「UI をモックに合わせる」の完了条件)。`assets/` はモックが使う SVG で**設計資料**(ここから import しない。実装時に `src/` へ移す) |
| `CONTRIBUTING.md` | 開発フロー・コードスタイル・PR |
| ファイル | 内容 |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `docs/requirements.md` | 要件概要(目的・スコープ・方針) |
| `docs/data-model.md` | データモデルに関するコンテクスト(メタデータ) |
| `docs/adr.md` | 意思決定記録(なぜその選択か) |
| `docs/roadmap.md` | ロードマップ+マイルストーン |
| `docs/ui-mockups/` | MVP の UI モック 10 枚(=「UI をモックに合わせる」の完了条件)。`assets/` はモックが使う SVG で**設計資料**(ここから import しない。実装時に `src/` へ移す) |
| `CONTRIBUTING.md` | 開発フロー・コードスタイル・PR |
4 changes: 2 additions & 2 deletions docs/data-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@

同じ物を 2 回登録できないようにしたい。ただし `name`・`age`・`caskType`・`isLimited` の 4 列に一意制約を張っても効かない。**Postgres は NULL 同士を別の値として扱う**ため、年数も樽も空の「山崎」は何行でも登録できてしまう。

そこで 4 項目を**区切り文字でつないだ**文字列(`山崎|12|シェリー|0`)を別の列に持ち、**`userId` との複合で一意制約を張る**。空欄は空文字になるので NULL が消え、比較が効く
そこで 4 項目を**区切り文字でつないだ**文字列(銘柄名␟年数␟樽␟限定版)を別の列に持ち、**`userId` との複合で一意制約を張る**。つなぐ前に NFKC 変換・空白除去(**内部の空白も含めて全て**)・小文字化を掛けて表記ゆれを吸収し、空欄は空文字にする。NULL が消えるので比較が効く

区切り文字を省くと、銘柄名「山崎12」+年数なしと、銘柄名「山崎」+12 年が同じ文字列になる。`userId` を外すと、誰かが登録済みのボトルを他の人が登録できなくなる。
区切り文字を省くと、銘柄名「山崎12」+年数なしと、銘柄名「山崎」+12 年が同じ文字列になる。ただし**区切りには入力に現れない文字を使い、その文字が来たら共有スキーマで弾く**。銘柄名と樽は自由入力で、API には UI を通さずに送れるため、「入力に現れないはず」という前提だけでは衝突を防げない。`userId` を外すと、誰かが登録済みのボトルを他の人が登録できなくなる。

### Prisma 6 → 7 で変わったこと

Expand Down
Loading
Loading