2016年6月18日 星期六

Session 1:Database Object

所謂的資料庫物件(Database Object, DB obj)是指資料表(Table)或是檢視表(View)...等,由使用者或系統建立在資料庫中的物件名稱。



資料表物件 有無資料
資料表TableY
索引IndexN
檢視表ViewY
程序ProcedureN
函式FunctionN
觸發器TriggerN
流水號SequenceN
別名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來參照資料。

    沒有留言: