資料庫與Object Relational Mapping

vic
5 min readOct 23, 2018

--

資料庫是系統開發過程中時常用到的工具,主要功能為資料儲存與管理資料。

資料庫是由三個概念所組成,資料庫本身、資料庫內的資料表以及操作資料庫的SQL語言,這邊以SQLite這個資料庫簡單講解資料庫的操作過程。

以下操作在Linux的執行環境下

一、資料庫的建立

由於SQLite是檔案型資料庫,所以一個檔案就代表一個資料庫。

當你執行

$ sqlite3 test.db

SQLite會在目錄底下建立一個test.db的檔案,並進入此資料庫的操作畫面:

二、資料表建立

建立資料庫後,我們可以透過SQL去建立資料表。

sqlite> create table students(student_id, name, gender, height, weight);

隨後你可以透過".tables"的指令看到目前資料庫所有的資料表。

四、新增資料

建立資料表後,你需要將屬於這個資料表的每筆資料新增進去。

sqlite> insert into students values ('C0001', 'Vic', 'male', 180, 70);

三、查詢資料

建立完各筆資料後,可以透過查詢語言去獲得特定的資料,以下的例子為列出所有資料。

sqlite> select * from students;

五、其他操作

其他操作還有刪除資料、更新資料或者加入特定條件的查詢語言,更多的SQL語法可以參考這

除了上述的基本操作外,資料庫還有很多基礎的概念,以下是我認為的重要的基礎概念:

  1. 資料庫中的專業名詞與各個鍵值(table, row, column, primary key, foreign key, etc)
  2. 資料庫設計 Entity Relationship Diagram 以及正規化

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

接下來進入關於程式設計的部分,在物件導向設計中,所謂的物件包含了資料以及處理資料的行為。

而在系統設計中,我們的資料會儲存在資料庫中,並透過SQL語法去獲得資料,例如:

上述的程式,我們透過sqlite3的套件,去存取test.db這個資料庫,然後透過執行SQL語法去獲得資料庫的資料,它會以Hash的形式回傳資料,我們再將Hash轉換成物件,之後就透過操作物件去操作資料。

但這樣的方式需要撰寫大量的SQL,導致不好維護及管理,而為了更方便地去存取在資料庫的資料,我們需要一個更好的機制將資料庫的資料轉換成物件,這個機制就是Object Relational Mapping。

ORM這個機制除了將資料庫的資料轉成物件外,大部分的資料庫操作都可以透過物件去實現,例如建立、新增、刪除等,甚至是建立資料表之間的關聯也可以用物件實作。

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Active Record Pattern 是由 Martin Fowler所發明的開發模式,也是實作ORM的設計模式,如下圖:

在Active Record中一個class代表著一個資料表:

而一個object代表著一筆資料:

根據 Martin Fowler 描述,Active Record 主要負責的工作有:

  1. 將SQL結果的每筆資料來建立實體物件
  2. 建立一個實體物件用來新增資料到資料表
  3. 用Static Method去執行常用的SQL語法並將資料回傳成實體物件
  4. 能夠獲得跟設定資料屬性
  5. 包含處理資料的商業邏輯

以下是實作簡單的Object Relational Mapping的程式碼

透過ORM的設計,Student這個class能直接透過method的操作去存取資料庫的資料,而在rails的設計中,ActiveRecord這個class將大部分的資料庫操作的抽象化成method,也就是說大部分的SQL查詢能重複使用且方便管理,所以Student的class可以直接繼承ActiveRecord就能去存取資料庫。

reference : an overview of object relational mapping and active record

--

--

vic
vic

Written by vic

經驗生於思考,思考生於行動。

No responses yet