# 🏅 Day 36 - 資料庫設計 embedded 嵌入/ references 引用 常見的資料庫設計有:**embedded 嵌入** 及 **references 引用** 實作上也會依不同需求情境來選擇要使用哪種資料庫設計 **embedded 嵌入**: 將相關資訊寫在同一個資料表中 - 需要快速查詢相關資訊時 - 會產生重複的資料 **references 引用**: 將相關資訊寫在不同的資料表中,再將他們建立連結 像是 Day18 練習的 Mongoose populate 語法,就是使用到 references 引用的設計。 因貼文資料會加入 user 欄位把使用者資料加入,不過因使用者的資料在眾多貼文中可能會重複,並且是可能會被修改的,若將資料寫死在貼文資料中,修改上會很麻煩,因此可以將使用者資料另外放一個 Model,在貼文的資料中使用 ref,取得貼文時再使用 populate 關聯使用者資料,確保取得貼文時帶入的是最新的使用者資料 - 需要頻繁更改資料時 - 不同資料需要經常分別查詢時 - 資料不會重複 ### 參考資源 - [Embedded Data Versus References](https://www.mongodb.com/docs/manual/data-modeling/concepts/embedding-vs-references/) 題目 --- 請依據以下描述的情境選擇比較合適的方案:==**方案 A embedded 嵌入**== 或 ==**方案 B references 引用**== > [題目來源](https://whimsical.com/3CkqgyD3n3GvsCrdkywruw)  1. 製作訂房系統,但希望可以做註冊登入功能,另外儲存使用者資料,訂單資料同時也會需要紀錄使用者的資料 2. 以留言板的模式製作一個較陽春的訂房系統,預約一個房型就如同新增一個留言,為了節省開發成本,不會新增其他資料,也不需註冊會員  3. 該火車時刻表每天會被查詢近千萬次,班次資料幾乎都是固定的,變更頻率低(很常被讀取,較少被寫入)  4. 使用者可以時常新增貼文(無法預測貼文數量),系統也允許修改個人資料。 例如:修改個人大頭貼後,所有該使用者發布的貼文的個人大頭貼都會同步更換 使用者也很常觀看其他人的貼文,貼文中也會顯示個人資訊  5. 依設計稿「3-2.全體動態牆-有留言」此頁設計 貼文的數量不可預測,按讚資訊不會顯示出按讚者的資訊,同時使用者資料可能隨時變更 ## 回報流程 將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看)  <!-- 解答: 1. B 2. A 3. A 4. B 5. B --> 回報區 --- <!-- 將答案貼至下方表格內,格式: | Discord 暱稱 | [CodePen](連結) | --> | Discord | CodePen / 答案 | |:-------------:|:-----------------:| | xxx | [CodePen]() | | 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/Hk658GhmC) | | wei | [hackmd](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/SkXAJK27A)| | Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/Povzemg) | | william威良 | [CodePen](https://codepen.io/snowman12320/pen/pombmJw) | | zaoannihao |[Codepen](https://codepen.io/ckhwdvrx-the-solid/pen/vYwyGYv)| | runweiting |[Codepen](https://codepen.io/weiting14/pen/VwOmMYG)| | jenny7532 |[Codepen](https://codepen.io/wei-chen-wu/pen/ZENeErR)| | mei |[CodePen](https://codepen.io/l_umei/pen/abrJodW)| | Fabio20 | [CodePen](https://codepen.io/fabio7621/pen/eYavKBZ) | |Lobinda|[HackMD](https://hackmd.io/@Lobinda/SkRojKaVC)| | Hank | [CodePen](https://codepen.io/tw1720/pen/rNgNwEb) |
×
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