# 🏅 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)|