資料庫是系統開發過程中時常用到的工具,主要功能為資料儲存與管理資料。
資料庫是由三個概念所組成,資料庫本身、資料庫內的資料表以及操作資料庫的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語法可以參考這。
除了上述的基本操作外,資料庫還有很多基礎的概念,以下是我認為的重要的基礎概念:
- 資料庫中的專業名詞與各個鍵值(table, row, column, primary key, foreign key, etc)
- 資料庫設計 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 主要負責的工作有:
- 將SQL結果的每筆資料來建立實體物件
- 建立一個實體物件用來新增資料到資料表
- 用Static Method去執行常用的SQL語法並將資料回傳成實體物件
- 能夠獲得跟設定資料屬性
- 包含處理資料的商業邏輯
以下是實作簡單的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