データモデリング(E-R図・UMLの多重度)
E-R図やUMLクラス図の線の端に書かれた「1」「0..*」「1..*」を正しい向きで読み、図の解釈を選ぶ問題と、多重度を埋める問題を解けるようになる。あわせて、借方・貸方の会計データモデルの表を埋める問題と、データ分析の進め方の問題も解けるようにする。
データモデリングの問題は、図を正しい向きで読めるかだけで正誤が決まり、計算はいりません。多重度の読み方さえ身につければ、毎回ほぼ確実に1点取れる分野です。要件定義で「1件の注文に明細は何行あるか」を決める作業そのものなので、実務にもそのまま役立ちます。
このレッスンで稽古する(用語チェック・過去問)結論:多重度は「相手1つから見て、数字が書いてある側がいくつあるか」
多重度(multiplicity)とは、関連の線の端に書く「対応する個数の範囲」のことです。読み方のルールは1つだけです。数字は、その数字のすぐ横にある箱(エンティティ/クラス)が、相手1つあたりいくつ対応するかを表します。
読むときは次の2ステップで進めます。
- 調べたい側の相手を1つに固定する(例:従業員を1人決める)
- 線の反対の端、つまり調べたい側の数字を読む(例:部署の横の数字)
例として、部署 1..* ──── 0..* 従業員 を読んでみます。
- 従業員1人から見ると、部署の横の 1..* を読む → 1つ以上の部署に所属する(兼務してよい)
- 部署1つから見ると、従業員の横の 0..* を読む → 従業員は0人以上(誰もいない部署もあってよい)
たとえるなら、レシートと明細行の関係です。レシート1枚には明細行が何行も載りますが、明細行1行はどれか1枚のレシートにしか載りません。この「1枚あたり何行か」を書き込むのが多重度です。
多重度の表記一覧
| 表記 | 意味 | 下限から分かること | 上限から分かること |
|---|---|---|---|
| 1 | ちょうど1 | 必ずある(必須) | 1つに決まる |
| 0..1 | 0か1 | なくてもよい(任意) | あっても1つまで |
| 0..* または ***** | 0以上 | なくてもよい(任意) | いくつでもよい |
| 1..* | 1以上 | 必ず1つ以上ある(必須) | いくつでもよい |
| 2..* | 2以上 | 最低2つある | いくつでもよい |
- 下限が0か1かで「存在しなくてよいか」が決まります。「〜がいない部署」「どこにも所属しない社員」といった選択肢は、下限を見て判定します。
- 上限が1か*かで「複数あってよいか」が決まります。「複数の部署に所属」「複数の仕入先から仕入れる」といった選択肢は、上限を見て判定します。
- 「1 ― *」「1対多」という書き方も、意味は同じです。
E-R図とUMLクラス図の違い
どちらも「データ同士がどうつながっているか」を描く図です。呼び名と記号が違うだけで、多重度の読み方はどちらも同じです。
| 観点 | E-R図 | UMLクラス図 |
|---|---|---|
| 箱の呼び名 | エンティティ(実体) | クラス |
| 線の呼び名 | リレーションシップ(関連) | 関連 |
| 個数の書き方 | 1、*、0..*、または矢印 | 1、0..1、0..、1.. など |
| 継承の表現 | 基本的になし | 汎化(白抜き三角の矢印) |
| 関連そのものに属性を持たせる | 連関エンティティを間に置く | 関連クラス(点線でぶら下げる) |
古いE-R図では、多重度を数字ではなく矢印で描くことがあります(バックマン線図)。その場合は矢印の先が「多」の側です。
汎化(継承)が絡んだときの読み方
UMLの白抜き三角の矢印は汎化を表し、「サブクラスはスーパークラスの一種」という意味になります。サブクラスは、スーパークラスが持つ属性と関連をそのまま引き継ぎます。
2017年秋の問題では、「事業部」が「部門」のサブクラスでした。そのため「部門に所属できる社員」は「事業部にも所属できる」と言えます。一方で、別に引かれた「管理する」の線で事業部側が 0..1 になっていれば、事業部に管理されていない部門もありうる、と読みます。
多対多は「間に箱を1つ挟む」
商品と仕入先のように、どちらから見ても相手が複数ある関係を多対多といいます。関係データベースの表では多対多をそのまま表せないため、間に連関エンティティ(両方を結ぶための箱)を置き、1対多+多対1に分けます。
- 部品 ─1 *─ 在庫 ─* 1─ 仕入先(在庫の1行が「どの部品を・どの仕入先から」を持つ)
- 部門 ─1 1..─ 所属履歴 ─1.. 1─ 社員(履歴の1行が「誰が・どの部門に・いつからいつまで」を持つ)
見分けるコツは、両側から「多」で指されている箱が中間の箱だということです。「a ―1 *― b ―* 1― c」という形なら、b が中間の箱です。
借方・貸方を持つ会計データモデル
簿記では、1つの取引を左右2つの欄に分けて記録します。この記録を仕訳といい、左が借方、右が貸方です。1つの取引では借方の合計と貸方の合計が必ず一致します。
| 欄 | ここに書くもの | 例 |
|---|---|---|
| 借方(左) | 資産が増えた・費用が発生した | 現金が入った、旅費を使った |
| 貸方(右) | 資産が減った・収益が発生した(負債・純資産が増えた) | 現金が出ていった、売上が立った |
これをUMLで描くと、「勘定(現金・売上などの科目)」と「会計取引」が多対多の関係になり、その間を関連クラス「移動」(金額を持つ)が埋めます。勘定側の多重度が 2..* になっているのは、1つの取引で必ず2つ以上の勘定が動くからです。表に実装すると、移動表の1行は「この取引で、この勘定が、借方か貸方に、いくら動いたか」を表します。
データ分析の進め方(出題は少なめ)
企業のデータ分析は、初期段階から利用部門の管理者や業務担当者に参加してもらって進めます。業務を一番よく知っているのは現場の人だからです。物理的な格納方式は後回しにし、まず業務の意味を表す概念データモデルを作ります。また、対象を早く絞り込みすぎないこと、業務の変化に合わせてモデルを変更できるようにしておくことも大切です。
試験での問われ方
- 解釈を選ぶ型(いちばん多い):「適切なものはどれか」と聞かれ、4つの選択肢それぞれがどれか1本の線について言っている。選択肢ごとに対応する線を探し、「相手1つを固定 → 反対端の数字を読む」を繰り返す。
- 多重度を埋める型:条件文(「1人以上が所属」「必ずいずれかに所属」)を下限と上限に置き換える。
- エンティティを当てはめる型:具体的な台帳から、どれが中間の箱かを見抜く。
- 会計の表を埋める型:仕訳を自分で切ってから、勘定コードと借方・貸方を表に入れる。
ひっかけはほぼ全部、数字を逆側から読ませるものです。「社員のいない部門」なら部門の横ではなく社員の横の下限を見ます。
条件から多重度 a・b を埋める
| a | b | |
|---|---|---|
| ア | 0..* | 0..* |
| イ | 0..* | 1..* |
| ウ | 1..* | 0..* |
| エ | 1..* | 1..* |
ア a: 0..*,b: 0..*
イ a: 0..*,b: 1..*
ウ a: 1..*,b: 0..*
エ a: 1..*,b: 1..*
解き方と答えを見る
- 線の位置を確認する。a は「部門―所属履歴」の線の所属履歴側、b は「所属履歴―社員」の線の所属履歴側にある。
- a の意味は「部門1つから見た所属履歴の件数」。条件(1)「部門には1人以上の社員が所属する」から、所属履歴は1件以上ある。したがって下限は1。人数に上限はないので上限は*。よって a = 1..*。
- b の意味は「社員1人から見た所属履歴の件数」。条件(2)「社員はいずれか一つの部門に所属する」から、どの社員にも所属履歴が少なくとも1件ある。したがって下限は1。
- 条件(3)は履歴を記録するので、異動するたびに所属履歴が増える。したがって上限は*。よって b = 1..*。
- a = 1..*、b = 1..* の組合せは「エ」。
答え:エ(a:1..*、b:1..*)
E-R図の解釈を選択肢ごとに検証する
ア 同一の商品は一つの仕入先から仕入れている。
イ 発注明細と納品明細は1対1に対応している。
ウ 一つの発注で複数の仕入先に発注することはない。
エ 一つの発注で複数の商品を発注することはない。
解き方と答えを見る
- ア「同一の商品は一つの仕入先から」:商品 0..* ── 1..* 仕入先。商品1つから見て、仕入先の横は 1..* なので、仕入先は複数ありうる → ×
- イ「発注明細と納品明細は1対1」:この2つを直接結ぶ線がない → ×
- ウ「一つの発注で複数の仕入先に発注しない」:仕入先 1 ── 0..* 発注。発注1つから見て、仕入先の横は「1」なので、仕入先はちょうど1社に決まる → ○
- エ「一つの発注で複数の商品を発注しない」:発注明細 1..* ── 1 発注。発注1つから見て、明細の横は 1..* なので明細は複数ありうる。明細ごとに商品が1つ対応するので、商品も複数ありうる → ×
答え:ウ
台帳から中間のエンティティを見抜く
| 部品コード | 部品名 | 仕入先コード | 仕入先名 | 仕入日付 | 仕入価格 | 在庫数 |
|---|---|---|---|---|---|---|
| 001 | R 部品 | Z010 | A 商会 | 9 月 1 日 | 1,500 | 1,000 |
| 001 | R 部品 | Z010 | A 商会 | 10 月 15 日 | 1,400 | 1,500 |
| 002 | S 部品 | Z010 | A 商会 | 9 月 20 日 | 800 | 500 |
| 003 | T 部品 | Z015 | B 商店 | 10 月 8 日 | 1,600 | 1,450 |
| 003 | T 部品 | Z020 | C 商店 | 9 月 15 日 | 1,200 | 800 |
ア a:在庫,b:仕入先,c:部品
イ a:在庫,b:部品,c:仕入先
ウ a:仕入先,b:部品,c:在庫
エ a:部品,b:在庫,c:仕入先
出典:基本情報技術者試験 科目A免除 修了試験 20221211 実施分 問26
解き方と答えを見る
- 台帳を見る。部品001(R部品)はA商会から2回仕入れていて、在庫の行が2つある → 部品1つに対して在庫は複数。
- A商会は部品001と002を納めている → 仕入先1つに対しても在庫は複数。
- 部品003はB商店とC商店の両方から仕入れている → 部品と仕入先は多対多。
- モデルは a ―1 *― b ―* 1― c。両側から「多」で指されている b が中間の箱なので、b = 在庫。
- 残る a と c は部品と仕入先。この並びに該当する選択肢は「a:部品、b:在庫、c:仕入先」だけ。
答え:エ
仕訳を切って移動表を埋める
| 勘定コード | 科目名 |
|---|---|
| 208 | 売上 |
| 510 | 現金 |
| 511 | 預金 |
| 812 | 旅費 |
| 勘定コード | 借/貸 | 金額 | 取引番号 |
|---|---|---|---|
| [a] | [b] | 50,000 | 0122 |
| 208 | 貸方 | 50,000 | 0122 |
| 510 | 貸方 | 50,000 | 0124 |
| 812 | 借方 | 50,000 | 0124 |
| 取引番号 | 計上日 | 摘要 |
|---|---|---|
| 0122 | 2017-04-04 | A 社 |
| 0124 | 2017-04-04 | A 社 |
ア a: 208,b: 貸方
イ a: 208,b: 借方
ウ a: 510,b: 貸方
エ a: 510,b: 借方
解き方と答えを見る
- 取引を仕訳する。現金が増えた(資産の増加)ので借方に「現金 50,000」。売上が立った(収益の発生)ので貸方に「売上 50,000」。
- 移動表の取引番号0122には、すでに「208(売上)・貸方・50,000」の行がある。
- したがって残りの行は現金の借方になる。勘定表で現金の勘定コードは510。よって a = 510、b = 借方。
- 検算する。取引0122の借方合計は50,000、貸方合計も50,000で一致しているので、制約を満たしている。
答え:エ(a:510、b:借方)
要点(試験直前に読む)
- 多重度は「相手1つを固定して、調べたい側の横の数字を読む」。
- 下限が0なら任意(なくてもよい)、1なら必須。上限が1なら1つに決まる、*なら複数OK。
- 多対多は間に連関エンティティを挟む。両側から「多」で指される箱が中間の箱。
- サブクラスはスーパークラスの関連を引き継ぐ(事業部は部門の一種なので社員が所属できる)。
- 会計:現金が増えたら借方、売上は貸方。1取引の借方合計と貸方合計は一致する。
- データ分析は初期段階から業務担当者が参加し、物理格納より業務の意味を先に考える。
ひっかけ
- 数字を逆側から読ませる:「社員のいない部門」なら社員の横の下限、「複数の部門に所属」なら部門の横の上限を見る。
- 線が無い2つの箱について「1対1に対応」と言わせる選択肢は、直接の線が無ければ×。
- 汎化を見落として「社員は事業部に所属できない」と判断させる。三角の矢印があれば関連を引き継ぐ。
- 会計の表で、すでに売上の行があるのに売上を重ねて選ばせたり、借方と貸方を入れ替えさせたりする。先に自分で仕訳を切る。
- データ分析で「物理格納を優先」「早く対象を絞る」「モデルを固定」は、どれももっともらしく見えるが誤り。
用語(14)
データとして管理する対象のまとまり(商品・社員・発注など)で、E-R図では箱で描く。
⚠ UMLではクラスと呼ぶ。E-R図ではエンティティ、UMLではクラスと覚える。
エンティティ同士のつながりで、図では線で描く。
⚠ 関係データベースの「関係(リレーション)」は表そのものを指すので別物。
エンティティとその間のリレーションシップを図にした、データモデルの描き方。
⚠ UMLクラス図と目的は同じ。汎化(白抜き三角)が出てくればUML。
関連の線の端に書く数で、その側の箱が相手1つあたりいくつ対応するかの範囲を表す。
⚠ どちらの端の数字かを取り違えやすい。「調べたい側の横の数字」を読む。
1対1・1対多・多対多といった、対応する個数の関係のこと。
⚠ 多重度と同じ意味で使われることが多い。試験ではほぼ同義と考えてよい。
システムの構造や振る舞いを図で表すための、標準化された記法の集まり。
UMLの図の1つで、クラスと、その属性・関連・多重度を表す。
⚠ E-R図との違いは、汎化や関連クラスを描けること。
共通部分をスーパークラスにまとめ、サブクラスはその一種であるとする関係で、白抜き三角の矢印で描く。
⚠ 逆向きに見たものが特化。サブクラスはスーパークラスの関連も引き継ぐ。
汎化で、共通の性質を持つ上位のクラスがスーパークラス、その一種である下位のクラスがサブクラス。
⚠ 三角の矢印が向いている側がスーパークラス。
関連そのものに属性(金額など)を持たせるために、関連の線にぶら下げるクラス。
⚠ E-R図で言えば連関エンティティにあたる。
多対多の関係を、1対多と多対1に分けるために間に置くエンティティ。
⚠ 両側から「多」で指されている箱がこれにあたる。
仕訳の左側の欄で、資産の増加や費用の発生を書く。
⚠ 貸方と逆に覚えやすい。「現金が入ったら借方」と例で覚える。
仕訳の右側の欄で、資産の減少や収益の発生(負債・純資産の増加)を書く。
⚠ 売上は貸方。1取引の借方合計と貸方合計は必ず一致する。
格納方式に関係なく、業務で扱うデータとその関係を表したモデル。
⚠ 物理データモデル(どう格納するか)は後の工程で作る。先に物理を考えるのは誤り。
このレッスンの過去問
- E-R図の多重度表記の読み取り平成22年度 春期 基本情報技術者試験 午前 問46
- UMLクラス図の多重度表記令和元年度 秋期 基本情報技術者試験 午前 問25
- 借方・貸方を持つ会計データモデルの表実装平成29年度 春期 基本情報技術者試験 午前 問26
- データ分析・データモデリングの進め方(利用部門参画)基本情報技術者試験 科目A免除 修了試験 200906 実施分 問32