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?

中間テーブル(多対多の関係性)を理解する

Posted at

はじめに

多対多のテーブル構造について分かったようでわかっていなかったので深堀していこうと思います。

概要

SNSなどで一般的な投稿に対して複数のいいね!がつくような仕様のテーブル構造を考えます。
ER図は以下。

分解して考える

これだけで理解できれば問題ないのですが、「?」となった人、読み進めてください。

まず、ユーザーには「投稿をするユーザー」と「いいねをするユーザー」がいますが、実際には同じユーザーが両方の行動を行います。
今回は「いいね!」という行為に絞って話を進めていきます。

  • ユーザーは複数の投稿にいいねをすることができる
  • 投稿は複数のユーザーからいいねを受け取ることができる

この状態では、usersテーブルとpostsテーブルの間には1対多の関係が存在します。しかし、ユーザーと投稿の間には「いいね」を介した多対多の関係があります。この多対多の関係を管理するために、中間テーブルとしてlikesテーブルを使用します。

likesテーブルは、user_idとpost_idの2つの外部キーを持ち、ユーザーがどの投稿にいいねをしたかを管理します。これにより、ユーザーと投稿の間の多対多の関係を効率的に追跡することができます。

図解する

図解すると以下のようになります。

投稿するユーザー

スクリーンショット 2024-07-04 11.07.09.png

いいねをするユーザーと投稿につくいいねの関係

スクリーンショット 2024-07-04 11.07.25.png

データ例

users テーブル

id name email
1 Alice alice@example.com
2 Bob bob@example.com

posts テーブル

id header body user_id
1 Post 1 Content 1 1
2 Post 2 Content 2 2

likes テーブル

id user_id post_id
1 1 2
2 2 1
3 1 1

このデータ構造により、ユーザーAliceがPost 2とPost 1にいいねをし、ユーザーBobがPost 1にいいねをしたことがわかります。つまり、中間テーブル(likes)は多対多の関係を管理しています。

まとめ

中間テーブル(likes)を使用することで、「ユーザー」と「投稿」の間の多対多の関係を管理できます。これにより、各ユーザーがどの投稿にいいねをしたか、各投稿にどのユーザーがいいねをしたかを効率的に追跡できます。

参考

以下、参考にさせていただきました!
やさしい図解で学ぶ 中間テーブル 多対多 概念編

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?