3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIにDB設計を丸投げしていたら、上司に「自分の軸ある?」と言われた話

3
Posted at

はじめに

Claude Code、Codex、Cursor——AIを使えば、1人で数週間あればPOC(概念実証)レベルのWebアプリが作れる時代になりました。

複数人で何ヶ月もかけていたものが、複数のAIエージェントを並列で動かせば、一人でも形にできる。実際に自分も、アカウント管理アプリの開発でAIに要件定義書・基本設計・詳細設計・DB設計まで全部作らせました。

最初はそれで良いと思っていたんです。AIが作ってくれるなら、自分は「AIの出力をチェックする側」に回ればいいんだと。

でも、それは大きな勘違いでした。

想定読者
AIでアプリ開発を始めたが、設計に自信がないジュニアエンジニア

この記事でわかること

  • AI時代になぜDB設計を「自分で」学ぶべきか(実体験ベース)
  • DB設計の最低限の基礎(正規化・主キー/外部キー・制約・ER図)

AIが設計して、AIがレビューする——何が問題か

自分がやっていたのは、こういうフローでした。

AIが設計して、AIがレビューして、AIがOKと言う。一見問題なさそうですよね。

でもこのフロー、自分がどこにもいないんです。

上司からこう言われました。

「DB設計の基礎がない状態で、この構造が正しいかどうか、判断できてる?」

正直、できていませんでした。

テーブルの数が多いのか少ないのか。リレーションの張り方がおかしくないか。正規化が足りているのか、やりすぎなのか。何が良くて何が悪いのか、自分の中に基準がなかった

AIの出力を「なんとなく合ってそう」で通していただけでした。

気づき:自分の軸がないと、AIの出力を評価できない

ここで気づいたのは、自分が一度でも設計をやってみないと、判断軸ができないということです。

DB設計の知識がゼロの状態でAIにレビューを頼んでも、AIが「問題ありません」と言えばそれで終わり。本当に問題がないのか、見落としがあるのか、自分では区別がつかない。

逆に、自分で「このアプリにはどんなデータが必要か」「テーブルをどう分けるか」を考えてから設計すると、必要なデータが見えてくる

その上でAIや上司にレビューしてもらえば、指摘の意味がわかるし、「なぜそう直すべきか」も理解できる。

自分で設計する → レビューをもらう。この順番がエンジニアとしての成長につながると実感しました。

なぜ「DB設計」が特に重要なのか

AI時代にエンジニアとして重要なスキルは何か。上司からもらったアドバイスがシンプルで腑に落ちました。

「DB設計が固まっていれば、UIや機能の追加はAIですぐ作れる。」

つまり、こういう構造です。

  • 要件定義:どの課題を解決して、何をやらないかを決める
  • DB設計:どうやってデータを管理するか

この2つが土台。土台さえしっかりしていれば、「このテーブル構造で〇〇画面を作って」とAIに指示するだけで、UIもAPIも生成できる。

逆にDB設計が甘いと、機能を追加するたびにテーブル構造の変更が必要になる。マイグレーションが増え、既存データとの整合性が崩れ、AIに指示を出しても矛盾したコードが生まれる。

DB設計は、AIに仕事を任せるための「指示書」の土台なんです。

DB設計の基礎:最低限押さえる3つ

自分もまだ学び始めたばかりですが、「最低限ここを押さえれば設計に手が出せる」と感じた3つを共有します。

1. エンティティとリレーション(何を、どう関連づけるか)

DB設計の出発点は「このアプリで扱うデータは何か」を洗い出すこと。

例えばアカウント管理アプリなら:

  • ユーザー(誰が使うか)
  • アカウント(何を管理するか)
  • ログイン履歴(いつ使ったか)

これが「エンティティ」。そしてエンティティ同士の関係が「リレーション」です。

  • 1人のユーザーは複数のアカウントを持つ(1対多)
  • 1つのアカウントには複数のログイン履歴がある(1対多)

2. 正規化(データの重複をなくす)

正規化は「同じデータを2箇所以上に書かない」ための整理術です。

やる前(非正規化):

