所謂的資料庫物件(Database Object, DB obj)是指資料表(Table)或是檢視表(View)...等,由使用者或系統建立在資料庫中的物件名稱。
資料表物件 | | 有無資料 |
資料表 | Table | Y |
索引 | Index | N |
檢視表 | View | Y |
程序 | Procedure | N |
函式 | Function | N |
觸發器 | Trigger | N |
流水號 | Sequence | N |
別名 | Synonym | 依據參照目標而定 |
Schema
- 在講DB obj之前要先瞭解Schema,在大型資料庫中如Oracle或DB2,是以服務”Multi User”為前提存在的,這裡講的User並非指一般的操作人員,而是比較像是Application或是Module。
- 而Schema是和User相對應的,所以基本上Schema=User
- 每個User都可以建立自己的DB obj,則該DB obj的所有者就是該使用者,因此假設A跟B兩個User卻建立了同一個名字的Table時,資料庫實際上會建立分屬不同User(Schema)的DB obj。
- 在User A有參照User B權限的前提下,那當User A想要參照User B的foo Table時,SQL語法如下
SELECT * FORM B.foo
Table
- 關連式資料庫最基本的Database Object就是Table,Table是由Columns跟Rows所組成
- 每個Table都可以設定一個主鍵(Primary Key, PK),PK可以由一個Column或是多個Column組成,但通常會指定單一個Column當作PK,只要那個Column被指定為PK,就不可以是Null,而且裡面存放的資料也必須是唯一的。
- Table中除了PK外,有時也會有一到多個不等的外來鍵(Foreign Key, FK),FK是另一個Table的PK,FK的目的是確定資料的參考完整性,FK沒有唯一性的限制。
Data Type
- Data Type依照各家的資料庫會有不同的定義,像是varchar2就是Oracle獨有的。
- 基本上,資料型態可以分三大類:數字、字串、日期。
- 有的資料庫為了存放大型的資料,像是檔案或圖片,還會有LOB(Large Object)跟Image的Data Type可以運用。
Rails data type對照各家資料庫data type
View
- View是一種藉由SELECT命令,以『假想的資料表』形式來參照資料庫中實際存在的資料表的功能。
- Table是實際存在的Database Object,所以佔用的硬碟空間會隨著資料量的增加而增加,但是View只是定義並不佔用硬碟空間,當View被查詢時,內含的Select語法就會被執行,對使用者而言,與一般的Table沒什麼不同。
- 但也因為View的特性,一個View所呈現的資料可能是由多個Table所組成,當多個View依巢狀結構組織起來用的話,非常有可能會影響執行效率。
Store Procedure&Function
- 預存程序(Store Procedure)是在資料庫中事先建立好一連串的SQL命令陳述式,這樣只要執行一個程序,就可以一次執行一連串的SQL命令。
- 預存函式(Store Function)同Store Procedure一樣,但不同的是Function具有回傳值(Return Value),所以Store Function可以將複雜的資料查詢陳述式包裝起來後,使用在Select、Update、Insert語法中。
- 程序中除了SQL命令外,也可以寫入如IF、While...等邏輯判斷或迴圈處理命令,所以也可以說能建立出一種程式。
- 依照各家資料庫的不同,撰寫的語言也有所不同,像在Oracle就可以使用PL/SQL與JAVA來撰寫程序,MS SQL Server則是使用T-SQL,Postgre則是使用PL/pgSQL。MySQL在5.0版後也開始支援Store Procedure&Function
Trigger
- Trigger是依附在Table下的一種DB obj,當對某個Table進行Insert、Update、Delete時,如果有設定Trigger並滿足觸發Trigger的條件,則Trigger內的SQL陳述式就會自動被執行。
- 並不是每種資料庫都具有Trigger的功能,像是Access就沒有,而MySQL在5.0.2版後加入Trigger功能。
Sequence
- 序列號(Sequence)也稱流水號,是一種含有單一值的DB obj,若參照到其名為NEXTVAL的模擬欄,則其中的值就會遞增,且不會重複。
- Sequence並不會受到Transaction的影響,也就是說當參照了NEXTVAL使值遞增後,若這時使用Rollback Transaction,Sequence並不會因此恢復到原本的值。
- 因為上述特性的關係,Sequence常作為PK來使用,也常被使用在交易單單號的應用上。
Synonym
- 別名(Synonym)是DB obj的別稱,如果針對Table或是View建立了別名的話,就可以不用實際的名稱,而是用Synonym Name來參照資料。
沒有留言:
張貼留言