ER図とは(全体像)
ER図は、データベースをつくる前に描く設計図。「E」はエンティティ(実体=管理したいモノ。会員・商品など)、「R」はリレーションシップ(関係=モノどうしのつながり)の頭文字だよー。
身近にたとえると、家を建てる前の間取り図みたいなもの。いきなり建て始めず、まず「どの部屋が、どうつながるか」を図にしておくと、あとで困らないのー。
押さえるのは、ER図はつながりの「数の関係」(カーディナリティ)をはっきりさせるためのもの、ということ。ここが試験でいちばん問われるよー。
詳しく:カーディナリティと中間テーブルだけ覚えれば戦える
ここが記事の心臓部。まずカーディナリティ(つながりの数の関係)を見ていこーね。
カーディナリティ(多重度)の3パターン
| 種類 | 意味 | 例 |
|---|---|---|
| 1対1 | 片方に対し、相手はちょうど1つ | 社員と社員証 |
| 1対多 | 片方に対し、相手は複数(最も多い) | 部署と社員 |
| 多対多 | おたがいに複数ずつ対応 | 会員と部活(中間テーブルが必要) |
ここで一番のひっかけが、「多対多をそのまま1つの表にできる」という誤解。多対多は、そのままでは表にしにくいんだよー。だから間に「中間テーブル」を1つ置いて、「1対多」を2つに分けるのがお約束なのー。
多対多は中間テーブルで分ける
| 形 | どうするか |
|---|---|
| 会員 ←多対多→ 部活 | そのままでは表にしにくい |
| 会員 ←1対多→ 入部記録 ←多対1→ 部活 | 中間テーブルを置いて分解する |
もう1つ、依存するモノを表す弱エンティティもある。これは単独では主キー(見分けるための鍵)が決まらず、強いモノに頼って初めて区別できるもの。たとえば「注文1件の中の明細」は、その注文があって初めて意味を持つ、という感じだよー。
そして大事なのが、ER図はあくまで設計の段階の話で、SQL(実際の操作命令)を書くより前ということ。間取り図と建築工事が別なのと同じなのー。
わかりやすく言い換えると
要するに、会員と部活でイメージするとラクだよー。
①1対多 … 1つの部署に社員がたくさん(いちばんよくある形)
②多対多 … 1人が複数の部活に入り、1つの部活に複数人。だから間に「入部記録」を置く
③弱エンティティ … 注文があって初めて意味を持つ「明細」みたいな、頼って存在するモノ
つまり、「多対多は中間テーブルで分ける」「ER図は設計の段階」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:カーディナリティの3パターン
①1対1・1対多(最も多い)・多対多
②多対多はそのままにせず、中間テーブルで1対多を2つに分ける
🔴 次に出る:ER図は設計の段階
①ER図は「どんなデータがどうつながるか」を描く設計図
②SQL(実際の操作命令)を書くより前の段階の話
🟡 押さえると安定:弱エンティティ
①単独では主キーが決まらず、強いモノに頼って区別できるモノ
②例=注文があって初めて意味を持つ「明細」
よくある間違い
①「多対多の関係はそのまま1つの表にすればよい」→ ✗ 多対多は中間テーブルを置いて、1対多を2つに分けるのがお約束。
②「ER図はSQLそのもので、実際の操作命令である」→ ✗ ER図は設計の段階。SQLを書くより前の図。
③「弱エンティティは単独でも主キーが決まる強いモノである」→ ✗ 弱エンティティは強いモノに頼って初めて区別できる。単独では決まらない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(カーディナリティ)
ER図のカーディナリティに関する次の記述のうち、正しいものはどれか。
- カーディナリティは画面に表示する色の数のことで、データの関係とは無関係だとされている
- カーディナリティはどんな関係でもすべて1対1に決まっていて、種類はないものだとされている
- カーディナリティは1対1・1対多・多対多があり、つながりの数の関係を表すものなのである
- カーディナリティはデータを削除する順番のことで、関係の数とは無関係だとされているものだ
解答は 3 だよー。
カーディナリティは、モノどうしのつながりの「数の関係」で、1対1・1対多・多対多があるのー。とくに1対多がいちばんよく出てくるよー。
選択肢1の「色の数」、選択肢2の「すべて1対1」、選択肢4の「削除する順番」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 色の数ではない |
| 2 | ✗ | 1対多・多対多もある |
| 3 | ✓ | 3種類で数の関係を表す |
| 4 | ✗ | 削除の順番ではない |
オリジナル問題2(多対多と中間テーブル)
多対多の関係の扱い方に関する次の記述のうち、正しいものはどれか。
- 多対多は中間テーブルを1つ置いて、1対多を2つに分けて表すのが基本のやり方なのである
- 多対多はそのまま1つの表にするのが正しく、中間テーブルは作ってはいけないものだとされる
- 多対多はどんなときも必ず1対1に書き換えてから表にするものだとされているものである
- 多対多は表に変換できないので、データベースでは扱えないものだとされているものである
解答は 1 だよー。
多対多は、そのままでは表にしにくいのー。だから間に中間テーブルを1つ置いて、「1対多」を2つに分けるのが基本なのー。会員と部活の間に「入部記録」を置く感じだよー。
選択肢2の「そのまま1つの表」、選択肢3の「必ず1対1に」、選択肢4の「扱えない」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 中間テーブルで1対多×2に分ける |
| 2 | ✗ | そのままでは表にしにくい |
| 3 | ✗ | 1対1への書き換えではない |
| 4 | ✗ | 中間テーブルで扱える |
オリジナル問題3(弱エンティティとER図の位置づけ)
弱エンティティとER図に関する次の記述のうち、正しいものはどれか。
- 弱エンティティは単独で主キーが決まり、ER図はSQLそのものだとされているものである
- 弱エンティティは画面のボタンのことで、ER図は音を鳴らす機能だとされているものである
- 弱エンティティはどんなモノよりも必ず強く、ER図は工事のあとに描くものだとされている
- 弱エンティティは強いモノに頼って区別でき、ER図はSQLを書く前の設計段階の図である
解答は 4 だよー。
弱エンティティは、単独では主キーが決まらず、強いモノに頼って初めて区別できるモノなのー(注文があって意味を持つ「明細」みたいな感じ)。ER図はSQLを書くより前の設計の段階の図だよー。
選択肢1の「単独で主キー・SQLそのもの」、選択肢2の「ボタン・音を鳴らす」、選択肢3の「必ず強い・工事のあと」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 単独では主キーが決まらない |
| 2 | ✗ | ボタンや音の機能ではない |
| 3 | ✗ | 強いモノに頼る・設計は工事の前 |
| 4 | ✓ | 強いモノに頼る・ER図は設計段階 |
まとめ
押さえどころ
- 🔴 カーディナリティ = 1対1・1対多(最も多い)・多対多。つながりの数の関係を表す。
- 🔴 多対多は中間テーブルで分ける = そのままにせず、間にテーブルを置いて1対多を2つに分解する。
- 🟡 弱エンティティとER図の位置づけ = 弱エンティティは強いモノに頼って区別。ER図はSQLを書く前の設計図。
次に学ぶ
執筆: SikakuQuest編集部