ECサイト　ER図

# はじまりました
今日からはじまりました！チーム開発＆ECサイト開発！
早速ER図を始めて作成したものの、難しいです...
考えるだけでは入ってこなそうなので、アウトプットしていきます！
アウトプットなので、要件定義は省略しております🙇

答えになっちゃうので念の為隠しておきます↓
<details><summary>全体ER図</summary>

![スクリーンショット 2024-05-13 20.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/131a64a1-5204-8aad-5a80-4de9f0966d2d.png)

</details>

各テーブル詳しくみていきます👁️👁️

# 管理者テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 20.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/837d797a-fb96-326a-2843-edc3073644e2.png)

</details>

管理者のデータを格納するためのテーブル
ログイン時に使用するため

・メールアドレス
・パスワード

カラム名が必要！

:::note warn
今回の実装要件では
管理者は一人の予定のため
他テーブルとのリレーション（関連付け）はなし
:::

# 会員テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 20.20.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/2f9e396d-8d1f-c657-a042-159fecad955c.png)

</details>

顧客の会員データ格納のためのテーブル
ログイン時に使用するため同じく

・メールアドレス
・パスワード

カラム名が必要！

また、氏名が姓と名に別れているのは検索機能を実装した場合に対応できるため

:::note info
会員ステータスは
有効・退会済みを判別するために必要！
:::

# 配達先テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 20.39.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/a6be23d8-2c04-a981-b2a8-4f7e9a25e1c0.png)

</details>

注文時の配送先情報を格納するためのテーブル
会員自身の住所等を使用せず、プレゼントとして注文するときなどに使用

# 商品テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 20.42.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/80ed2b25-f2e0-5121-1870-d4ae80186542.png)

</details>

※価格が税抜の理由
消費税率が変わったときに効率的に修正が可能なため

:::note info
販売ステータスは
販売中・販売停止中を判別するために必要！
:::

・ジャンル
商品一つ一つのジャンル登録をすると修正の効率が悪くなるため
「ジャンル」というマスタテーブルを作成し、ジャンルidで管理

# ジャンルテーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 20.58.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/29b9b3c2-506e-2754-da5d-612bb5c07d09.png)

</details>

商品分類ためのジャンルを表すテーブル

:::note warn
🌱商品:ジャンル は N:1 の関係になる

例
チョコケーキ:ケーキ
いちごケーキ:ケーキ
　　 N 　　　:　1
:::

# カート内商品テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 21.07.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/ef7f99fc-30ce-2a67-6584-5179ddf86e02.png)

</details>

会員がカートに入れた商品データを、
一時的に格納するためのテーブル

※数量は同じ商品データが複数になることを防ぐためにカラムとして必要
いちごケーキ
いちごケーキ　　→ いちごケーキ3個
いちごケーキ

:::note warn
🌱会員:カート内商品 は 1:N の関係になる

例
会員A:いちごケーキ
会員A:チョコケーキ
　1　:　N

🌱商品:カート内商品 は 1:N の関係になる

例
いちごケーキ:カートA
いちごケーキ:カートB
　　 1 　　　:　N
:::

# 注文テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 21.26.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/ba499a81-0b44-ec6a-9a2b-92446e0217c1.png)

</details>

顧客が商品を注文した際に、"注文"情報を格納するテーブル

:::note info
注文ステータスは
入金待ち・入金確認・製作中・発送準備中・発送済みを判別するために必要！
:::

:::note warn
配送先idを使用し情報取得を（リレーション）しない
→紐付けた配送先情報を書き換えられ、過去の注文履歴の配送先が変わってしまうことを防ぐため

🌱会員:注文 は 1:N の関係になる

例
会員A:5/10注文
会員A:5/15注文
　1　:　N
:::

# 注文詳細テーブル
<details><summary>ER図</summary>

![スクリーンショット 2024-05-13 21.30.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/554800d2-2bc3-96af-e061-5408097f9bc3.png)

</details>

顧客が商品を注文した際に、"商品"情報を格納するテーブル

※購入時価格がある理由
セールや値下げで商品の値段が変わっても、
注文履歴の商品単価が変わらないようにするため！

:::note info
製作ステータスは
着手不可・製作待ち・制作中・製作完了を判別するために必要！
:::

:::note warn
🌱商品:注文詳細 は 1:N の関係になる

例
チョコケーキ:5/10注文のチョコケーキ 2個
チョコケーキ:5/15注文のチョコケーキ 1個
　1　:　N

 🌱注文:注文詳細 は 1:N の関係になる
 5/10注文:チョコケーキ 2個
 5/10注文:いちごケーキ 1個
 　1　　 :　N
:::

<details><summary>注文テーブルと注文詳細テーブルを分ける理由</summary>

:::note alert
1度の注文に複数の商品を購入した場合、
注文詳細情報以外の情報が重複するため効率が悪い...
:::

#### ・注文詳細テーブルがない場合
<table>
  <caption>注文テーブル</caption>
  <thead>
    <tr>
      <th>注文id</th>
      <th>会員id</th>
      <th>配達先</th>
      <th>支払方法</th>
      <th>商品id</th>
      <th>数量</th>
      <th>価格</th>
      <th>送料</th>
      <th>請求金額</th>
      <th>製作ステータス</th>
      <th>注文ステータス</th>
    </tr>
  </thead>
  <tr>
    <td>1</td> 
    <td>3</td>
    <td>2</td>
    <td>クレジット</td>
    <td>100(商品A)</td>
    <td>2</td>
    <td>600</td>
    <td>800</td>
    <td>2000</td>
    <td>制作待ち</td>
    <td>入金確認</td>
  </tr>
  <tr>
    <td>1</td>
    <td>3</td>
    <td>2</td>
    <td>クレジット</td>
    <td>200(商品B)</td>
    <td>1</td>
    <td>800</td>
    <td>800</td>
    <td>2000</td>
    <td>制作待ち</td>
    <td>入金確認</td>
  </tr>
</table>

#### ・注文テーブルと注文詳細テーブルを分けた場合
<table>
  <caption>注文テーブル</caption>
  <thead>
    <tr>
      <th>注文id</th>
      <th>会員id</th>
      <th>商品id</th>
      <th>支払方法</th>
      <th>送料</th>
      <th>請求金額</th>
      <th>注文ステータス</th>
    </tr>
  </thead>
  <tr>
    <td>1</td> 
    <td>3</td>
    <td>100</td>
    <td>クレジット</td>
    <td>800</td>
    <td>2000</td>
    <td>入金確認</td>
  </tr>
</table>

<table>
  <caption>注文詳細テーブル</caption>
  <thead>
    <tr>
      <th>注文詳細id</th>
      <th>注文id</th>
      <th>商品id</th>
      <th>数量</th>
      <th>価格</th>
      <th>製作ステータス</th>
    </tr>
  </thead>
  <tr>
    <td>1</td> 
    <td>1</td>
    <td>100</td>
    <td>2</td>
    <td>600</td>
    <td>制作待ち</td>
  </tr>
    <tr>
    <td>2</td> 
    <td>1</td>
    <td>200</td>
    <td>1</td>
    <td>800</td>
    <td>制作待ち</td>
  </tr>
</table>

</details>

# 参照
参考にさせてもらいました。
ありがとうございます。

https://zenn.dev/ganmo3/articles/f048886ba2009e

https://zenn.dev/goldsaya/articles/272826e55c9809

#
商品カラムに画像はいらないのか...?
と思ったのですが、どうやら今後「画像設計」フェーズがある模様！
要件定義書に記載あるのに読めていなかったです💦