こんにちは。いよいよ案件に配属され、慌ただしい日々を送っている佐野です。
前々回の記事ではデータベースの正規化をご紹介しました。
今回は概念データモデリングについて、情報処理技術者試験に出題される内容をもとにまとめてみましたので、どうかお付き合いください。
概念データモデリングとは
概念データモデリングとは、システム化にあたり業務で取り扱う対象をモデル化し、それらの関係を整理することです。モデル化する対象の1つ1つをエンティティと呼びます。属性のデータ型や制約など、実装レベルのことは考えないことがポイントです。
また、概念データモデリングに関連して、論理データモデリングでは関係スキーマという言葉があります。これはテーブルの構造を表したもので、テーブル名と属性名が含まれます。
概念データモデルと関係スキーマ
概念データモデルについて、バックマン図と呼ばれる図式をご紹介します。
バックマン図はエンティティを長方形で表現し、エンティティ同士のリレーションシップを線または矢印で表現する方法であり、情報処理技術者試験でよく出てきます。
例として、部門と社員の関係を表現した図を示します。ここで、矢じりの有無はカーディナリティ(多重度)を表しています。矢じりのない方が「1」、矢じりのある方が「多」となります。すなわち、1つの部門に所属する社員は複数人存在し、1人の社員は高々1つの部門に所属することが表現されています。

このとき、社員は部門の主キーを外部キーとしてもちます。
関係スキーマで表現すると次のようになります。太字が主キー、黄色のマーカーが外部キーです。
部門(部門番号、部門名)
社員(社員番号、社員氏名、部門番号)
概念データモデリング実践
では、実践してみましょう。実務経験乏しめの筆者が作成した業務要件&解答例です。温かい目でご覧ください。
A店は中古グッズを取り扱う小売店です。
この度、業務効率化のために商品管理システムを導入することになりました。
以下の業務要件に沿うように概念データモデルおよび関係スキーマを設計してください。
1. 商品カテゴリ
・商品はそれぞれ1つの商品カテゴリをもつ
・商品カテゴリは商品カテゴリ番号で識別し、商品カテゴリ名をもつ
2. ランク
・ランクとは、商品の状態に応じて付与されるもので、商品の買取価格や販売価格に影響する
・ランクはランク名(A、B、Cなど)で識別し、状態をもつ
・状態は、例としてランクAは「ほぼ新品」、ランクBは「良い」、ランクCは「不備あり」などである
3. 商品
・商品は商品番号で識別する。JANコード、商品名、商品カテゴリをもつ
・商品ごとランクごとに買取価格と販売価格が決められており、この単位で理論在庫をもつ。理論在庫は買取、販売のたびに更新される
4. 商品価格履歴
・商品の買取価格と販売価格は変動するため、商品ごとランクごとに履歴を取っている
・商品価格履歴は商品番号、ランク名、適用開始日時で識別し、適用終了日時、買取価格、販売価格をもつ
5. 買取
・買取は買取番号で識別する。買取日時をもつ
・一度の買取では複数種類の商品を買い取ることがある
6. 販売
・販売は販売番号で識別する。販売日時をもつ
・一度の販売では複数種類の商品が売れることがある
7. 棚卸
万引きやレジの打ち間違いなどが原因で、商品の実在庫と理論在庫に差が出る場合がある。そこで、A店では定期的に棚卸により商品の実在庫を把握している。
・棚卸は棚卸番号で識別し、棚卸日時をもつ
・一度の棚卸では複数の商品を対象として行う
・商品ごとランクごとに棚卸数、棚卸差異を記録する
8. 会員
A店では、システム導入にあたり顧客を会員として登録できるようにし、会員に対する販売時にポイントを付与することになった。
販売時、会員は会員カードもしくはスマートフォンのアプリでバーコードを提示し、それをレジでスキャンすることで販売と会員の情報を結びつける。
・会員は会員番号で識別する。登録日時、会員氏名、メールアドレス、所持ポイント、ポイント有効期限をもつ
・会員への販売か否かは会員販売区分で区別する
9. ポイント
・会員に対する販売時、付与ポイント、使用ポイントを記録する
・付与ポイントは販売の合計金額に対して、ポイント付与率をかけたものとなる
・ポイント付与率は一定のため、本システムでは管理しない
解答例
概念データモデル

関係スキーマ
商品カテゴリ(商品カテゴリ番号、商品カテゴリ名)
ランク(ランク名、状態)
商品(商品番号、商品名、JANコード、商品カテゴリ番号)
商品ランク(商品番号、ランク名、買取価格、販売価格、理論在庫)
商品価格履歴(商品番号、ランク名、適用開始日時、適用終了日時、買取価格、販売価格)
買取(買取番号、買取日時)
買取明細(買取番号、商品番号、ランク名、数量)
販売(販売番号、会員販売区分、販売日時)
 会員販売(販売番号、会員番号、付与ポイント、使用ポイント)
販売明細(販売番号、商品番号、ランク名、数量)
棚卸(棚卸番号、棚卸日時)
棚卸明細(棚卸番号、商品番号、ランク名、棚卸数、棚卸差異)
会員(会員番号、登録年月日、会員氏名、メールアドレス、所持ポイント、ポイント有効期限)
会員販売は販売のサブタイプとなっています。テーブルとして実装する際には販売テーブルに会員販売の属性をもたせ、会員販売区分の値(例えば”1″なら会員への販売、”0″なら非会員への販売)で区別することになります(会員販売テーブルと販売テーブルを別テーブルとする方法もあります)。
最後に
配属された案件では、どのテーブルとどのテーブルがどのように関連しているかを意識する場面がありました。
その経験を通じて、概念データモデリングの考え方を身につけることは今後の実務においても非常に重要だと感じています。

