0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】カーディナリティについて

Last updated at Posted at 2024-10-10

 ER図の書き方やカーディナリティについての記事が少なく、私自身困った経験があります。
 私がER図を作成する際にカーディナリティについてどのように紐解いているのか共有できればと思います。

図書館の貸し出し管理を行うアプリを例に挙げて説明していきます。
以下のテーブルがあります。

  • 図書マスタテーブル
  • 利用者マスタ
  • 貸出テーブル

テーブル間で外部キー(同じカラム)を探す。

図書マスタ(BOOK)

book_id title
1 桃太郎
2 金太郎
3 一寸法師
4 かぐや姫

本当であれば、もっとカラムがあると思いますが、割愛いたします。(以降のテーブルも同様です。)

利用者マスタ(USER)

user_id name
1 近本
2 中野
3 森下
4 大山

貸出テーブル(LEND)

lend_id user_id book_id lend_date
1 1 1 第1月曜日
2 2 3 第1木曜日
3 4 2 第2水曜日
4 3 4 第2火曜日
5 3 1 第2火曜日

以上のテーブルのカラムから外部キー(同じ名前のカラム)として、

  • 図書マスタのbook_idと貸出テーブルのbook_id
  • 利用者テーブルのuser_idと貸出テーブルのuser_id

を見つけられます。

アプリケーションが複雑になれば、外部キーが同じ名前でない場合や、複数あることもあります。

さぁ本題のカーディナリティの考え方なのですが、私は SQL を用いております。

book.sql
SELECT * FROM BOOK WHERE book_id = 1;

 以上のようにリレーションがある(外部キー、すなわち同じ名前のカラムを持っているテーブル)テーブルで同じ名前のカラムをwhere句に入れてレコードを取得したと仮定しましょう。
 今回の場合、レコードは1件だけとれるはずです。(主キーなので一件だけとれるのは当たり前ですが,,,)

lend.sql
SELECT * FROM LEND WHERE book_id = 1;

今回は貸出テーブルで同じ名前のカラムをwhere句に入れてレコードを取得します。
今回は2件取得できます。このように外部キー、すなわち同じ名前のカラム(テーブル結合する際の結合点)をwhere句に入れた際に必ず1件だけとれるテーブルが1。複数レコードが取得できるテーブルが多なのです!

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?