📘 Vol.3 詳細設計編：ER図で見るデータ構造と実装の土台

前回（Vol.2）では画面駆動設計に基づくUI設計と処理設計を行いました。  
今回は、それらを支える **データベース構造（ER図）** にフォーカスし、実装前に必要な「詳細設計」の説明を行います。

---

## 🔗 ER図（Entity Relationship Diagram）

🔗 [ER図（PDF）はこちら](https://github.com/juehara-crypto/Portfolio_Bulletinboard/blob/master/02.%E8%A9%B3%E7%B4%B0%E8%A8%AD%E8%A8%88%E6%9B%B8/ER%E5%9B%B3_20240617%20(1).pdf)



ER図は以下の基本設計をもとに、**システム全体のデータ構造**を視覚化したものです。

---

## 🧱 テーブル構成の概要

| テーブル名         | 概要                                     |
|------------------|----------------------------------------|
| `users`          | ユーザー情報（ログインID、名前、権限など）         |
| `bulletin_boards`| 掲示板情報（掲示板名、作成者など）                |
| `threads`        | スレッド情報（タイトル、紐づく掲示板など）          |
| `posts`          | 投稿情報（本文、投稿者、投稿日時など）             |

---

## 🧩 リレーション（関連）

- **users → posts**  
  1人のユーザーが複数の投稿を持つ（一対多）

- **bulletin_boards → threads**  
  1つの掲示板に複数のスレッドが属する（一対多）

- **threads → posts**  
  1つのスレッドに複数の投稿が属する（一対多）

---

## 🧠 実装との関係性

ER図をもとに、今後以下の開発工程に繋がります：

- DAOの作成（各テーブルに対するDBアクセスクラス）  
- JavaのEntityクラス設計  
- 入力バリデーションの対象フィールドの整理  
- 外部キー制約・削除制御（Cascadeなど）の反映  
- 表示順や検索条件のSQL設計（ORDER BY、JOIN）

---

## 💬 補足事項・設計判断の意図

- スレッド・投稿には「論理削除」対応（削除フラグ）を想定  
- `created_at` / `updated_at` は全テーブルに付与（監査対応）  
- IDは基本的に自動採番（DBシーケンス or AUTO_INCREMENT）

---

## ▶️ 次回予告：Vol.4へ続く

次回は、いよいよこのER図・詳細設計をもとに、[Struts2フレームワークを用いた実装フェーズに入ります！](https://qiita.com/juehara-crypto/items/e37fa1879ae996bee73e)に入ります！  
EntityクラスやDAO、アクションとのつながりを具体的に見ていきましょう！


---

## 🧭 Vol.1〜7 関連リンク

| 回 | タイトル | 主な内容 |
|----|----------|-----------|
| Vol.1 | [プログラミングとの再会 – 「画面ありき」で変わった学び方](https://qiita.com/juehara-crypto/items/2fcc53d765dcc25a4fa3) | プログラミング再入門と、**画面駆動の学習法**というユニークなアプローチの紹介。最初に「画面」から考えることでモチベーションを継続。 |
| Vol.2 | [画面駆動設計に基づく設計書の具体例：画面フローからUI設計・処理定義まで](https://qiita.com/juehara-crypto/items/c1fd34b3031b13160f27) | 実際に描いた**画面遷移図・UI設計・処理定義書**を公開し、画面中心の設計手法を解説。 |
| Vol.4 | [Struts2とMavenの基礎と設定ファイルの役割](https://qiita.com/juehara-crypto/items/e37fa1879ae996bee73e) | Struts2の構成とMavenでの管理、`web.xml` や `pom.xml` の役割を丁寧に解説。 |
| Vol.5 | [環境構築編：掲示板アプリケーションの実行準備](https://qiita.com/juehara-crypto/items/7010ae45d35174d3a3a6) | TomcatとEclipseでの動作環境構築。 |
| Vol.6 | [BaseActionクラスの詳細解説【Struts2の要】](https://qiita.com/juehara-crypto/items/a5f244a5f58597f33d06) | すべてのアクションに共通する基底クラス **BaseAction** を定義し、ログ出力や共通処理を集約。 |
| Vol.6.1 | [BaseAction の活用例【共通基底クラスでセッション管理を簡素化】](https://qiita.com/juehara-crypto/items/f4efded5b26e39e49928) | BaseAction を継承する具体的なアクション例を紹介し、セッションやログ処理の統合例を実践。 |
| Vol.7 | [Struts2 における MVC モデルの全体像](https://qiita.com/juehara-crypto/items/761c0b13ed1a5f896bba) | Model-View-Controller の各要素が Struts2 でどう分担されるかを体系的に解説。 |
| Vol.7.1 | [Struts2 における Model（モデル）について](https://qiita.com/juehara-crypto/items/14f7f154caf29447ae93) | JavaBeansベースのModelクラス（User, Thread, Post など）設計とその役割を明確化。 |
| Vol.7.2 | [Struts2 における Controller（コントローラ）の責務](https://qiita.com/juehara-crypto/items/06b4f9296a296db8f4ba) | Actionクラスを軸に、入力処理・分岐処理・画面遷移の中核を担うControllerの実装指針を提示。 |
| Vol.7.3 | [Struts2 における struts.xml の書き方と役割](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61) | URLマッピング、結果遷移、アクション定義の方法を丁寧に記述。初心者の詰まりやすいポイントを回避。 |
| Vol.7.4 | [struts.xmlの高度な設定と実践活用（Struts2）](https://qiita.com/juehara-crypto/items/bf03adbd840c8f4e2044) | namespaceの活用や画面単位での分離設計、開発時の保守性向上テクニックを紹介。 |

---