1008
956

More than 3 years have passed since last update.

やさしい図解で学ぶ ER図 表記法一覧

Last updated at Posted at 2019-11-11

ER図とは?

ER図もしくはERDとは
"Entity Relationship Diagram"のこと

DB設計において
テーブルとテーブルを線でつなぎ、中身の種類と関係性見やすくしたもの
と思っていただければ大丈夫です。

プログラミング学習者の方であればどこかで”鳥の足”みたいな先端で図表が結ばれたものを見たことがあるかもしれません。

それがERDもしくはER図。

簡素なものですがたとえば下のような図です。

スクリーンショット 2019-12-16 11.24.29.png

ER図のリレーション表記法一覧

無題の図形描画 (1)のコピー.png

これだけだと少しわかりにくいかもしれないので簡単な例をいくつかみてみましょう。

例1: 1 対 多

ユーザーログイン機能とツイートが出来る簡単なアプリケーションがあるとします。

データベースにはusersテーブルとtweetsテーブルの2つのテーブルが下図のようにあります。

このテーブル間の関係性としては1となります。

スクリーンショット 2019-12-12 23.30.35.png

user→→tweet

1人のuserに対してtweetの数は0か多
(※単なる"多"ではなく、"0か多(0以上)"として考えるのは一つもtweetをしないことも可能だからです)

無題の図形描画 (1)のコピー2.png

tweet→→user

1つのtweetは必ず誰かuser1人が作成したもの。つまり、あるユーザーに属しているので下記の表記になります。
無題の図形描画 (1)のコピー8.png

例2 1 対 1

例1にprofilesテーブルとimagesテーブルをプラスしたもの
スクリーンショット 2019-12-12 23.33.20.png

user→→profile

profile→→user

userから見ると
user1人に対してprofileは1つなので11の関係となる。

逆も同じでprofile側から見ると
必ずuser1人に所属していると考えるので
無題の図形描画 (1)のコピー8.png

tweet→→image

tweetから見たimageは
1tweetに対して最大1枚imageを持てるとし、
imageのないtweetもあるとするとリレーションは"0か1"となる
無題の図形描画 (1)のコピー9.png

image→→tweet

imageから見たtweet。
一方でimageは1tweetに必ず所属していると考えるので図のような関係性になります。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3531333532342f62646135666136352d646135352d313535322d303830312d3966616433613364613135322e706e67.png

1対多 ~制約がある場合~

tweetに対してimageの最低枚数に制約がある場合
スクリーンショット 2019-12-13 0.03.50.png

"1か多"とは 1対1もしくは1対複数のとき

例えば
オークションやフリーマーケットサイトでは1つの商品に対して画像が最低1枚は必要なのでこちら。1対1でも1対多でもOKな場合です。
無題の図形描画 (1)のコピー11.png

単なる "多" とは 必ず1対複数、つまり2つ以上は必要

例えば
メッセージアプリなどでグループをつくるとなったらグループ内にメンバーが2人以上は必要ですよね。そんなときはこの表記になります。
無題の図形描画 (1)のコピー12.png

one and only oneなど厳密な制約を持たせる関係性もありますが、今回は大まかによく使われる基本的なもののみを取り上げました。気づいたところがあれば、随時更新いたします。

1008
956
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1008
956