ER図設計って何。
ポートフォリオ作成でER図作成に苦戦中。Readme作成→画面遷移図作成を経て、テーブル設計の段階に入った。データを効率よく取得できる設計を考えることがバックエンドエンジニアの役目の一つだという。データを効率よく取得するためのテーブル設計を行いたい。
とはいえ、ER図の設計方法がよくわからないので、学習していく。
ER図 is 何?
ER図とは、Entity(実態)同士のRelation(関連)を可視化した図のことを指す。
Entityとは例えばUsersテーブルやBoardsテーブルなどの、大枠を指している。
「ユーザー」や「記事」がエンティティ、「投稿する」がリレーションシップとなる。どのような大規模システムであっても、ER図ではエンティティとリレーションシップの組み合わせでシンプルにシステムが表現できることが特長となる。
ER図作成方法 with 3steps
通常は3つの手順を踏んでER図を作成していくそう。論理や物理やらでちょっと小難しい言葉が多く含まれていて頭がパンクしそう。
- 概念モデルの作成
- 論理モデルの作成
- 物理モデルの作成
①概念モデルの作成
要件定義工程で作成するデータモデルです。最初にシステム全体における「もの」や「できごと」をエンティティ、リレーションシップとして洗い出し、概要を表したものとなります。
全体像から書き出していくそうだ。
書き方
エンティティ同士の関連は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ステップで書かれていた記事があった。かなり分かりやすい。いかに記載していく。
①全体の要件を考える
実際にユーザーがアプリをどのような導線で使うのか思考することで、必要なエンティティを洗い出すことができる。
この全体の要件をシステムシナリオと言う。
また、この導線のことをユースケースと言う。
実際の開発現場では、ユースケースを図解して表しているそう。棒人間をユーザーに見立てて図解することが多い。ユースケースを字面に落とし込んだものをユースケース記述と言う。
顧客を占う
概要
Webアプリで顧客を占う
アクター
顧客
事前条件
なし
トリガー
診断項目にチェックを入れて、診断ボタンを押下する。
基本フロー
①診断画面にて13の項目にチェックを入れる
②今日の気分の選択する
③「占う」内容確認ボタンを押下し確認する
④占い内容を確定する。
備考
・占うを押したら確認画面が表示される
・入力内容に不備があればアラート文を表示する。
②エンティティを洗い出す
ユースケース図とユースケース記述からエンティティを洗い出す。
記述から「顧客」「運勢を占う」「今日の気分」「13項目にチェック」という4つのエンティティが洗い出せた。
このように、しっかりシナリオ設計を行っていれば簡単にエンティティを洗い出すことができる。ユースケース図の「アクター」や「ユースケース」、アクティビティ図の「処理」などがエンティティになりえる。後工程の業務で必要なデータや保管しておくべきデータに着目していく。
③エンティティをトランザクション系とマスタ系に分ける
トランザクションとは、取引のことを指している。トランザクションデータとは、業務に伴って発生した出来事の詳細を記録したデータのこと。毎回内容が異なることが想定される。
マスタデータとは、業務を遂行する際の基礎情報となるデータのこと。5W1Hにおける「誰が」「何を」の部分を指していると認識している。基本的に内容が変わることは無い。
今回は以下のように分類できる。
トランザクション系: 「13項目のチェック」「今日の気分」
マスタ系: 「顧客」「占い」
④アトリビュートを洗い出す
③で洗い出したエンティティの肉付けを行っていく。要は、具体的にどんな内容を含むのかを洗い出す事になる。カラム付といってもいいかもしれない。
マスタデータ
顧客モデル
id
username
password
占いモデル
id
user_id
title
body
created_at
portion_id
トランザクションデータ
13項目のチェックモデル
id
answers
portion_id
今日の気分モデル
id
feelings
portion_id
⑤ER図に落とし込む
④で洗い出したアトリビュートを、IE記法を用いて関連付させる。
この5つの手順を踏めば大体のER図は書くことができるみたいだ。
まとめ
何事にも手順というものが存在するみたいだ。
なんとなくER図が書けそうな気分になってきた。取り掛かってみようと思う。