はじめに
いよいよポートフォリオ作成が始まりました!
チーム開発から2回目のER図作成ですが、
カーディナリティの使い方が曖昧だったため勉強し直しました!
今回はIE記法のER図について記載します
名称を覚えよう
エンティティ
エンティティとは、データのまとまりのこと
今回の例でみると、「ユーザー」というエンティティ(データのまとまり)となります

アトリビュート(属性)
アトリビュートとは、エンティティの中の属性のこと
テーブルでいうカラムのところで、今回は、投稿id〜更新日時まで全てです
PKと書かれている投稿idが主キー、FKがタグidという外部キーを指します

リレーションシップ
リレーションシップとは、エンティティ同士の関係を表現する線です
1対多や1対1、多対多などいろいろな組み合わせがあります
今回は一人のユーザーが複数の投稿を持つことができるため、1対多の関係になります
この組み合わせを表現するために、カーディナリティという記号を使います

カーディナリティ
カーディナリティは3つの記号を組み合わせて表現されます
記号 | 意味 |
---|---|
⚪︎ | 0 |
| | 1 |
![]() |
多 |
以下で詳しく見ていきます
1対1の関係
原則として、1対1の関係は一つのエンティティにまとめることができるため非推奨です
しかし、エンティティの分割、条件付きデータの管理、セキュリティ強化などの理由で意図的に使用する場合があります
今回の場合は一人のユーザーに対して、ユーザープロフィールは必ず一つあるので、1対1が成立します
また、外部キーはどちらか片方につけるのが一般的です

1対多(1対0以上)の関係
こちらは先ほど使用した例です
一人のユーザーが複数の投稿を持つことができるため、1対多が成立します
ここで注目したいのは、投稿側のカーディナリティに⚪︎がついていることです

これは、先ほどの表を見ると⚪︎とが組み合わさっている状態で、
このようなリレーションシップを1対0以上の関係といいます
記号 | 意味 |
---|---|
⚪︎ | 0 |
| | 1 |
![]() |
多 |
例えばユーザーが新規登録をしたときは、投稿は一つも無いはずです
投稿されればいくらでも増えていきます
ユーザー1に対して、投稿が0の状態が成り立つか成り立たないかで考えましょう!
1対多(1対1以上)の関係
今回の場合は一回の注文は複数の注文詳細(商品*N個、税込価格etc…)を持つことができるため、1対多が成立します
ここでも、注文詳細のカーディナリティに注目すると | と が組み合わさっていることがわかります

1回の注文に対して、注文詳細は必ず1以上になる
すなわち1回の注文に対して0個の注文詳細は成り立たないです!
多対多の関係
例えるなら、学生とサークル所属についてです
学生はサークルに入らなくてもいいし、複数所属してもいい状態だとします
この状態を表現すると以下になります

しかし、原則こういった書き方はしません
どうするのかというと、中間テーブルを作成して表現します↓

中間テーブルについてはこちらの記事が大変わかりやすかったです
是非読んでみてください!
さいごに
今回はよく使用するものをまとめています
曖昧な記載方法や他の記述方法(IDEF1X)などもあります!
また機会があれば勉強したいなと思います💪