iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0

哈囉大家好!我是 2魚,今天是鐵人賽的第七天啦!經過前幾天的努力,我們已經有了網站的基本設計,現在是時候來處理網站的「大腦」了 —— 也就是資料庫!今天,我們要一起探索資料庫的世界,特別是 MongoDB 這個強大的 NoSQL 資料庫。不管你是資料庫新手還是老手,相信今天的內容都能讓你有新的收穫。準備好要當資料管理大師了嗎?Let's dive in!

關聯式資料庫 vs NoSQL 資料庫

關聯式資料庫(如 MySQL, PostgreSQL):

想像一下一個巨大的 Excel 表格集合,每個表格都有固定的列和行。

特點:

  • 結構化數據:資料必須符合預定義的結構
  • 使用 SQL 語言查詢
  • 強大的關聯能力:可以輕鬆地在不同表格間建立關聯
  • ACID 特性:確保交易的可靠性

NoSQL 資料庫(如 MongoDB):

想像一本可以自由發揮的筆記本,每頁都可以有不同的格式。

特點:

  • 靈活的資料結構:可以存儲非結構化數據
  • 使用特定的查詢語言或 API
  • 高度可擴展:適合處理大量數據和高流量
  • 快速開發:不需要預先定義結構

MongoDB 簡介

MongoDB 是一種 NoSQL 資料庫,與傳統的關聯式資料庫有很大不同。

特點對比:

  1. 資料結構:
    • 關聯式:固定的表格結構
    • MongoDB:靈活的文檔結構,可以輕鬆添加新欄位
  2. 查詢語言:
    • 關聯式:SQL
    • MongoDB:類 JSON 的查詢語言
  3. 關聯處理:
    • 關聯式:強大的表間關聯(JOIN 操作)
    • MongoDB:通過嵌入文檔或引用實現關聯
  4. 擴展性:
    • 關聯式:垂直擴展(增加單機硬體資源)
    • MongoDB:水平擴展(增加更多機器)
  5. 適用場景:
    • 關聯式:需要複雜事務和強一致性的應用(如銀行系統)
    • MongoDB:需要處理大量非結構化數據的應用(如社交媒體、內容管理系統)

MongoDB 常用的資料類型:

  • String:適合存放文字
  • Number:用於數字資料
  • Date:記錄日期和時間
  • Boolean:用於是/否的選項
  • Array:存放多個相關項目的列表
  • Object:用於複雜的資料結構

設計資料表

在 MongoDB 中,我們不使用傳統的表格,而是使用"集合"(Collection)和"文檔"(Document)。讓我們以「聯繫我們」頁面為例,設計一個 Feedback 集合:
https://ithelp.ithome.com.tw/upload/images/20240916/20159686HREbjQRhXI.png

KEY 英文欄位名稱 中文欄位名稱 型態 必填 預設值 備註
PK _id ID ObjectID v
FK memberId 會員 ID ObjectID
contactPerson 名稱 String v
phone 電話 String
email 信箱 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 中的應用:

  1. PK(主鍵):
    • 在 MongoDB 中,每個文檔都有一個自動生成的 "_id" 欄位作為主鍵。
    • 不同於關聯式資料庫需要手動設置主鍵,MongoDB 自動處理這一步。
  2. FK(外鍵):
    • MongoDB 沒有嚴格意義上的外鍵約束。
    • 可以通過文檔嵌套或引用其他文檔的 _id 來建立關聯。
    • 例如,在 Feedback 集合中,我們可以包含一個 memberId 欄位來引用會員集合中的文檔。

實踐練習:設計鸚鵡食堂的食物資料集合

根據我們學到的 MongoDB 資料結構和範例,可以試著設計一個簡單的"鸚鵡食物"(ParrotFood)集合。考慮以下幾點:

  1. 食物的基本資訊應該包含哪些欄位?
  2. 如何表示食物的營養成分?

結語

哇,今天我們真的學了超多東西呢!從關聯式資料庫和 NoSQL 的比較,到 MongoDB 的特性,再到實際的資料表設計,我們可說是來了一趟資料庫的小旅行。
回顧一下,我們了解了為什麼選擇 MongoDB 作為我們的資料庫,學會了如何設計基本的資料結構,還動手設計了「鸚鵡食堂」的第一個資料集合。這些知識不只適用於這個專案,在未來的開發工作中也一定會派上用場!
雖然資料庫設計看起來有點抽象,但它就像是在為我們的網站打地基。有了好的資料結構,我們後續的開發工作就能事半功倍了!
明天,我們將開始實際操作 MongoDB,把今天學到的概念真正應用到專案中。我已經迫不及待要開始實作了,你們呢?
如果你對今天的內容有任何疑問,或是想分享你的資料庫設計經驗,歡迎在下方留言喔!讓我們一起學習、一起成長。明天見啦,掰掰~

(對了,如果你覺得今天的內容對你有幫助,別忘了給個讚支持一下喔!這會是我繼續努力的動力呢~)


上一篇
[ DAY6 ] 從黑白到繽紛:Figma 的網站調色與 Mockup 實驗室
下一篇
[ DAY8 ] 資料庫新手的雲端之旅:Atlas 部署與 Compass 探索
系列文
房東不給養鸚鵡 - 那就用 Nuxt + Express + MongoDB 30 天寫一個全端鸚鵡專案18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言