--- tags: Node.js 直播班 - 2023 春季班 --- # 🏅 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)==、==多對多== 回覆範例 ``` 情境一 1.是 2.一對多(1:few) 情境二 1.... 2.... 情境三 ... ``` ### 情境一 對動態按讚功能 :::spoiler 示意圖 ![](https://i.imgur.com/CnyN6YG.png) ::: 1. 由於最終作業為一個社群網站,以 NFT 設計,有限制 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. 請問此情境適用何種資料庫設計 ## 回報流程 將答案連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看) ![](https://i.imgur.com/vftL5i0.png) <!-- 解答: 情境一 1.不會 2.一對多(1:few) 情境二 1.不會 2.多對多 情境三 1.會 2.一對多(1: many) --> 回報區 --- | 報數 | 組別/Discord 名字 | Codepen/HackMD/其他回饋 | |:----:|:-----------------------:|:-------------------------------------------------------------------------:| | 1 | 中 4 組 / jimkk159 | [HackMD - Day 37](https://hackmd.io/BqkAorxJReeG1RlZR5wQmw) |