メインコンテンツまでスキップ

第236章:DB設計(テーブル2〜4個で十分)🗃️✨

卒業制作のDB設計は、**「最小で動く形」**にするのがいちばん強いよ〜!😊🌸 ここでは、2〜4テーブルでスッキリまとまる設計の作り方をやっていくね✍️💕


🎯 この章のゴール

  • 「テーブルって何を作ればいいの?」が迷わなくなる🧠✨
  • 2〜4テーブルで卒業制作に十分なDB設計ができる✅
  • 1対多 / 多対多がざっくり描けるようになる🪄

🧁 まず結論:テーブルは“少ないほど正義”🥰

卒業制作で最初からテーブル増やすと… 「どこで何を保存してるのか分からん😵‍💫」ってなりがち!

だから最初はこれでOK👇

  • 2テーブル:ユーザー+メインデータ(例:User + Note)📝
  • 3テーブル:ユーザー+メイン+履歴/投稿(例:User + Cafe + Review)☕
  • 4テーブル:多対多(中間テーブル)が必要なとき(例:Tag付け)🏷️

🧭 DB設計の手順(この順でやると迷子にならない)🗺️✨

ポイントは **「画面」より先に「データ」**を決めることだよ😊✨ 画面は後からいくらでも直せるけど、DBは後から直すと大変になりがち…!😇


🧪 例題:カフェメモアプリ(3テーブルで完成)☕📒✨

「キャンパス周辺のカフェをメモして、レビューできる」想定ね🍰💕

✅ まず機能を最小にする(例)

  • ログイン(ユーザーがいる)🔑
  • カフェを登録できる☕
  • レビューできる⭐📝

ここから「名詞」を抜き出すと…

  • ユーザー
  • カフェ
  • レビュー

3テーブルでOK! 🎉


🧩 テーブル案(最小セット)📌

1) users(ユーザー)

  • id(主キー)
  • name
  • email(ユニーク)
  • createdAt / updatedAt(作成日/更新日)

2) cafes(カフェ)

  • id(主キー)
  • name
  • area(最寄り駅とか)
  • url(任意)
  • createdAt / updatedAt

3) reviews(レビュー)

  • id(主キー)
  • userId(誰が書いた?)
  • cafeId(どのカフェ?)
  • rating(1〜5)
  • comment
  • createdAt / updatedAt

🧠 関係(リレーション)を決めよう✨

  • ユーザー1人はレビューをたくさん書ける → User 1 : Review 多
  • カフェ1つはレビューをたくさん持てる → Cafe 1 : Review 多

🧷 制約(ルール)をちょい足しすると強い💪✨

最低限おすすめ👇

  • users.email は unique(同じメールで2人作れない)📧🔒
  • reviews.rating は 1〜5(これはDBより、まずはサーバー側でバリデーションでもOK)⭐
  • reviews は userId と cafeId を必須(誰の何のレビューか分からないのは事故)💥

削除の扱い(超大事)も決めとくと安心😊

  • ユーザー削除 → その人のレビューはどうする?(消す?残す?)🧹
  • カフェ削除 → 紐づくレビューはどうする?(普通は一緒に消すこと多い)🗑️

🧪 Prismaでのイメージ(雰囲気だけ)🧊✨

※「こういう形になるよ〜」の参考ね😊

model User {
id String @id @default(cuid())
name String
email String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

reviews Review[]
}

model Cafe {
id String @id @default(cuid())
name String
area String
url String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

reviews Review[]
}

model Review {
id String @id @default(cuid())
userId String
cafeId String
rating Int
comment String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

user User @relation(fields: [userId], references: [id])
cafe Cafe @relation(fields: [cafeId], references: [id])
}

✅ この章の成果物(これが書けたら勝ち)🏁✨

あなたの卒業制作について、これを埋めてみてね😊📝💕

  • テーブルは 2〜4個にした?

  • それぞれのテーブルに

    • 主キー(id)
    • createdAt / updatedAt がある?⏰
  • 関係は決まった?(1対多 / 多対多)🔗

  • unique にしたいものは決めた?(例:email)🔒

  • 削除時の扱いを一言で決めた?(消す/残す)🗑️


次の章でUI設計に入るとき、今のDB設計があるだけでめっちゃラクになるよ〜!😊💖