基本資料結構
表
表是關係資料庫中的一個基本資料結構。表就是行的集合。每行(row)包含一個或多個列。
從Oracle8企業版以後,就提供了分割槽選件,它允許將表和索引進行分割槽。利用分割槽,Oracle可從以下兩方面改善效能:
。Oracle不用去訪問那些不滿足查詢條件的分割槽
。如果分割槽中所有資料都滿足查詢條件,那麼Oracle將選擇全部資料而不需要對每行均進行字句檢查。
檢視
檢視(view)是Oracle中的一種由SQL語句構造的資料結構。SQL語句儲存在資料庫中,在查詢中使用一個檢視時,所儲存的查詢將得以執行,並向用戶返回基表(base table)中的資料。
檢視不包含資料,而是表示一些方法可以檢視查詢所指定的基表資料。
檢視有以下幾種用途:
。簡化對多個表資料的訪問
。可以保證表中資料的安全(如,建立包含WHERE子句的檢視就可以限制訪問表中的資料)
。將應用與表中某些特定的結構分離
檢視建立在基表集合的基礎之上,基表包括Oracle資料庫中的事實表或者其他檢視。如果檢視中的任何一個基表進行修改,那麼該檢視將無法繼續使用它們,因此檢視本身也無法再使用。
索引
索引(index)是用來加快訪問資料庫中記錄速度的一種資料結構。一個索引與一個特定的表相關,而且包含該表的一個或多個列的資料。
建立索引的SQL基本語法:
CREAT INDEX emp_idx1 on emp (ename,job);
其中,emp_idx1時索引名,emp是建立索引的表,ename和job時構成索引的列值。
除了索引資料以外,索引項中還為其相關行儲存了ROWID.ROWID是獲取資料庫行的最快方式,因此隨後資料庫行的獲取都是以這種最佳方式來完成。
Oracle中使用的4中型別的索引結構:標準B*-樹索引、反向鍵索引、點陣圖索引以及Oracle8i引入的基於函式的索引。Oracle使你可以對錶中的資料進行聚合,從而改善效能。
其它資料結構
序列(Sequence)
在多使用者資料庫中經常出現的大問題,就是很難為鍵或識別符號提供唯一的序號。在這種情況下,Oracle允許建立序列物件。
序列號可以用名字,一個遞增值或有關序列的其他一些資訊。序列獨立於任何表,因此多個表可以使用同樣的序列號。
同義詞(Synonym)
所有的Oracle資料庫的資料結構都儲存在一個特定的模式(schema)。模式是和一個特定的使用者名稱相關聯的,所有物件都透過帶有物件名的模式名得到引用。
例如,模式DEMO中有一個表名為EMP.如果想引用表EMP,那麼應該透過完整名DEMO.EMP來引用。如果沒有提供特定的模式名,那麼Oracle假定該結構處於當前使用者名稱的模式中。
叢集(Cluster)
叢集是一種能夠改善獲取效能的資料結構。叢集和索引一樣,不會影響表的邏輯檢視。
雜湊叢集(Hash Cluster)
資料設計
約束
約束(constraint)強制資料庫中某些資料的完整性。當給某列增加一個約束,Oracle自動確保不滿足此約束的資料是絕不能被接受的。
約束可以在建立或增加包括某列(透過關鍵字)的表時與列相關聯,或者在表建立後透過SQL命令ALTER TABLE來實現與該列的關聯。在Oracle8及以後的版本中支援以下5個約束型別:
NOT NULL
對於任何列都可以設為NOT NULL.如果在任何SQL操作中將一個NULL值賦給某個有NOT NULL約束的列,Oracle會為這個語句返回一個錯誤。
惟一性
主鍵
外來鍵
校驗
某些約束需要建立所以來支援。
約束可以是立即的或延遲的。立即約束(immediate constraint)只要有寫操作就會立即對受約束列產生影響;而延遲約束(deferred constraint)只有在對約束行產生變化的SQL語句執行完時才有強制作用。
對於某個特定表的約束可設定成暫時掛起。當再次啟動該約束操作時,再要求Oracle對該約束驗證所有資料,或者只是對新資料應用約束。在現有表中增加約束時,可以指定是否對錶中所有記錄進行約束校驗。
觸發器
觸發器是個程式碼塊,當某個表中發生了某種型別的資料庫事件時它就會被觸發,有以下3種事件會導致觸發器的觸發:
。資料庫UPDATE
。資料庫INSERT
。資料庫DELETE
例如,可以定義一個觸發器,從而在使用者改變某一行時,寫一個定製的審查記錄。
觸發器是在行一級被定義的。可以指定觸發器是對每一行觸發,或者對觸發該觸發器事件的SQL語句觸發。
觸發器的觸發有3個時機:
。在執行觸發事件之前
。在執行觸發事件之後
。非觸發事件
將前兩種時間選項與觸發器所觸發的行和語句的結合,則有4種可能的觸發器實現:在語句之前;在行之前;在語句之後;在行之後。
任何觸發器都可以有一個觸發器限制(trigger restriction)。觸發器限制是一個布林表示式,如果其值為FALSE,那麼就阻止觸發器觸發。
觸發器的定義和儲存都獨立於使用它們的表。因為觸發器包含邏輯,所以必須透過比SQL功能強的某種實現資料訪問的語言來寫。可以直接用PL/SQL或Java來寫觸發器,也可以透過呼叫其中任一種語言編寫的現有儲存過程來寫觸發器。
觸發器觸發是SQL語句執行的結果,該SQL語句修改了某個表中的行。觸發觸發器的操作可能是修改這個表中的資料,或者產生某些改變來觸發其他表的觸發器。這麼做的最後結果可能是以某種方法修改了資料,但Oracle認為這是不合邏輯的。這些情況都會導致Oracle返回變異表(mutating table,被其他觸發器修改的表)的執行時錯誤,或是返回約束表(constraining table,被其他約束脩改的表)的執行時錯誤。
Oracle8i還引入了一組非常有用的系統事件觸發器和使用者事件觸發器。現在可以在系統事件(如,資料庫啟動或關閉)中放置觸發器,也可以在使用者事件(登入和退出)中放置觸發器。
基本資料結構
表
表是關係資料庫中的一個基本資料結構。表就是行的集合。每行(row)包含一個或多個列。
從Oracle8企業版以後,就提供了分割槽選件,它允許將表和索引進行分割槽。利用分割槽,Oracle可從以下兩方面改善效能:
。Oracle不用去訪問那些不滿足查詢條件的分割槽
。如果分割槽中所有資料都滿足查詢條件,那麼Oracle將選擇全部資料而不需要對每行均進行字句檢查。
檢視
檢視(view)是Oracle中的一種由SQL語句構造的資料結構。SQL語句儲存在資料庫中,在查詢中使用一個檢視時,所儲存的查詢將得以執行,並向用戶返回基表(base table)中的資料。
檢視不包含資料,而是表示一些方法可以檢視查詢所指定的基表資料。
檢視有以下幾種用途:
。簡化對多個表資料的訪問
。可以保證表中資料的安全(如,建立包含WHERE子句的檢視就可以限制訪問表中的資料)
。將應用與表中某些特定的結構分離
檢視建立在基表集合的基礎之上,基表包括Oracle資料庫中的事實表或者其他檢視。如果檢視中的任何一個基表進行修改,那麼該檢視將無法繼續使用它們,因此檢視本身也無法再使用。
索引
索引(index)是用來加快訪問資料庫中記錄速度的一種資料結構。一個索引與一個特定的表相關,而且包含該表的一個或多個列的資料。
建立索引的SQL基本語法:
CREAT INDEX emp_idx1 on emp (ename,job);
其中,emp_idx1時索引名,emp是建立索引的表,ename和job時構成索引的列值。
除了索引資料以外,索引項中還為其相關行儲存了ROWID.ROWID是獲取資料庫行的最快方式,因此隨後資料庫行的獲取都是以這種最佳方式來完成。
Oracle中使用的4中型別的索引結構:標準B*-樹索引、反向鍵索引、點陣圖索引以及Oracle8i引入的基於函式的索引。Oracle使你可以對錶中的資料進行聚合,從而改善效能。
其它資料結構
序列(Sequence)
在多使用者資料庫中經常出現的大問題,就是很難為鍵或識別符號提供唯一的序號。在這種情況下,Oracle允許建立序列物件。
序列號可以用名字,一個遞增值或有關序列的其他一些資訊。序列獨立於任何表,因此多個表可以使用同樣的序列號。
同義詞(Synonym)
所有的Oracle資料庫的資料結構都儲存在一個特定的模式(schema)。模式是和一個特定的使用者名稱相關聯的,所有物件都透過帶有物件名的模式名得到引用。
例如,模式DEMO中有一個表名為EMP.如果想引用表EMP,那麼應該透過完整名DEMO.EMP來引用。如果沒有提供特定的模式名,那麼Oracle假定該結構處於當前使用者名稱的模式中。
叢集(Cluster)
叢集是一種能夠改善獲取效能的資料結構。叢集和索引一樣,不會影響表的邏輯檢視。
雜湊叢集(Hash Cluster)
資料設計
約束
約束(constraint)強制資料庫中某些資料的完整性。當給某列增加一個約束,Oracle自動確保不滿足此約束的資料是絕不能被接受的。
約束可以在建立或增加包括某列(透過關鍵字)的表時與列相關聯,或者在表建立後透過SQL命令ALTER TABLE來實現與該列的關聯。在Oracle8及以後的版本中支援以下5個約束型別:
NOT NULL
對於任何列都可以設為NOT NULL.如果在任何SQL操作中將一個NULL值賦給某個有NOT NULL約束的列,Oracle會為這個語句返回一個錯誤。
惟一性
主鍵
外來鍵
校驗
某些約束需要建立所以來支援。
約束可以是立即的或延遲的。立即約束(immediate constraint)只要有寫操作就會立即對受約束列產生影響;而延遲約束(deferred constraint)只有在對約束行產生變化的SQL語句執行完時才有強制作用。
對於某個特定表的約束可設定成暫時掛起。當再次啟動該約束操作時,再要求Oracle對該約束驗證所有資料,或者只是對新資料應用約束。在現有表中增加約束時,可以指定是否對錶中所有記錄進行約束校驗。
觸發器
觸發器是個程式碼塊,當某個表中發生了某種型別的資料庫事件時它就會被觸發,有以下3種事件會導致觸發器的觸發:
。資料庫UPDATE
。資料庫INSERT
。資料庫DELETE
例如,可以定義一個觸發器,從而在使用者改變某一行時,寫一個定製的審查記錄。
觸發器是在行一級被定義的。可以指定觸發器是對每一行觸發,或者對觸發該觸發器事件的SQL語句觸發。
觸發器的觸發有3個時機:
。在執行觸發事件之前
。在執行觸發事件之後
。非觸發事件
將前兩種時間選項與觸發器所觸發的行和語句的結合,則有4種可能的觸發器實現:在語句之前;在行之前;在語句之後;在行之後。
任何觸發器都可以有一個觸發器限制(trigger restriction)。觸發器限制是一個布林表示式,如果其值為FALSE,那麼就阻止觸發器觸發。
觸發器的定義和儲存都獨立於使用它們的表。因為觸發器包含邏輯,所以必須透過比SQL功能強的某種實現資料訪問的語言來寫。可以直接用PL/SQL或Java來寫觸發器,也可以透過呼叫其中任一種語言編寫的現有儲存過程來寫觸發器。
觸發器觸發是SQL語句執行的結果,該SQL語句修改了某個表中的行。觸發觸發器的操作可能是修改這個表中的資料,或者產生某些改變來觸發其他表的觸發器。這麼做的最後結果可能是以某種方法修改了資料,但Oracle認為這是不合邏輯的。這些情況都會導致Oracle返回變異表(mutating table,被其他觸發器修改的表)的執行時錯誤,或是返回約束表(constraining table,被其他約束脩改的表)的執行時錯誤。
Oracle8i還引入了一組非常有用的系統事件觸發器和使用者事件觸發器。現在可以在系統事件(如,資料庫啟動或關閉)中放置觸發器,也可以在使用者事件(登入和退出)中放置觸發器。