01
データモデリングとER図:業務をデータに置き換える設計図
家を建てるとき、いきなりレンガを積み始めることはありません。部屋がいくつで、どこにドアを付けるかという設計図から描きます。データベースも同じです。業務にどんなデータがあり、それらがどうつながっているかを先に描いておく作業をデータモデリングといい、その成果物がデータモデルです。
モデリングには3つの性格があります。
- 抽象化:現実の数多くの事実から共通点を取り出し、一定の形式で表す
- 単純化:決められた表記法で、誰でも簡単に理解できるようにする
- 明確化:あいまいな部分をなくし、1つの意味にしか読めないようにする
業務を見る観点も3つあります。何を管理するのか(データ観点)、どんな仕事をするのか(プロセス観点)、その仕事がデータにどんな影響を与えるのか(データとプロセスの相関観点)です。データモデリングは、このうちデータ観点が中心です。
概念 → 論理 → 物理、3つの段階で具体化
設計図も、最初は全体像を描き、だんだん細かく描いていきます。モデリングも3つの段階に分けます。
| 段階 | すること | 特徴 |
|---|---|---|
| 概念モデリング | 業務全体から中心となるエンティティとその関係を見つける | 抽象度がいちばん高い。全社的な観点の全体像 |
| 論理モデリング | キー・属性・リレーションシップを正確に決め、正規化する | 特定のDBMSに依存しない。再利用性がいちばん高い |
| 物理モデリング | 実際のDBMSに合わせてテーブル・列のデータ型・インデックスを決める | 性能と記憶領域を考慮する。抽象度がいちばん低い |
3層スキーマとデータ独立性
同じデータでも、見る人によって必要な姿が違います。ANSI/SPARCは、データベースを3つの層に分けて考えます。層に分ける目的は、ある層を変えてもほかの層が影響を受けにくくすること、つまりデータ独立性です。
| 層 | 誰の観点か | 説明 |
|---|---|---|
| 外部スキーマ | 利用者・アプリケーション | それぞれが必要な部分だけを見た姿(ビュー)。複数ありうる |
| 概念スキーマ | 組織全体 | すべてのデータと関係を1つに統合した姿。1つだけ |
| 内部スキーマ | 記憶装置 | データが実際にどう格納されるか(ファイル・インデックスの構造) |
外部と概念の間が切り離されていて、概念スキーマが変わっても利用者の画面はそのままであることを論理的データ独立性、概念と内部の間が切り離されていて、格納方法を変えても概念スキーマはそのままであることを物理的データ独立性といいます。
モデリングを誤ると起きる問題も、3つにまとめられます。同じデータを何か所にも持つ重複、業務が少し変わっただけでモデルを大きく直さなければならない非柔軟性、互いに関連するデータのつじつまが合わなくなる非一貫性です。
ER図:エンティティ・リレーションシップ・属性で描く図
データモデルはふつうER図(ERD、Entity Relationship Diagram)で描きます。構成要素は、エンティティ、リレーションシップ(関係)、属性の3つです。表記法は、関係線の端を鳥の足の形で描くIE表記法と、任意の関係を点線で描くBarker表記法がよく使われます。ふつうは次の順番で描きます。
- エンティティを描く
- エンティティを適切に配置する — 重要なエンティティを左上に
- エンティティの間にリレーションシップを結ぶ
- リレーションシップ名を書く
- リレーションシップに参加する数(1つ・複数)を書く
- リレーションシップが必ず必要か(必須・任意)を書く
下の図で段階を進めながら、部署と社員のER図がどう出来上がっていくかを見てください。同じモデルをBarker表記法に切り替えることもできます。
6. オプショナリティを書く — IE表記法
- 読み方
- 各部署は複数の社員を含むことがある / 各社員は必ず1つの部署に所属する
段階を進めながらER図が描かれる順番を見て、同じモデルをBarker表記法にも切り替えてみてください。緑はその段階で新しく描いた部分です。
リレーションシップが必ず必要かを書きます。社員は必ず1つの部署に所属するので部署側に縦線(必須)を、部署は社員がいなくてもよいので社員側に丸(任意)を付けます。これで「各部署は複数の社員を含むことがある」「各社員は必ず1つの部署に所属する」と読めます。
問題文にこんな表現があれば → これを選ぶ
- “抽象度がいちばん高いモデリング”概念モデリング
- “DBMSに依存せず、再利用性がいちばん高いモデル”論理モデル
- “性能・記憶領域を考慮してDBMSに合わせる段階”物理モデリング
- “概念スキーマが変わっても利用者の画面はそのまま”論理的データ独立性
- “格納構造が変わっても概念スキーマはそのまま”物理的データ独立性
- “ER図の3つの構成要素”エンティティ・リレーションシップ・属性
- “ER図で重要なエンティティを置く場所”左上
広告
02
エンティティと属性
ER図の箱の1つ1つがエンティティで、箱の中に書くのが属性です。まずは、何をエンティティにし、何を属性にするかを決めます。
エンティティ:業務で管理する対象の集まり
エンティティは、業務に必要で、継続して管理すべき対象です。社員、部署、注文のように名前を付けられるものです。1つのエンティティは1つ1つのものではなく集合だという点が大事です。社員エンティティは社員1人ではなく社員全体のことで、その中の1人1人をインスタンスと呼びます。
エンティティになるには、次の条件を満たす必要があります。
- 業務で必要とされ、管理しようとする情報である
- インスタンスを1つずつ区別できる識別子がある
- インスタンスが2つ以上ある — 1つしかないならエンティティにする理由がない
- 業務プロセスがそのエンティティを使う(作る・読む・直す)
- 属性を持つ
- ほかのエンティティとのリレーションシップが少なくとも1つある — コード・統計のエンティティのように、あえてリレーションシップを省く例外もある
エンティティは2つの基準で分類します。
| 基準 | 分類 | 例 |
|---|---|---|
| 形があるか | 有形エンティティ — 物理的な形がある | 社員、商品、講師 |
| 概念エンティティ — 形はないが管理する概念 | 組織、保険商品 | |
| 事件エンティティ — 業務を行う中で発生する | 注文、請求、受講申込 | |
| いつ発生するか | 基本(キー)エンティティ — ほかのエンティティなしに自ら発生する | 顧客、商品、部署 |
| 中心エンティティ — 基本エンティティから発生し、業務の中心になる | 注文、契約 | |
| 行為エンティティ — 2つ以上の親から発生し、頻繁に変わり、量が増えていく | 注文明細、変更履歴 |
名前は現場で使う言葉で、略語を使わず、単数形の名詞で付け、モデルの中で重ならないようにします。「注文」の代わりに「注文一覧」のような複数を表す名前にはしません。
属性:エンティティを説明する、それ以上分けられない性質
属性は、エンティティが持つ性質のうち業務に必要で、意味のうえでそれ以上分けないものです。社員の氏名・給与が属性で、健太というインスタンスが氏名属性に持つ「健太」が属性値です。4つの関係は次のようにまとめられます。
- 1つのエンティティは、2つ以上のインスタンスの集合である
- 1つのエンティティは、2つ以上の属性を持つ
- 1つの属性は、インスタンスごとに値を1つだけ持つ — 値が複数あるなら別のエンティティに切り出す
下の図で用語を切り替えながら、論理モデルの言葉がテーブルのどこにあたるかを見てください。
論理モデル(ER図)
社員
PK社員番号
氏名
部署コード
給与
物理モデル(テーブル)とデータ
| PKEMP_NO | NAME | DEPT_CODE | SALARY |
|---|---|---|---|
| 101 | 葵 | D10 | 300 |
| 102 | 健太 | D10 | 250 |
| 103 | 翔太 | D20 | 400 |
| 104 | 結衣 | D20 | 350 |
エンティティ = テーブル
用語を選んでみてください。論理モデルの言葉がテーブルのどこにあたるかが緑で示されます。
業務で管理すべき対象の集まりです。「社員」というエンティティは社員1人のことではなく、社員全体をまとめて呼ぶ名前で、物理モデルではテーブルになります。
属性もいくつかの基準で分類します。
| 基準 | 分類 | 説明 |
|---|---|---|
| 特性 | 基本属性 | 業務でもともと使っている値 — 氏名、注文日 |
| 設計属性 | 設計の中で新しく作った値 — 商品コード、連番 | |
| 派生属性 | ほかの属性から計算した値 — 注文合計。元の値と食い違うおそれがあるので、少ないほどよい | |
| 構成方式 | PK属性 / FK属性 / 一般属性 | 識別子か、ほかのエンティティから来たか、どちらでもないか |
| 分けられるか | 単純属性 / 複合属性 | 年齢のように1つ / 住所(都道府県・市区町村・町名)のように複数に分かれる |
| 値がいくつあるか | 単一値属性 / 多値属性 | マイナンバーのように1つ / 電話番号のように複数 — 多値はエンティティに分ける |
属性が取りうる値の範囲をドメインといいます。データ型とサイズ、制約で決めます。たとえば「成績」のドメインは、0以上100以下の整数です。
問題文にこんな表現があれば → これを選ぶ
- “インスタンスが1つしかない対象”エンティティにしない
- “社員・物品のように形があるエンティティ”有形エンティティ
- “注文・請求のように業務を行う中で発生するエンティティ”事件エンティティ
- “ほかのエンティティなしに自ら発生するエンティティ”基本(キー)エンティティ
- “2つ以上の親から発生し、増え続けるエンティティ”行為エンティティ
- “ほかの属性から計算して求めた属性”派生属性 — 整合性のため最小限に
- “電話番号のように値が複数ある属性”多値属性 → エンティティに分ける
- “属性が取りうる値の範囲”ドメイン
Pro限定
ここまでは無料で読めます
残りの3章はPro会員向けです。各章に3D図解と「問題文にこんな表現があれば」の整理が続き、最後の章では実際に解いて確かめられます。
- 03リレーションシップと識別子
- 04正規化
- 05非正規化とモデルの考慮事項
広告