哈囉大家好!我是 2魚,今天是鐵人賽的第七天啦!經過前幾天的努力,我們已經有了網站的基本設計,現在是時候來處理網站的「大腦」了 —— 也就是資料庫!今天,我們要一起探索資料庫的世界,特別是 MongoDB 這個強大的 NoSQL 資料庫。不管你是資料庫新手還是老手,相信今天的內容都能讓你有新的收穫。準備好要當資料管理大師了嗎?Let’s dive in!
房東不給養鸚鵡 - 那就用 Nuxt + Express + MongoDB 30 天寫一個全端鸚鵡專案。
挑戰人生第一次鐵人賽,就來個佛心分享 side project,從專案發想、規劃、設計、資料庫、開發到部署,技術使用 Nuxt 3、Tailwind CSS、Pinia、Axios、Express、MongoDB,製作一個前後端分離的鸚鵡專案,功能主要介紹食物計算機和聯絡我們,希望可以讓更多人瞭解專案的完整流程 ✨
IT 全文章連結關聯式資料庫 vs NoSQL 資料庫
關聯式資料庫(如 MySQL, PostgreSQL):
想像一下一個巨大的 Excel 表格集合,每個表格都有固定的列和行。
特點:
- 結構化數據:資料必須符合預定義的結構
- 使用 SQL 語言查詢
- 強大的關聯能力:可以輕鬆地在不同表格間建立關聯
- ACID 特性:確保交易的可靠性
NoSQL 資料庫(如 MongoDB):
想像一本可以自由發揮的筆記本,每頁都可以有不同的格式。
特點:
- 靈活的資料結構:可以存儲非結構化數據
- 使用特定的查詢語言或 API
- 高度可擴展:適合處理大量數據和高流量
- 快速開發:不需要預先定義結構
MongoDB 簡介
MongoDB 是一種 NoSQL 資料庫,與傳統的關聯式資料庫有很大不同。
特點對比:
- 資料結構:
- 關聯式:固定的表格結構
- MongoDB:靈活的文檔結構,可以輕鬆添加新欄位
- 查詢語言:
- 關聯式:SQL
- MongoDB:類 JSON 的查詢語言
- 關聯處理:
- 關聯式:強大的表間關聯(JOIN 操作)
- MongoDB:通過嵌入文檔或引用實現關聯
- 擴展性:
- 關聯式:垂直擴展(增加單機硬體資源)
- MongoDB:水平擴展(增加更多機器)
- 適用場景:
- 關聯式:需要複雜事務和強一致性的應用(如銀行系統)
- MongoDB:需要處理大量非結構化數據的應用(如社交媒體、內容管理系統)
MongoDB 常用的資料類型:
- String:適合存放文字
- Number:用於數字資料
- Date:記錄日期和時間
- Boolean:用於是/否的選項
- Array:存放多個相關項目的列表
- Object:用於複雜的資料結構
設計資料表
在 MongoDB 中,我們不使用傳統的表格,而是使用”集合”(Collection)和”文檔”(Document)。讓我們以「聯繫我們」頁面為例,設計一個 Feedback 集合:
KEY | 英文欄位名稱 | 中文欄位名稱 | 型態 | 必填 | 預設值 | 備註 |
---|---|---|---|---|---|---|
PK | _id | ID | ObjectID | v | ||
FK | memberId | 會員 ID | ObjectID | |||
contactPerson | 名稱 | String | v | |||
phone | 電話 | String | ||||
信箱 | String | v | ||||
content | 內容 | String | v | |||
source | 從哪裡得知本網站 | Number | 1:網路搜尋 2:社群媒體 3:親友介紹 4:其他 | |||
createTime | 創建時間 | Date | now |
資料集合各欄位詳細說明:
- KEY:表示欄位是否為主鍵(PK)或外鍵(FK)。這就像是資料的身份證或連結橋樑。
- 英文欄位名稱:欄位的英文名稱,用於程式碼中。選擇有意義的名稱很重要,例如 ‘contactPerson’ 比 ‘cp’ 更容易理解。
- 中文欄位名稱:欄位的中文名稱或描述,幫助非技術人員理解欄位用途。
- 型態:資料的類型,如 String、Number 等。選擇合適的型態可以提高資料的準確性和查詢效率。
- 必填:標示欄位是否必須填寫,通常用 “v” 表示必填。這確保了重要資訊不會被遺漏。
- 預設值:若未填寫時的預設內容。例如,’createTime’ 的預設值 ‘now’ 確保每條記錄都有創建時間。
- 備註:額外的說明或注釋,如可選的固定選項或其他重要資訊。這對於維護和理解資料結構很有幫助。
這種結構幫助快速了解每個欄位的基本屬性和用途,對於資料庫設計和開發都很有幫助。
💡 PK(主鍵)和 FK(外鍵)在 MongoDB 中的應用:
- PK(主鍵):
- 在 MongoDB 中,每個文檔都有一個自動生成的 “_id” 欄位作為主鍵。
- 不同於關聯式資料庫需要手動設置主鍵,MongoDB 自動處理這一步。
- FK(外鍵):
- MongoDB 沒有嚴格意義上的外鍵約束。
- 可以通過文檔嵌套或引用其他文檔的 _id 來建立關聯。
- 例如,在 Feedback 集合中,我們可以包含一個 memberId 欄位來引用會員集合中的文檔。
實踐練習:設計鸚鵡食堂的食物資料集合
根據我們學到的 MongoDB 資料結構和範例,可以試著設計一個簡單的”鸚鵡食物”(ParrotFood)集合。考慮以下幾點:
- 食物的基本資訊應該包含哪些欄位?
- 如何表示食物的營養成分?
結語
哇,今天我們真的學了超多東西呢!從關聯式資料庫和 NoSQL 的比較,到 MongoDB 的特性,再到實際的資料表設計,我們可說是來了一趟資料庫的小旅行。
回顧一下,我們了解了為什麼選擇 MongoDB 作為我們的資料庫,學會了如何設計基本的資料結構,還動手設計了「鸚鵡食堂」的第一個資料集合。這些知識不只適用於這個專案,在未來的開發工作中也一定會派上用場!
雖然資料庫設計看起來有點抽象,但它就像是在為我們的網站打地基。有了好的資料結構,我們後續的開發工作就能事半功倍了!
明天,我們將開始實際操作 MongoDB,把今天學到的概念真正應用到專案中。我已經迫不及待要開始實作了,你們呢?
如果你對今天的內容有任何疑問,或是想分享你的資料庫設計經驗,歡迎在下方留言喔!讓我們一起學習、一起成長。明天見啦,掰掰~
希望這篇文章有幫助到你,謝謝你的觀看,若有想看的系列也歡迎告訴我 😉