1
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?

More than 1 year has passed since last update.

【初学者向け】中間テーブルを用いる場面について調べてみた

Posted at

はじめに

多対多の関係を表現する中間テーブルですが、具体的に使用する場面が知りたかったので、調べた結果をまとめてみます。
中には純粋に多対多の関係だけを表現するものではないのもあります。

いいね機能

各ユーザーは複数の投稿(例えば、ツイート、写真、記事など)に「いいね」をつけることができ、各投稿は複数のユーザーから「いいね」をもらうことができます。この関係を実現するためには、「Likes」または「Favorites」といった中間テーブルが必要になります。
以下は一般的な「いいね」機能のためのデータベース設計です。

Usersテーブル

user_id username email password ...
1 user1 user1@example.com **** ...
2 user2 user2@example.com **** ...
3 user3 user3@example.com **** ...
... ... ... ... ...

Postsテーブル

post_id user_id title content timestamp ...
1 1 title1 content1 2023-01-01 12:00:00 ...
2 2 title2 content2 2023-01-02 12:00:00 ...
3 1 title3 content3 2023-01-03 12:00:00 ...
... ... ... ... ... ...

Likesテーブル

user_id post_id timestamp
1 2 2023-01-02 12:30:00
2 1 2023-01-02 12:45:00
3 1 2023-01-02 13:00:00
... ... ...

ブックマーク機能

ブックマーク機能を実装するためのテーブル設計は、「いいね」機能の設計と非常に似ています。
以下に、基本的なブックマーク機能のためのテーブル設計を表現します。

Usersテーブル
(同上)

Postsテーブル
(同上)

Bookmarksテーブル

user_id post_id timestamp
1 2 2023-01-02 12:30:00
2 1 2023-01-02 12:45:00
3 1 2023-01-02 13:00:00
... ... ...

コメント機能

各ユーザーは複数の投稿にコメントをすることができ、各投稿は複数のユーザーからコメントをもらうことができます。しかし、Commentsのようなテーブルは、それ自体が独立したエンティティ(コメント)を表現しています。

Usersテーブル
(同上)

Postsテーブル
(同上)

Commentsテーブル

comment_id user_id post_id content timestamp
1 2 1 "Nice post!" 2023-01-02 12:45:00
2 3 1 "I agree." 2023-01-02 13:00:00
3 1 2 "Interesting." 2023-01-02 13:15:00
... ... ... ... ...

フォロー機能

フォロー機能はユーザーとユーザーの間の多対多の関係を持ちます。ユーザーは複数のユーザーをフォローすることができ、各ユーザーは複数のフォロワーを持つことができます。この関係を管理するためには中間テーブル(例えば「Follows」や「Relationships」テーブルなど)が必要です。
フォロー機能を実装するためのテーブル設計は以下のようになります。

Usersテーブル
(同上)

Relationshipsテーブル

follower_id followed_id
1 2
1 3
2 3
... ...

ここでの「follower_id」はフォローする側のユーザーを、「followed_id」はフォローされる側のユーザーを表しています。

タグ機能

各記事(または商品など)は複数のタグを持つことができ、各タグは複数の記事(または商品)に関連付けられることがあります。この関係を管理するためには、ArticlesTagsのような中間テーブルが必要となります。
以下に、基本的な記事(商品)とタグのためのテーブル設計を表現します。

Articlesテーブル (あるいは Productsテーブル)

Article_id user_id title content timestamp ...
1 1 title1 content1 2023-01-01 12:00:00 ...
2 2 title2 content2 2023-01-02 12:00:00 ...
3 1 title3 content3 2023-01-03 12:00:00 ...
... ... ... ... ... ...

Tagsテーブル

tag_id tag_name
1 tag1
2 tag2
3 tag3
... ...

ArticlesTagsテーブル (あるいは ProductsTagsテーブル)

Article_id tag_id
1 2
2 1
2 3
... ...

ユーザーとグループ

各ユーザーは複数のグループに所属することができ、各グループは複数のユーザーを含むことができます。この関係を管理するためには、UsersGroupsのような中間テーブルが必要となります。
以下に、基本的なユーザーとグループのためのテーブル設計を表現します。

Usersテーブル
(同上)

Groupsテーブル

group_id group_name ...
1 group1 ...
2 group2 ...
3 group3 ...
... ... ...

UsersGroupsテーブル

user_id group_id
1 2
2 1
2 3
... ...

受講生と講座

各受講生は複数の講座を受けることができ、各講座は複数の受講生を持つことができます。この関係を管理するためには、StudentsCoursesのような中間テーブルが必要となります。
以下に、基本的な受講生と講座のためのテーブル設計を表現します。

Studentsテーブル

student_id student_name email ...
1 student1 student1@example.com ...
2 student2 student2@example.com ...
3 student3 student3@example.com ...
... ... ... ...

Coursesテーブル

course_id course_name ...
1 course1 ...
2 course2 ...
3 course3 ...
... ... ...

StudentsCoursesテーブル

student_id course_id
1 2
2 1
2 3
... ...

イベントと参加者

各イベントは複数の参加者を持つことができ、各参加者は複数のイベントに参加することができます。この関係を管理するためには、EventsParticipantsのような中間テーブルが必要となります。
以下に、基本的なイベントと参加者のためのテーブル設計を表現します。

Participantsテーブル

participant_id participant_name email ...
1 participant1 participant1@example.com ...
2 participant2 participant2@example.com ...
3 participant3 participant3@example.com ...
... ... ... ...

Eventsテーブル

event_id event_name event_date ...
1 event1 2023-01-01 ...
2 event2 2023-02-01 ...
3 event3 2023-03-01 ...
... ... ... ...

EventsParticipantsテーブル

participant_id event_id
1 2
2 1
2 3
... ...

最後に

ここまで読んでいただきありがとうございました!!
ぜひイイね!をよろしくお願いします (*ᴗˬᴗ)⁾⁾
それではまた!(^_^)ノシ

1
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
1
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?