ユーザー名 メール アカウント名 サービスURL
田中 tanaka@example.com GitHub github.com
田中 tanaka@example.com Slack slack.com

「田中」と「tanaka@example.com」が2行に重複しています。メールアドレスを変更するとき、両方の行を更新する必要があり、片方だけ更新し忘れるリスクがある。

やった後(正規化):

ユーザーテーブル

id ユーザー名 メール
1 田中 tanaka@example.com

アカウントテーブル

id user_id アカウント名 サービスURL
1 1 GitHub github.com
2 1 Slack slack.com

ユーザー情報は1箇所だけ。メールを変えたらユーザーテーブルの1行を更新するだけで済みます。

3. 主キー・外部キー・制約(データを守るルール)

正規化でテーブルを分けたら、次は「テーブル同士をどう繋ぐか」と「おかしなデータを入れさせない仕組み」が必要です。

主キー(Primary Key / PK)

各行を一意に識別するためのカラム。さっきの正規化の例でいう id がこれです。

CREATE TABLE users (
    id INTEGER PRIMARY KEY,  -- この行を一意に特定する
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
);

主キーがあることで「ユーザーID: 1の田中さん」と「ユーザーID: 2の田中さん」を区別できます。同じ名前でも、IDが違えば別の人。

外部キー(Foreign Key / FK)

別テーブルの主キーを参照して、テーブル同士を繋ぐカラム。アカウントテーブルの user_id がこれです。

CREATE TABLE accounts (
    id INTEGER PRIMARY KEY,
    user_id INTEGER NOT NULL,      -- usersテーブルのidを参照
    service_name TEXT NOT NULL,
    service_url TEXT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

FOREIGN KEY を設定すると、存在しないユーザーIDでアカウントを作ろうとしたときにDBがエラーを出してくれます。「ユーザーID: 999」が存在しないのにアカウントだけ作れてしまう、という事故を防げる。

制約(Constraints)

「このカラムにはこういうデータしか入れさせない」というルールです。

制約 意味
NOT NULL 空欄を許さない 名前は必須
UNIQUE 重複を許さない メールアドレスは一人一つ
DEFAULT 値がなければ初期値を入れる created_at にデフォルトで現在時刻
CHECK 条件を満たす値のみ許可 年齢は0以上
AUTO INCREMENT IDを自動で1, 2, 3...と採番 ほぼ全テーブルの id で使う
ON DELETE CASCADE 参照先が消えたら関連データも消す ユーザー削除 → アカウントも削除
ON DELETE SET NULL 参照先が消えたら外部キーをNULLにする ユーザー削除 → ログ履歴は残すが紐づけを外す

制約はアプリのコードではなくDB側で守るルールです。アプリにバグがあっても、DBが最後の防波堤になってくれる。AIにコードを書かせるとき、この制約がしっかりしていれば、おかしなデータが入り込むリスクが減ります。

4. ER図で全体像を掴む

テーブルの関係を図にしたのがER図(Entity-Relationship Diagram)です。アカウント管理アプリの例:

この図が読めると、テーブル同士の関係が一目でわかります。「ユーザー1人に対してアカウントは複数」「ログイン履歴はユーザーとアカウントの両方に紐づく」。

ER図を自分で書いてみるだけでも、どんなデータが必要で、どう繋がるかが頭の中で整理されます。

まとめ

  • AIにDB設計を丸投げしていたら、上司に「自分の軸がないのでは?」と指摘された
  • 自分の軸がないと、AIの出力の良し悪しが判断できない
  • まず自分で設計してみる → その上でレビューをもらう。この順番が判断軸を育てる
  • AI時代に人間が握るべきは要件定義とDB設計。この土台が固まれば、UI・API・テストはAIに任せられる
  • DB設計の基礎は「知識量」ではなく「一度やってみること」で身につく

ジュニアだからこそ、今のうちにDB設計を自分の手で触っておく価値があると思っています。自分もまだ学び始めたばかりなので、実際にアカウント管理アプリのDB設計をゼロから自力でやってみた過程も、今後書いていきます。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?