資料庫是什麼?認識資料庫管理系統

資料庫是存放資料的容器。但究竟什麼是「資料」?本文帶大家從最基礎的概念「資料」談起,再來則認識資料庫的歷史與類型,資料庫管理系統的功能。

什麼是資料?

資料 (data) 是一個抽象的概念名詞,在生活中,任何事實 或數值都可以是資料。例如:你的名字、你的生日、一首歌、一張照片或車牌號碼等。

但若在電腦科學領域談到資料,會是指電腦怎麼表現資料,那就是 0 和 1。電腦用 0 和 1 這樣的數位形式來處理資料,所以資料要轉換成 0 和 1,電腦才能夠處理。

什麼是資料庫?

而資料庫  (database) ,則是為了解決組織、存取、刪除、編輯大量資料的問題。它提供完整結構,幫我們更有效滿足需求。

例如在日常生活中,我們會利用電腦、數位形式長久地保存資料,像是儲存 MS Word .doc 或純文字在檔案中。但當資料量比較大時,隨機、無秩序地儲存資料,會造成花很多時間、甚至找不到資料的困擾。

又或想進一步管理、查詢與操作資料;或是想多人、多個應用程式去使用資料時,也會因為檔案缺乏結構與管理工具,執行過程中會遇到更多的不便。

什麼是資料庫管理系統?

資料庫可能是實際的資料集合體,或是指「資料庫管理系統」。但現在大部分的人提到「資料庫」這個詞彙時,通常指的其實是資料庫管理系統。

若是指資料實際儲存的地方,早期年代是以傳統磁帶 (magnetic tape) 儲存資料;而現在則使用快取硬碟與高速記憶體的組合,能快速處理大量資料。

而想要有效率地使用與管理資料,能方便、有效使用資料庫的軟體,也就是資料庫管理系統 (database management system,簡稱 DBMS)。它能幫我們、或要使用資料庫的應用程式,與資料庫做溝通。

資料庫管理系統的功能

前面提到,資料庫管理系統就是一個使用者與資料庫之間的溝通媒介,它有幾個主要功能:管理資料、管理權限、控制效能與備份資料。

管理資料,是指能提供一個介面,幫助使用者組織、存取、刪除、編輯資料。管理權限,則可區分不同使用權限等級的使用者,以管理資料的瀏覽對象、確保資料安全。控制效能,能透過參數設定,幫助使用者調整資料庫到最佳的運最狀態和效能。備份資料,能設定自動化機制,能轉移會備份資料到不同儲存位置,提高資料的安全。

8 週帶你專修後端,熟悉資料庫設計應用,成為與業界接軌的工程師

資料庫管理系統的演變與類型

資料庫管理系統主要有以下幾種,往下會說明資料庫管理系統發展的幾個階段:

  • Hierarchical Database
  • Network Database
  • Relational Database
  • NoSQL

Hierarchical 與 Network 資料庫

最早期的設計模型是在 1960 年代 IBM 公司設計的 hierarchical (階層式) 與 network (網狀式) 資料庫。

在 hierarchical 模型裡,資料是以「樹狀」的結構去整理,因此資料呈現出清楚的「層級」。從第一筆名為「根 (root)」的資料開始,每一筆資料都有它的「子 (child)」資料。

Hierarchical 模型的設計其實跟人類的組織架構很像,像是家庭、公司、政府部門,都有差不多的組織架構。

在 hierarchical 資料庫裡,每筆資料只有一個屬性。如果你想要得到某筆資料,就要遍歷 (traverse) 整棵樹或整個架構。由於這個過程很費時、也沒有彈性,所以有人提出另一個方案:network 模型。

在 network 模型裡,每筆資料能有多個 parent 或 child 資料,可以表現更複雜的資料關聯。例如,同一個產品可以同時被不同的客戶購買,而一個客戶,也可以購買多個產品。

Relational Database 關聯式資料庫

1970 年代初,在 IBM 研究實驗室工作的埃德加·科德 (Edgar F. Codd) 出版了一份名為「A Relational Model of Data for Large Shared Data Banks」的研究。這份研究是關聯式資料庫發展的起點,定義了關聯式資料 (Relational Database) 的概念、與資料組成表格的應用原則。

關聯式資料庫有三個特質:

1)資料是以一個或是多個資料表 (table) 的方式存放

在關聯式資料庫裡,每一筆資料都是在 table 中的一個 record,record 組成不同的 table 集合,就成為一個關聯式資料庫。

所以,使用關聯式資料庫的網站,背後都有多個 table,負責紀錄不同的資料。例如在電商網站中,應該會有賣家、商品、分類、使用者和交易紀錄等資料表。而這些資料表之間,也會有各自的不同關聯。

2)資料之間有明確的關聯一般來說,關聯式資料庫會用來儲存結構化的資料,而資料之間,也大多會有清楚的關聯。通常,這兩種資料會以兩個資料表來存放。

