ER図設計って何。

ポートフォリオ作成でER図作成に苦戦中。Readme作成→画面遷移図作成を経て、テーブル設計の段階に入った。データを効率よく取得できる設計を考えることがバックエンドエンジニアの役目の一つだという。データを効率よく取得するためのテーブル設計を行いたい。

とはいえ、ER図の設計方法がよくわからないので、学習していく。

ER図 is 何?

ER図とは、Entity(実態)同士のRelation(関連)を可視化した図のことを指す。

Entityとは例えばUsersテーブルやBoardsテーブルなどの、大枠を指している。

Image from Gyazo

「ユーザー」や「記事」がエンティティ、「投稿する」がリレーションシップとなる。どのような大規模システムであっても、ER図ではエンティティとリレーションシップの組み合わせでシンプルにシステムが表現できることが特長となる。

ER図作成方法 with 3steps

通常は3つの手順を踏んでER図を作成していくそう。論理や物理やらでちょっと小難しい言葉が多く含まれていて頭がパンクしそう。

  1. 概念モデルの作成
  2. 論理モデルの作成
  3. 物理モデルの作成

①概念モデルの作成

要件定義工程で作成するデータモデルです。最初にシステム全体における「もの」や「できごと」をエンティティ、リレーションシップとして洗い出し、概要を表したものとなります。

全体像から書き出していくそうだ。

書き方

エンティティ同士の関連はIE記法で書く。他にもIDEF1Xという書き方があるが、IE記法の方がシンプルでわかりやすいので今回はIE記法の学習をする。

IE表記とは

「○」「l」「鳥の足(3つ股の線)」という3つの記号を組合せて表現している。

記号の意味は下記の通り。3つの記号さえ覚えればIE記法のER図が書ける。とのこと。

○ ゼロ

|イチ

鳥の足 多

 

ここで概念モデルに登場する下記4つの概念を整理しておく。

エンティティ

データのまとまりのこと。UserモデルやBoardモデルというように、何気なく使ってきたテーブルを指す。エンティティの中にアトリビュート、俗に言うカラムが格納されている。

アトリビュート

エンティティに格納されているカラムのこと。

リレーション

エンティティ同士の関連を表したもの。カーディナリティを用いて作成する。

カーディナリティ

リレーション同士の多重度のこと。

関連のあるエンティティAとBについて、片方から他方を見たときに相手が1つなのか、複数なのかということを明らかにすることで「1対多」「多対多」「1対1」と表現する。

【初心者向け】丁寧すぎるRails『アソシエーション』チュートリアル【幾ら何でも】【完璧にわかる】🎸 - Qiita

②論理モデルの作成

具体的には属性(アトリビュート)、アイデンティファイア(主キー)、外部キーの定義や、リレーションシップにカーディナリティといった要素を追加する。

③物理モデルの作成

Oracle Database等の特定の物理データベース向けに論理モデルの変換を行います。例えばデータ型を追加したり、物理データベースに即したアルファベットに変換する。ER図の最終形態がこの物理モデルとなる。

この3つの手順を踏んだらER図を作成できるそう。専門用語多くて頭に入ってこないぞい?

ER図作成方法 with 5steps

実際にアプリを作る順番が5ステップで書かれていた記事があった。かなり分かりやすい。いかに記載していく。

  1. 全体の要件を考える
  2. エンティティを洗い出す
  3. エンティティをトランザクション系とマスタ系に分ける
  4. アトリビュートを洗い出す
  5. ER図に落とし込む

①全体の要件を考える

実際にユーザーがアプリをどのような導線で使うのか思考することで、必要なエンティティを洗い出すことができる。

この全体の要件をシステムシナリオと言う。

また、この導線のことをユースケースと言う。

実際の開発現場では、ユースケースを図解して表しているそう。棒人間をユーザーに見立てて図解することが多い。ユースケースを字面に落とし込んだものをユースケース記述と言う。

ユースケース名   

顧客を占う


概要    

Webアプリで顧客を占う


アクター    

顧客


事前条件    

なし


トリガー    

診断項目にチェックを入れて、診断ボタンを押下する。


基本フロー  

 ①診断画面にて13の項目にチェックを入れる
②今日の気分の選択する
③「占う」内容確認ボタンを押下し確認する
④占い内容を確定する。


備考    

・占うを押したら確認画面が表示される
・入力内容に不備があればアラート文を表示する。

②エンティティを洗い出す

ユースケース図とユースケース記述からエンティティを洗い出す。

記述から「顧客」「運勢を占う」「今日の気分」「13項目にチェック」という4つのエンティティが洗い出せた。

Image from Gyazo

このように、しっかりシナリオ設計を行っていれば簡単にエンティティを洗い出すことができる。ユースケース図の「アクター」や「ユースケース」、アクティビティ図の「処理」などがエンティティになりえる。後工程の業務で必要なデータや保管しておくべきデータに着目していく。

③エンティティをトランザクション系とマスタ系に分ける

トランザクションとは、取引のことを指している。トランザクションデータとは、業務に伴って発生した出来事の詳細を記録したデータのこと。毎回内容が異なることが想定される。

マスタデータとは、業務を遂行する際の基礎情報となるデータのこと。5W1Hにおける「誰が」「何を」の部分を指していると認識している。基本的に内容が変わることは無い。

今回は以下のように分類できる。

トランザクション系: 「13項目のチェック」「今日の気分」

マスタ系: 「顧客」「占い」

Image from Gyazo

アトリビュートを洗い出す

③で洗い出したエンティティの肉付けを行っていく。要は、具体的にどんな内容を含むのかを洗い出す事になる。カラム付といってもいいかもしれない。


マスタデータ

顧客モデル

id

username

email

password

占いモデル

id

user_id

title

body

created_at

portion_id


トランザクションデータ

13項目のチェックモデル

id

answers

portion_id

今日の気分モデル

id

feelings

portion_id

Image from Gyazo

⑤ER図に落とし込む

④で洗い出したアトリビュートを、IE記法を用いて関連付させる。

Image from Gyazo

この5つの手順を踏めば大体のER図は書くことができるみたいだ。

まとめ


  1. 全体の要件を考える
  2. エンティティを洗い出す
  3. エンティティをトランザクション系とマスタ系に分ける
  4. アトリビュートを洗い出す
  5. ER図に落とし込む

何事にも手順というものが存在するみたいだ。

なんとなくER図が書けそうな気分になってきた。取り掛かってみようと思う。

ER図とは?書き方やテクニックをわかりやすく解説

若手プログラマー必読!5分で理解できるER図の書き方5ステップ