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?

Spring Boot + Reactで記事投稿アプリを作成予定|ER図でデータ構造を設計してみた

Last updated at Posted at 2025-04-11

※学習中のため誤っている箇所があるかもしれません。

ER図とは?

ER図(Entity Relationship Diagram)とはデータベースの設計図です。
データの構造を視覚的に表現することで、効率的なデータベース設計を行うことができます。

ER図はツールやウェブサービスを利用することで簡単に作成できます。
今回は以下のサービスを利用しました。
https://dbdiagram.io/:ブラウザ上でER図を簡単に作成できる無料ツール

ER図の種類

概念ER図:抽象的で主にテーブル名称とその関係性を記載
論理ER図:概念ER図に中身を追加し、詳細化したもの
物理ER図:実際のデータベース構造に合わせて作成したもの

論理ER図、概念ER図に関しては今回作成は省略します。
チーム開発であれば情報整理のため作成したほうがいいかもしれません。

しかし、小規模開発だとあまり論理ER図とその他ER図の違いがなく、複数作成する意味があまりないため
以下の物理ER図のみ作成しました

image.png

説明

今回の記事投稿サイトで
それぞれの情報を保持するため
以下のようなテーブルを設計しています

ユーザーテーブル

登録したユーザー情報

記事テーブル

ユーザーが投稿した記事情報

タグテーブル

記事に設定されたタグ情報

article_tagsは
タグテーブルと記事テーブルの「多対多」を管理するための中間テーブルです。

リレーションシップ

ER図に記載されている記号について説明します。

0...1

これは「0件または1件までの関連」があることを表します

*

この記号は接続元に対し、多数であることを表します。
三又になっている場所で、
userテーブルのidに対して
articleに登録されいているuser_idが複数存在していることを意味します。

userテーブルとarticleテーブル

0または1件のusers.idに対し、複数のarticle.user_id情報が存在します。
そのため「users.id : article.user_id」は1対多(1:N)の関係です。
※0件の可能性があるのは、ユーザーが削除された場合でも記事情報は残るためです

tagsテーブルとarticleテーブル

1件のtags.tag_idに対し、複数のarticle_tags.tag_idが存在します。
こちらも上記同様「tags.tag_id : article_tags.tag_id」が1対多(1:N)の関係です。

article_tagsテーブルに関して

このテーブルを作成したのは
タグテーブルと記事テーブルの多対多を整理して登録することができます。

記事テーブルにタグ情報を保存しようとすると

id user_id title content tag1 tag2 tag...

このように記事テーブルにタグ情報を持たせると
tag1,tag2,tag3...カラムを増やす必要が出てきます。
このような構造は柔軟性に欠け、運用や検索が困難になります。

しかしarticle_tagsを作成し、中間テーブルを作成することで
動的に管理することができます。

tag_id article_id created_at
タグテーブルのid 記事テーブルのid 作成日

以下は例として記載した簡易なテーブルデータです。

タグテーブル

tag_id tag_name status
001 JAVA 2025/01/01
002 PYTHON 2025/01/01
003 PHP 2025/01/01

article_tags

tag_id article_id created_at
001 0001 作成日
002 0001 作成日
003 0002 作成日

記事テーブル

id user_id title content
0001 example@example.com JAVAとPYTHON
0002 example@example.com PHP

こうすることでタグ情報が増えても、テーブルに新たに登録するだけで
情報を増やしていくことができます

複合主キー

今回article_tagsでは複合主キーを採用しています。
複合主キーとは、tag_id + article_idを結合し、主キーとして扱います。

サロゲートキーではなく、複合主キーを採用した理由として、
同一記事に同じタグが複数紐づけされることを防ぐといった理由があります。
(※サロゲートキーとは、意味を持たない自動連番のIDのことです)

まとめ

この記事では、ER図の概要から、記事投稿システムのテーブル構造、リレーションの考え方までを紹介しました。
ポートフォリオ作成やチーム開発の土台づくりに、少しでも役立てば嬉しいです。

次回は、このER図をもとにSpring Boot側のEntity定義とAPI設計を進めていく予定です。

参考

前:Spring Boot + Reactで記事投稿アプリを作成予定|機能整理と設計メモ
次:Spring Boot + Reactで記事投稿アプリを作成予定|Entity・三層アーキテクチャ学習ログ

0
0
1

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?