iT邦幫忙

第 11 屆 iThome 鐵人賽

1
Modern Web

還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB系列 第 30

30日: Express Tutorial 3: Using a Database (with Mongoose) ( 設計圖書館網站的 models )

  • 分享至 

  • xImage
  •  

出處 , 有繁體中文版, 有些部分簡體中文版也翻得很好

Designing the LocalLibrary models

在開始寫 models code 之前, 花些時間思考哪些資料需要被儲存, 以及不同 obj 的關係。

我們知道跟書有關的資料要被存起來 ( 書名、 摘要、 作者、 編號 ... ), 也可能會有多個副本 ( 全域唯一 id 、 目前可取得狀況 ); 或是要儲存更多作者資訊, 因為作者也許不只一人, 亦或是有些作者同名同姓。 我們希望能夠根據書名、 作者、 種類、 目錄來分類

設計 models 時, 為每個 obj ( 相關資訊群 ) 各自設計 models, 這個範例中, 最明顯的 obj 就是書本、 作者

我們也期待可以用 models 做選單, 而不是用寫死的選項, 這樣之後才有修改的靈活度, 最明顯的範例可以舉書的種類: 科學、 科幻、 文學 ... 可能還會再新增

當我們決定 models & fields, 就可以思考它們的關係

下方 UML 流程圖顯示我們定義的 models ( 畫成好幾個盒子 ), 就跟前面提到過的, 建立以下 models: 書籍 ( 書本細節 )、 book instance ( 副本借閱狀態 )、 作者。 還會有一個書本種類的 model, 它的值以動態方式產生。 另一方面, 我們決定不要 BookInstance:status models, 直接把值寫死, 因為我們預期它的值是固定的幾個。 每個盒子都可以看到 model name, field names & types, methods & method return type

這個圖也顯現 models 之間的關係和多重性 (multiplicities), 多重性是每個 model 最大跟最小值的數字。 例如: 連繫 Book & Genre 之間線的兩端有數字顯示, Book model 端的數字(0..*) 表示一個 "Genre" 包含零個或多個 "Book", 而 Genre 端的數字, 表示 "Book" 可以有零種或多種 (蛤?)

Note: 下段我們會討論 Mongoose primer, 定義 documents/models 之間的關係 in one model 通常是較佳的做法, ( 我們還是可以透過另一個 model __id 找到反向關係 )
下方我們已經在 Book schema 中定義下列這些關係: Book/Genre, Book/Author; 還有BookInstance Schema 中的 Book/BookInstance。 這可以任意決定, 我們可能在其他 schema 也已經有這些 field

Note: 下段我們會解釋如何定義即使用 models, 同時可以思考上圖是如何構築每個 models


上一篇
29日: Express Tutorial 3: Using a Database (with Mongoose) ( 概覽 、 簡述資料庫互動 、 有哪些 ODM/ORM )
系列文
還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
阿展展展
iT邦好手 1 級 ‧ 2019-11-07 04:29:35

恭喜完ㄙ.... 阿不對 可惜

明年再接再厲啦啦 /images/emoticon/emoticon37.gif

我要留言

立即登入留言