2017年12月24日 星期日

程式設計師所需要知道的資料庫觀念

本文要來聊聊一個程式設計師需要知道資料庫觀念,主題如下:
  • 什麼是資料庫。
  • 有哪幾種資料庫系統。
  • 資料庫正規化。
  • 程式如何與資料庫系統互動。
  • 未來可能的趨勢。

什麼是資料庫

資料庫的英文為 Database = Data + Base,其中的 Base 含有基礎架構的意義在,可以把 Base 視為收集資料的集中地,不過這個集中地不是紙本的檔案室,而是電子化的儲存設備(通常為硬碟)。但當資料沒有規劃地收集起來並存放的話,要找資料的時候就會很麻煩,例如圖書館的書籍若沒有分類的話,那讀者要怎麼找書呢?而要將資料分類時,首先要找出資料之間的關聯性,這也衍生出關聯式資料庫(Relational Database),此文會以關聯式資料庫做為講解。

有哪幾種資料庫系統

有了資料之後,要將資料分類時,總不能一直用人工的方式來作業吧,於是需要一套系統來建立並管理資料庫,而在電腦軟體裡,此套系統叫做「資料庫管理系統」,而關聯式資料庫管理系統是用來管理關聯式資料庫的。目前已有很多套的關聯式資料庫管理系統,比較有名的為 Oracle Database、Microsoft SQL Server、MySQL、IBM DB2等。

資料庫正規化

正規化是為了消除重複資料所做的處理,可以用來減少資料儲存異常的情況發生。此部分可
參考 為何使用資料庫儲存資料時,需要先執行正規化?  一文。

程式如何與資料庫系統互動

下圖為程式與RDBS連線時的概念圖:
圖中的Application可以為C、Java、PHP等程式語言開發出來的程式。DBC是DataBase Connector的縮寫,DBC API為程式語言在處理資料庫的函式庫,DBC Driver處理與資料庫系統的通訊細節,這是因為不同的資料庫系統會有不同的資料處理方式,這裡的Driver與API是借用硬體驅動程式的觀念,目的是要讓同一個程式語言使用一套API就可以處理不同的資料庫系統。

未來可能的趨勢

關聯式資料庫系統已存在很久了,但是由於大數據的需求,而RDBS在處理大數據方面的速度通常不是很理想(或不合適),於是有以JSON格式為主的DB出現,例如MongoDB。此外也有以檔案為主的的分散式檔案系統,例如Hadoop。這是因為在處理大數據時,有可能處理聲音、影像等非文字的資料,而關聯式資料庫在一開始設計時,並沒有考慮到Big Data的議題。Big Data的資料庫系統要怎麼選擇,筆者本身沒有深入研究,所以只能點到為主。