どうも。つじけ(tsujikenzo)です。このシリーズでは「draw.io(ドローアイオー)でデータベース設計のER図をかこう」ということで、全4回でお届けします。今日は最終回で「IE表記法編」をお送りします。
前回のおさらい
前回は「濃度(カーディナリティ)編」ということで、Relationshipと濃度についてお届けしました。

今回は、「IE表記法編」をお届けします。
概念モデルから論理モデルへの変換
第3回まででお伝えしたER図は、「ERモデル」と呼ばれ、実世界という概念を「Entity」「Relationship」「Cardinality」という3つの要素で表現(モデル化)したものでした。

この概念モデルは、必ずしもデータベース管理システム(DBMS)上で管理可能なデータベースの表現になっていません。なので、各システムでも使えるような表現に変換する必要があります。
これを「論理モデル」といいます。
少しむずかしくなってしまいましたが、データベース管理システム(DBMS)とはリレーショナルデータベースそのもののことですし、リレーショナルデータベースで使える表現ということは、「テーブル」「主キー」「リレーションシップ」を表現するということです。
概念モデルからどうやって論理モデルへ変換するか、は「正規化」を含む、非常に深い内容になりますので、今回は論理モデルへ変換したときの表記法、特に「IE表記法」についてお届けします。
IE表記法とは
論理モデルで使用されるER図も数種類あり、それぞれ特徴があります。今回は「IE表記法」(IEは情報工学-Information engineering-の略)を取り扱います。
サンプル
draw.ioには「IE表記法」のサンプルが用意されています。ファイルメニューの[新規作成]をクリックします。

ダイアグラム名に「はじめてのIE表記法」と入力し、一覧から[Entity Relationship Diagram]を選択して[作成する]をクリックします。

サンプルが表示されました。

IE表記法では、カーディナリティにカラス足が用いられており、初級者でも直感的に理解しやすいと言われております。
サンプルを見渡したら不要ですので、削除します。draw.ioではマウスのドラッグで指定した範囲を、全て選択することができます。

このように選択されたら、キーボードの[Delete]キーで削除します。

テーブルからエンティティを作成
今回はこのような3つのテーブルを想定し、実際にリレーショナルデータベースで運用できるようなER図を作成してみます。

エンティティの作成
左カラム]に[ER]がありますので、クリックします。

一覧にアイコン[Table1]がありますので、マウスホバーで確認したら、

クリックして、ページに追加します。

まず、テーブル[顧客]のエンティティを作成します。ERモデルと同様に、変更したい文字列はダブルクリックで変更することができます。

属性の削除
不要な属性がある場合は、[ココ]をクリックすると、属性1行を選択することができます。

キーボードの[Delete]キーで削除できます。

属性の追加
属性を追加する場合は、先ほどと同様に属性を選択した状態で、右クリックから[複製]をクリックします。(ショートカットCtrl+D)

属性が複製されました。空っぽの属性を追加する方法が分かりませんでしたので💦、とりあえず、複製を作ってから名前の変更でいいと思います。

属性の枠線
属性を選択すると、右側の[フォーマットパネル]で[Property]と[Value]を確認・設定することができます。
例では、属性の枠線を設定する場面ですが、[Bottom Line]のチェックを外すと、属性の下線が消えます。

ちょっとわかりづらいですが、下線が消えています。

文字列と同様に、スタイルの設定などもERモデルと同じです。このようなエンティティを作成してみましょう。

リレーションシップをつける
エンティティどうしがどのような関係になっているかは、ERモデル同様に、カーディナリティで表現することができます。

「カーディナリティと鳥の足記法の使い方」https://cacoo.com/ja/blog/entity-relationship-diagram-for-beginner/
エンティティ[会社]と[社員]にはつながりがありますので、まず実線で結びます。

そして、カーディナリティを確認すると、
- 会社側に立って[社員]の一人をつまみあげると、その社員から特定される「会社は1つ」です。
- 同様に、社員側に立って[会社]をひょいとつまみあげると、その会社に紐づいている社員は0人かもしくはたくさんいます。
このとき、会社と社員のあいだには「1対0以上多」の関係があると言えます。
カーディナリティの設定は、実線を選択した状態で、「フォーマットパネル」から線の両端を変更します。

同様に、[社員]と[部署]には「1対1以上多」の関係があるといえます。このようになりました。

以上で、完成です。
IE表記法のカーディナリティの設定は、コツがつかめるようになるまで場数が必要な感じもしますが、詳しく解説した記事を別途書きたいと思います。
まとめ
さて、以上で「IE表記法編」ということで、リレーショナルデータベースモデルのエンティティとリレーションシップの描画についてお届けしました。また、このシリーズでは、ER図の基本であるにも関わらず掲載できなかった内容もたくさんあります。
- IDEF1X記法(アイデフ記法)
- エンティティの親子、依存/非依存関係
- 外部キー
ER図の「書き方」のみをお伝えするつもりでも、これほど情報がつまっていることを改めて思い知りました。いったんこのシリーズは終わりますが、別シリーズとして「ではどうやってリレーショナルデータベースの設計図を書くのか」についてお届けできればと思います。気長にお待ちいただければ幸いです!
補足
似たようなダイアグラム描画ツールに「Lucidchart」というアドオンもあります。フリープランが用意されていて、編集可能なドキュメントの上限数が3つです。ご紹介までに。