---
# System prepended metadata

title: "\U0001F3C5 Day 37 - 常見資料庫設計"
tags: [Node.js 直播班 - 2024 春季班]

---

# 🏅 Day 37 - 常見資料庫設計

![](https://i.imgur.com/kfxXBxn.png)

常見的資料庫設計有上圖幾種情況
其中一對多有分成 `1: few` 及 `1: many`，`1:few` 在多數的部分數量是可預期的，如一本書籍可能會有多個作者，`1:many` 在多數的部分則可能無法預期上限，如評論

另外在資料庫設計上也需注意是否可能超過 MongoDB document 16mb 的容量限制，（若是可能超過容量限制，則會影響是否將該欄位的資料獨立為一個 collection）

例如以下情況：
:::spoiler {state="open"} 貼文按讚設計
![](https://i.imgur.com/JJ1Nz8J.png)

以貼文的 likes 欄位為例，若將 likes 欄位的資料獨立為一個 collection，貼文中就不會有 likes 欄位存放使用者的 ID，而是由個別的 likes 資料關聯貼文 ID
:::


題目
---
請依據不同需求情境，回覆以下問題
1. 會不會超過 MongoDB document 16mb 的容量限制
2. 使用上圖哪一種資料庫設計
選項：==一對一==、==一對多 (1: few)== 、==一對多(1:many)==、==多對多==


### 情境一 動態按讚功能

:::spoiler 示意圖
![](https://i.imgur.com/CnyN6YG.png)

:::

1. 最終作業為一個社群網站，假設有限制 500 位會員在其中交流，因此在 likes 欄位中最多會有 499 - 500 個 ID，請問會不會超過 MongoDB document 16mb 的容量限制
2. 若是採用方案 B，likes 欄位適用哪一種資料庫設計

### 情境二 互相追蹤功能（following / followers)
1. 假設在社群網站中 500 位會員彼此都互相追蹤，在 [user 資料](https://github.com/gonsakon/express-week4-sample/blob/week8/models/usersModel.js#L29-L46)中， following 與 followers 都各有 499 個 ID，會不會超過 MongoDB document 16mb 的容量限制
2. 請問此情境適用何種資料庫設計


### 情境三 貼文留言功能

```json
posts
{ 
 id: 3,
 userId: "123456",
 content: "test",
 imgUrl: "https:// ....",
 comments: [
  { 
   user: "12345",
   photo: "https:// ....",
   content: "123123123..."
  },
  {
    ...   
  },
  ...
 ]
}
```

1. 以上方貼文資料為例，若在一則貼文中有多個留言，留言數與留言內容量無法預測，是否可能超過 MongoDB document 16mb 的容量限制
2. 請問此情境適用何種資料庫設計

## 回報流程

將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  

情境一
1.不會
2.一對多(1:few)

情境二
1.不會
2.多對多

情境三
1.會
2.一對多(1: many)

-->




回報區
---
<!-- 
將答案貼至下方表格內，格式：
| Discord 暱稱 | [CodePen](連結) |
-->

|    Discord    |   CodePen ／ 答案  |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/H1xRODaXR) |
| william威良 | [CodePen](https://codepen.io/snowman12320/pen/XWwKwpB) |
| wei | [CodePen](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/SJiWc2pmC)|
| Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/GRajggB)|
| zaoannihao | [Codepen](https://codepen.io/ckhwdvrx-the-solid/pen/gOJwwXq?editors=0010) |
| runweiting | [Codepen](https://codepen.io/weiting14/pen/MWdJYBY) |
| jenny7532 | [Codepen](https://codepen.io/wei-chen-wu/pen/qBGrBMe) |
| mei | [CodePen](https://codepen.io/l_umei/pen/xxNqXap) |
| Fabio20 | [CodePen](https://codepen.io/fabio7621/pen/VwOpEMX) |
|Lobinda|[HackMD](https://hackmd.io/@Lobinda/SyrDG5aEC)|
| Hank | [CodePen](https://codepen.io/tw1720/pen/JjqjJgo)|

