DB設計とは(全体像)
DB設計とは、使いやすく・速いデータベースを作るための段取りだよー。いきなり表を作るのではなく、順を追って決めていくのー。
身近にたとえると、家を建てる流れみたいなもの。①どんな家にしたいか聞く(要求分析)→ ②間取りを考える(概念設計)→ ③くわしい設計図を引く(論理設計)→ ④実際に使いやすく工事する(物理設計)、という順だよー。
押さえるのは、設計の4段階と、物理設計で出てくるパーティショニング(表を分ける技法)だよー。
詳しく:4段階とパーティショニングだけ覚えれば戦える
ここが記事の心臓部。まず設計の4段階を順に見ていこーね。
DB設計の4段階
| 段階 | やること |
|---|---|
| ①要求分析 | どんなデータが必要かを聞き出す |
| ②概念設計 | データの関係を図にする(ER図) |
| ③論理設計 | 表の形を決める(正規化) |
| ④物理設計 | 速く動くように工夫する(インデックスなど) |
「要求 → 概念 → 論理 → 物理」の順番が一番大事だよー。だんだん具体的になっていくイメージなのー。
次に、④物理設計で出てくるパーティショニングだよー。これは大きな表を分けて扱いやすくする技法なのー。
パーティショニングとシャーディング
| 技法 | 分け方 | どこに置くか |
|---|---|---|
| 水平パーティショニング | 行で分ける(例:年月別) | 同じサーバーの中 |
| 垂直パーティショニング | 列で分ける(よく使う列と稀な列) | 同じサーバーの中 |
| シャーディング | 行で分ける(水平) | 別のサーバーに分散 |
ここでひっかけが「パーティショニングとシャーディングは同じもの」という誤解だよー。シャーディングは「別のサーバーに分けて置く」のが特徴で、同じサーバーの中で分けるパーティショニングとは別ものなのー。
なお、日常の取引を扱うOLTPと、分析を扱うOLAPでは設計の方針がちがう(OLTPは正規化、OLAPは非正規化)ことも押さえておくといいよー。
わかりやすく言い換えると
要するに、大きな本棚を整理するイメージだよー。
①水平パーティショニング … 本を「年度別の箱」に分ける(行で分ける)
②垂直パーティショニング … 「よく見る情報」と「めったに見ない情報」を別の棚に分ける(列で分ける)
③シャーディング … 箱そのものを「別の部屋(サーバー)」に置く
つまり、設計は「要求→概念→論理→物理」の順、パーティショニングは「水平=行・垂直=列」、シャーディングは「別サーバー」。ここが試験の急所なのー。
試験のツボ
🔴 一番出る:DB設計の4段階
①要求分析 → ②概念設計(ER図)→ ③論理設計(正規化)→ ④物理設計
②だんだん具体的になっていく順番
🔴 次に出る:水平と垂直の違い
①水平パーティショニング = 行で分ける(年月別など)
②垂直パーティショニング = 列で分ける(よく使う列と稀な列)
🟡 押さえると安定:シャーディングは別サーバー
①シャーディングは行で分けて「別のサーバー」に置く
②同じサーバー内で分けるパーティショニングとは別もの
よくある間違い
①「パーティショニングとシャーディングは同じものである」→ ✗ シャーディングは別のサーバーに分けて置く。同じサーバー内で分けるパーティショニングとは別もの。
②「水平も垂直もどちらも列で分けることである」→ ✗ 水平は行で分ける、垂直は列で分ける。
③「DB設計は、いきなり物理設計から始めればよい」→ ✗ 要求分析→概念→論理→物理の順で、だんだん具体的にしていく。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(設計の4段階)
DB設計の進め方に関する次の記述のうち、正しいものはどれか。
- DB設計は、画面の明るさを段階で決めるための専用の作業のことだとされているものである
- DB設計は、音の大きさを段階で決めるための専用の作業のことだとされているものである
- DB設計は、要求分析→概念設計→論理設計→物理設計の順で、だんだん具体的にしていく
- DB設計は、保存した文字を全部消すための専用の作業のことだとされているものである
解答は 3 だよー。
DB設計は、要求分析 → 概念設計 → 論理設計 → 物理設計の順で進めるのー。家を建てるみたいに、だんだん具体的にしていく流れだよー。
選択肢1の「明るさ」、選択肢2の「音の大きさ」、選択肢4の「全部消す」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面の明るさの作業ではない |
| 2 | ✗ | 音の大きさの作業ではない |
| 3 | ✓ | 要求→概念→論理→物理の順 |
| 4 | ✗ | 文字を消す作業ではない |
オリジナル問題2(水平パーティショニング)
水平パーティショニングに関する次の記述のうち、正しいものはどれか。
- 水平パーティショニングは画面を必ず点滅させるための専用の設定だとされているものである
- 水平パーティショニングは音を必ず二重に鳴らすための専用の機能だとされているものである
- 水平パーティショニングは保存した文字を必ず全部消す専用の命令だとされている
- 水平パーティショニングは、大きな表を行で分けて扱いやすくする技法のことである
解答は 4 だよー。
水平パーティショニングは、大きな表を「行」で分けて扱いやすくする技法なのー。たとえば年月別に分けるよ。本を「年度別の箱」に分けるイメージだよー。
選択肢1の「点滅」、選択肢2の「二重に鳴らす」、選択肢3の「全部消す」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面を点滅させる設定ではない |
| 2 | ✗ | 音を鳴らす機能ではない |
| 3 | ✗ | 文字を消す命令ではない |
| 4 | ✓ | 大きな表を行で分けて扱いやすくする |
オリジナル問題3(シャーディング)
シャーディングに関する次の記述のうち、正しいものはどれか。
- シャーディングは画面の明るさを決める設定で、パーティショニングと完全に同じものである
- シャーディングは、表を行で分けて別のサーバーに分散して置く点に特徴がある技法である
- シャーディングは音を必ず二重に鳴らす専用の機能だとされているもの
- シャーディングは保存した文字を必ず全部消すための専用の命令だとされているものである
解答は 2 だよー。
シャーディングは、表を行で分けて「別のサーバー」に分散して置くところが特徴なのー。同じサーバーの中で分けるパーティショニングとは、ここがちがうんだよー。
選択肢1の「完全に同じ」、選択肢3の「二重に鳴らす」、選択肢4の「全部消す」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | パーティショニングと同じではない |
| 2 | ✓ | 行で分けて別のサーバーに分散する |
| 3 | ✗ | 音を鳴らす機能ではない |
| 4 | ✗ | 文字を消す命令ではない |
まとめ
押さえどころ
- 🔴 設計の4段階 = 要求分析 → 概念設計(ER図)→ 論理設計(正規化)→ 物理設計。だんだん具体的に。
- 🔴 水平と垂直 = 水平は行で分ける/垂直は列で分ける。どちらも同じサーバーの中。
- 🟡 シャーディング = 行で分けて別のサーバーに分散。パーティショニングとは別もの。
次に学ぶ
- 正規化(詳細) ── 論理設計で表を上手に分けるルール。
- 3層スキーマ(ANSI/SPARC) ── 設計を外部・概念・内部の3つの見方で整理する考え方。
- シャーディング・レプリケーション ── 別サーバーへの分散と複製のしくみをさらにくわしく。
執筆: SikakuQuest編集部