例如,在常見的待辦清單 To-do List 中,你會看到 user 和 Todo 這兩種資料表。而在兩個資料表之間,我們也會設定「 user 擁有 todo」這個關聯。

3)關聯式資料庫以 SQL 語言操作。

SQL (Structured Query Language 結構化查詢語言) 是專門用來管理與查詢關聯式資料庫的程式語言。透過 SQL,我們能在關聯式資料庫裡新增、查詢、更新和刪除資料;同時,也能建立和修改資料庫的模式。

關聯式資料庫使用簡單,穩定度高;而 SQL 功能強大,也積累了很多企業開放支援 SQL 的軟體與大量的成功案例,所以目前關聯式資料庫是最多軟體開發者使用的資料庫系統。在 Stackoverflow 2018 年的調查結果,關聯式資料庫系統是最多開發者使用的資料庫管理系統,佔前五名中的首四名!

NoSQL 非關聯式資料庫

NoSQL 非關聯式資料庫,是隨著電腦、行動裝置、與互聯網普及而興起的另一種資料庫形式。它從過去「能夠無錯誤地同步處理結構清楚的資料」,到現在「能更高速且大量地處理資料,但不需要即時同步或絕對地零錯誤」。

在縣在網路應用程式流量大幅地增長、使用者生產內容 (user generated content)」主流、社群媒體興盛的現代,使用者渴望的是與資料進行更多互動與創造。例如留言、標籤 (tags)。

NoSQL 資料庫呼應了這個改變。NoSQL 的意思是 “Not Only SQL”,也就是不限定為「關聯式資料庫」的資料庫管理系統的統稱。

在操作上,NoSQL 並不支持 SQL 語法 與 SQL 的邏輯。所以,NoSQL 資料庫通常不使用關聯模型,也不需要固定的結構 (也就是 schema-free)。但有需要時,NoSQL 也可以使用關聯模型與 schema。

NoSQL 將聚集後的資料,作為儲存的最小單位。透過縝密豐富的資料結構,有利於將資料分散到多個節點。比起資料的關聯,NoSQL 更關注資料所代表的人(例如使用者)與物(例如一篇分享在社交平台上的文章)的「狀態」變動,例如文章被分享、按讚等。

此外,NoSQL 還有一個特點是,不講求資料同步,只求最後結果一致。例如我們要來處理一篇在 Facebook 上的 po 文有多少人按讚時,其實這個訊息的準確性就不是非常重要。當一篇文章獲得第 100 個按讚時,某些使用者可能會馬上看到新的數字,但部分使用者可能要隔數十秒後才看到按讚數從 99 轉到 100。這種延誤,並不會造成什麼嚴重的問題。而對 Facebook 來說,更重要的是能在一定的成本之下,去處理大量的數據。

常見的資料庫管理系統

1. MySQL MySQL 是一種關聯式資料庫管理系統。由於其高效能、穩定性、輕量級以及開源的特性,常被用於網站的資料庫系統,且在開發中的快速原型設計也十分常用。它支援多種平台並提供多種編程語言的API,例如 PHP、Perl、C、C++ 等。

2. PostgreSQL PostgreSQL 是一種具有強大擴展性和標準遵循度的開源物件關聯資料庫系統。它能夠處理從小型單機應用到大型互聯網或數據倉儲應用的工作負載。與 MySQL 不同,PostgreSQL 支援複雜的查詢和儲存過程。

3. MongoDB MongoDB 是一種高效能、開源、無模式的文檔導向資料庫,被稱為是 NoSQL 系列資料庫中的一個重要成員。它能夠支援多種資料結構,並且易於擴展,適合應對大數據存儲和雲計算。

如何選擇合適的資料庫管理系統

選擇資料庫管理系統是根據您的具體需求和使用情境來決定的。以下是一些需要考慮的重要因素:

  • 資料量:如果您的應用程序需要處理大量數據,則需要一種能夠有效地管理和檢索大量數據的資料庫。
  • 資料庫結構:關聯型資料庫(如MySQL和Oracle)通常適用於具有複雜關係且結構化的數據,而非關聯型資料庫(如MongoDB)則適合於結構較為靈活的數據。
  • 讀寫需求:如果您的應用需要大量的讀取操作,那麼選擇讀取效率高的資料庫更為適合。反之,如果寫入操作較多,則應該選擇寫入效能高的資料庫。

比較不同資料庫管理系統的特點是一種常見的方式來確定哪種資料庫最適合您的需求。您可能需要研究和試驗各種資料庫,以了解它們的性能和兼容性。

結論

資料庫和資料庫管理系統對於資訊科技專業人士來說極為重要,無論是在數據存儲、數據管理,還是在數據分析等多個方面都有著至關重要的影響。掌握如何選擇和使用適合的資料庫管理系統,將大大提升你的數據處理能力和效率。