データベース設計の手順|正規化とアンチパターンを、業務アプリを作る前の非エンジニア向けに
AIにコードを書かせる前に、表の形を決めておきます。
執筆:泉 款太(株式会社SalesDock 代表取締役)累計40社以上の中小企業を支援
結論
列は後から足せますが、1行の単位、IDの付け方、呼び名のそろえ方は運用が始まると直しにくくなります。この3つを先に決めておくのが、手戻りを減らすいちばんの近道です。
- データベース設計は、業務の言葉で表を決め、各表の「1行が何を表すか」を一文で書き、IDでつなぐ順に進めます。画面やツールを選ぶのはその後です。
- 正規化は、同じ情報を2か所に書かないための見直しです。中小企業の業務アプリなら、「1つのセルに1つの値」「主役のIDで決まる項目だけを置く」「他の項目から決まる項目を置かない」の3つを表ごとに当てれば足ります。
- AIに業務アプリを作らせる前に、誰が・何で入力し・どの表とつながるかを1枚にします。決めずに始めると、表の形を直すたびに画面と集計が崩れる修正の沼にはまります。
この記事は、表を何枚に分け、何を項目にするかという考え方と手順を扱います。表と線を図にする方法はER図の書き方で、手元のスプレッドシートを分ける作業はスプレッドシートのデータベース化で説明しています。
「データベース設計」と検索すると、SQLやツールの解説が多く出てきます。一方で、中小企業の現場で相談を受けるのは、顧客や案件の管理をAIや業務アプリで作り直したいが、何を決めてから頼めばよいか分からない、という場面です。この記事では、プログラムを書かない人が、AIに頼む前に決めておくことに絞って、手順を説明します。
データベース設計は、業務の言葉から表を決める6ステップで進める
データベース設計は、画面を描く前に「何を表にし、1行を何と数えるか」を決める作業です。次の6つを上から順に進めます。
- 覚えておきたいものを、業務の言葉で書き出す:「お客様」「案件」「請求」「商品」のように、現場で使っている名詞を付箋かメモに並べます。システム用語は使いません
- 名詞ごとに表を1枚ずつ作り、1行が何を表すかを一文で書く:「案件の表は、1行が1つの契約を表す」のように書きます。この一文が書けない名詞は、まだ表にしません
- 表ごとに項目を並べ、項目ごとに「なぜ要るか」を書く:使う場面を言えない項目は作りません。足りなければ、運用して必要になった時点で足します
- 表ごとにIDを振り、表どうしをIDでつなぐ:名前や電話番号はあとで変わります。変わらない番号を1列目に置き、他の表からはその番号で呼びます
- 正規化で、同じ情報が2か所に書かれていないかを見直す:1つのセルに複数の値がないか、主役のIDで決まらない項目が混ざっていないか、他の項目から決まる項目を置いていないかを、表ごとに確かめます。履歴として残す項目だけは、あえてコピーを持たせます
- 誰が・何で入力し、どの表とつながるかを表にする:ここまでを1枚にまとめたものが、AIやアプリ制作者に渡す資料になります
3番目の「項目ごとに、なぜ要るかを書く」は、地味ですが効きます。顧客管理の作り直しでは、「列は後から足せるから急がなくていい」という話が出ました。足せるのは事実ですが、項目を作る前に理由を書いておくと、使われない項目で入力画面が長くなることを防げます。
正規化は、同じ情報を2か所に書かないための3つの問い
正規化は、データベースの教科書では第1〜第3正規形という段階で説明されます。業務アプリの設計で使うときは、「この情報は、いまの表に置くのが正しいか」を問い直す作業と考えれば十分です。表ごとに、次の3つを当てます。
| 正規形 | 問い | 確かめること | 直し方 |
|---|---|---|---|
| 第1正規形 | 1つのセルに1つの値 | 「商品1・商品2・商品3」の列や、1つのセルに複数の値が入っていないか | 商品を別の行に分け、受注明細の表にする |
| 第2正規形 | 主役のIDで決まる項目だけを置く | 受注明細の表に、商品IDだけで決まる商品名が入っていないか | 商品名は商品の表に1回だけ書く。ただし単価は、商品の表の「現在の単価」とは別に、受注時点の単価を受注明細に残す(後の単価改定で過去の金額が変わらないようにするため) |
| 第3正規形 | 他の項目から決まる項目を置かない | 取引先IDから決まる電話番号が、受注の表にも書かれていないか | 電話番号は取引先の表に1回だけ書く |
表の3つの問いは、左の列にある第1・第2・第3正規形にそれぞれ対応します。Microsoftの解説も、第3正規形をほとんどのアプリケーションに必要な最高レベルとしています。中小企業の受注管理や案件管理なら、第3正規形まで見直せば足ります。それより先の段階は、実際の設計ではほとんど考慮されません。
一方で、正規化しすぎない場面もあります。請求書の表に、請求した時点の単価と宛名をそのまま残すのがその例です。商品の表の単価を後で改定しても、過去の請求金額は変わってはいけないからです。値を呼び出すのか、その時点の値を残すのかは、「あとで変わったときに、過去の記録も変わってよいか」で決めます。
現場で起きやすいアンチパターン6つと、直し方
アンチパターンは、よくある失敗の型のことです。どれも、作り始める前なら表の1行を書き換えるだけで直せますが、運用が始まってからだと、入力済みのデータごと直すことになります。
| 失敗の型 | 起きること | 直し方 |
|---|---|---|
| 商品1・商品2・商品3と列を横に増やす | 4つ目の商品が来た時点で、列を足すか備考に書くかが人によって分かれます | 商品は行で持ち、受注明細の表に1行ずつ足します |
| 「備考」に何でも書ける | 納期や電話番号が備考に混ざり、集計にも検索にも使えなくなります | よく書かれる内容を項目に昇格させ、備考は残りだけにします |
| 名前でつなぐ | 社名や商品名の表記が少し違うだけで、同じ相手が別の相手として数えられます | 変わらないIDでつなぎ、名前は表示のときだけ引きます |
| 1行の単位が行ごとに違う | 1行が「商品ごと」「契約ごと」「月ごと」でばらつくと、件数も金額も集計が合いません | 請求書と同じ単位(商品×契約期間など)に決めて、全行をそろえます |
| 呼び名を決めずに登録する | 同じ商品が複数の名前で入り、在庫も売上も合算できません | 商品の呼び名を一覧にして、入力は一覧から選ぶ形にします |
| 過去の値を上書きしてしまう | 単価を改定すると、過去の見積や請求の金額まで書き換わります | 金額が確定する表には、その時点の単価を一緒に残します |
「項目は後から足せる」で始めると、初日に止まることがある
案件管理の基盤づくりで、「列は後から追加できるので、今は決めなくていいのでは」という問いが出たことがあります。仕組みとしては正しい指摘です。ただ、その考え方で始めた管理は、運用初日に止まりました。足せない箇所があったからです。
足しやすいものと、直すと全部が動くものは、次のように分かれます。
決めておかなかった場合に何が起きるかは、支援先で2つ見ています。
- 1行の単位:既存のお客様は、商品ごと・契約期間ごとに登録していました。一方、新規の案件は、複数の商品を1件にまとめたり、月ごとに金額が変わる契約を1行に入れたりしていました。そこで、登録の単位を請求書と同じ「商品×契約期間」にそろえました。請求書はお金の動きが最後に確定する書類なので、そこに合わせると案件管理と請求のずれが出にくくなります
- 呼び名:在庫を管理したいという相談で現場に行くと、在庫のシステムは前の年に導入済みでした。動いていなかった理由はシステムではなく、商品の呼び名が決まっていないことでした。システムを入れ替える前に、呼び名の一覧を作る必要がありました
取引先名や商品名を誰がどう管理するかは取引先マスタの責任者設計、商品の粒度の決め方は商品マスタの粒度で扱っています。
AIに作らせる前に、確認表を1枚にまとめる
ここまでを1枚にまとめたものが、AIに渡す資料になります。AIにコードを書かせる前に、誰が・何を使って・どのデータとつながるかを決めておかないと、修正のたびに別の場所が崩れ、修正の沼にはまります。確認表は次の形で足ります。
| 決めること | 記入例 | 見直しの観点 |
|---|---|---|
| 表の数と各表の「1行の意味」 | 案件の表:1行が1つの契約 | 一文で言えない表が残っていないか |
| 項目と、なぜ要るか | 契約開始日:請求の開始月を決めるため | 理由が書けない項目は削る |
| ID とつなぎ先 | 案件ID/取引先IDで取引先の表とつなぐ | 名前でつないでいる箇所がないか |
| 誰が入れるか | 営業全員。取引先の表だけ事務1人 | 同じ表を何人が直接書き換えるか |
| 何で入れるか | スマホのフォーム/PCで直接 | 手入力の経路が複数残っていないか |
| 残すか、上書きするか | 取引先は上書き。請求は追記のみ | 履歴が必要な表に上書きが混ざっていないか |
この表を埋めてから「この内容でデータベースの設計案を出して。足りない点があれば先に質問して」と頼むと、AIの案を1つずつ確かめられます。AIが出した案を確認するときは、表ごとに「1行は何を表すか」を自分の言葉で言い直せるかを見ます。言い直せない表があれば、AIが業務を取り違えているか、こちらの説明が足りていません。要件全体の整理は要件定義をAIで進める方法、作らせるときの進め方はAI駆動開発のベストプラクティスに書いています。表と線を図にして確かめたいときはER図をAIで作成する方法が使えます。
設計の良し悪しは、直した回数と問い合わせ回数で測る
設計を決めたあとの1か月は、次の3つを数えます。始める前の数字を先に控えておくと、比べられます。
- 表の形を変えた回数:項目の追加ではなく、表を分ける・統合する・IDを付け直すといった変更の回数です。回数が減らないなら、1行の意味が決まりきっていません
- 同じ相手・同じ商品の重複:名前の列を抜き出し、同じものが何通りの書き方で入っているかを数えます
- 「これはどこに入れるのか」の質問:入力する人から出た質問の回数を記録します。質問が多い項目は、名前か置き場所が分かりにくい項目です
表の形の変更が続くなら、2番目の手順に戻り、1行の意味を書き直します。重複が減らないなら、手入力できる経路が残っています。入力はプルダウンかフォームに限ると、表記ゆれは止まります。SalesDockは、経営者の方が業務の流れと数字の置き場所を整えて、仕組みとして定着させる支援をしています。表の形を整理する段階から、現場の業務に合わせて一緒に決めることもできます。
一次情報・公式情報
- Microsoft「データベース正規化の説明」(同じ情報を複数の場所に置かない、第1〜第3正規形の考え方。Microsoftのアーカイブ記事)
製品の仕様は変更されます。最新の情報は公表元でご確認ください。
データベース設計のよくある質問
データベース設計とは何をすることですか?
業務で覚えておきたい情報を、どんな表に分け、どの項目を持たせ、表どうしをどうつなぐかを決めることです。画面や機能を決める前の作業で、表の形はあとから変えると、画面・計算・集計がまとめて作り直しになります。
正規化は、どこまでやればよいですか?
中小企業の業務アプリなら、第3正規形まで見直せば足ります。具体的には、1つのセルに1つの値、主役のIDで決まる項目だけを置く、他の項目から決まる項目を置かない、の3点を表ごとに確かめます。履歴を残すために値のコピーを持たせるのは問題ありません。
設計の前に、ER図を描く必要はありますか?
表が3枚以上になったら描くことをおすすめします。表と線を紙に書くだけで構いません。記号の見方と描き方は、ER図の書き方の記事で説明しています。
項目は後から足せるので、最初は細かく決めなくてもよいですか?
列を足すこと自体は後からできます。ただ、1行の単位、IDの付け方、呼び名のそろえ方は、運用が始まってからは直しにくくなります。決めておくのはこの3つです。
AIにデータベース設計を任せてもよいですか?
たたき台を出させるには向いています。ただ、1行が何を表すか、誰が入力するか、履歴を残すかは業務を知っている人にしか決められません。AIの案は、各表の1行が何を表すか、誰がどう入力するか、履歴を残すか上書きするかを、業務を知る人が1つずつ確かめてから使います。
同じテーマの記事
全体像は業務設計とは|業務フロー・運用設計との違いと、形骸化させない進め方6ステップにまとめています。
泉 款太(いずみ かんた)
株式会社SalesDock 代表取締役
慶應義塾大学法学部卒。スタートアップ、ラクスル、リクルート(SUUMO)を経て2025年に独立。 中小企業の経営・営業・業務・データをつなぐ事業基盤の設計と実装を支援。 不動産・製造業・クリニックを中心に、累計40社以上の支援に携わる。
運営は株式会社SalesDock(大阪市中央区本町)。中小企業向けに、AI自走プラン(初期構築15万円+月額10万円・90日)と、 そのあとのAI顧問(月額5万円・6ヶ月契約から)を提供しています。価格は税別です。 大阪・関西を中心に、オンラインで全国からのご相談に対応しています。
代表者情報を読む →この記事の数値について
本文中に一次資料へのリンクがある数値は、リンク先を出典としています。 リンクのない業務設計、判断基準、実務上の目安は、SalesDockが累計40社以上の支援と自社運用で得た知見を一般化したものです。 個別企業での成果を保証する数値ではなく、条件によって変わります。