--- tags: Node.js 直播班 - 2022 春季班 --- # 🏅 Day 38 ## 常見資料庫設計  常見的資料庫設計有上圖幾種情況 其中一對多有分成 1: few 及 1: many,1:few 在多數的部分數量是可預期的,如一本書籍可能會有多個作者,1:many 在多數的部分則可能無法預期上限,如評論 另外在資料庫設計上也需注意是否可能超過 MongoDB document 16mb 的容量限制,(若是可能超過容量限制,則會影響是否將該欄位的資料獨立為一個 collection) 例如以下情況 :::spoiler {state="open"} 貼文按讚設計  以貼文的 likes 欄位為例,若將 likes 欄位的資料獨立為一個 collection,貼文中就不會有 likes 欄位存放使用者的 ID,而是由個別的 likes 資料關聯貼文 ID ::: ### 題目(將答案寫在 HackMD 並提交至回報區) 請依據不同需求情境,回覆以下問題 1. 會不會超過 MongoDB document 16mb 的容量限制 2. 使用上圖哪一種資料庫設計 選項:==一對一==、==一對多 (1: few)== 、==一對多(1:many)==、==多對多== 回覆範例 ``` 情境一 1.是 2.一對多(1:few) 情境二 1.... 2.... 情境三 ... ``` #### 情境一 對動態按讚功能 :::spoiler 示意圖  ::: 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. 請問此情境適用何種資料庫設計 回報流程 --- 請同學依照下圖教學觀看解答、回報答案:  回報格式:請在「回報區」貼上 CodePen 或 HackMD 連結回報答案 (為了統計人數,請同學依序加上「報數」) <!-- 解答 情境一 1.不會 2.一對多(1:few) 情境二 1.不會 2.多對多 情境三 1.會 2.一對多(1: many) --> 回報區 --- | 報數 | 組別 / 名字 | codepen / hackMD / 其他回饋 | | ---- | ----------- | ------------------ | |1| 第 3 組 / Hobby | [HackMD](https://hackmd.io/@hobbyling/day38) | |2| 第 3 組 / hiYifang | [HackMD](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/SJa_42Wu9) | |3|第 14 組|East|[HackMD](https://hackmd.io/HRzdByxLRNSlZinO9bxwhg)| |4|第 4 組|苡安|[HackMD](https://hackmd.io/A-0l9NwOQEaZ3qfae5dekQ)| |5|第 5 組 @ Hazel|[HackMD@Hazel](https://hackmd.io/@hazelwu/day38)| |6|第 11 組 Han Lai|[HackMD](https://hackmd.io/FzZKvqBQSWWEA1FwQi2zvQ?view)| |7|第 16 組 皓皓|[HackMD](https://hackmd.io/@cutecat8110/rJ59LKbic)|
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up