用來定義數據庫對象。數據庫對象是Sybase用來存儲數據的邏輯實體,主要有:
表(Table)、視圖(VIEw)、臨時表(Temp Table);
主鍵(Primary Key)、外鍵(Foreign Key)、索引(Index)、規則(Rule)、默認值(Default);
存儲過程(Stored Procedure)、觸發器(Trigger)
●基本語法
下面給出創建主要數據庫對象的語法:
1.表
創建表的基本語法是:
Create table[database.[owner].]table_name
(column_name datatype [default {constant_expression|user|null}]
{[{identity|null|not null}]|[[constraint constraint_name]
{{unique|primary key}[clustered|nonclustered]
[with{fillfactor|max_rows_per_page}=x]
[on segment_name]
|references[[database.]owner.]ref_table
[(ref_column)]
|check(search_condition)}]}…
在建立大型的數據庫時,可以考慮將創建表乃至其它數據庫對象的過程寫到一個文本裡,當數據庫系統出現問題時,在最壞的情況下,重建過程可以得到簡化,也能比較好的對數據庫的建設過程進行監視。
創建表的過程完成下列活動:
·定義表的每一列;
·定義列名和列的數據類型並指定列是否處理空值;
·指定列是否具有IDENTITY屬性;
·定義列級的完整性約束和表級的完整性約束
上述過程可見,創建表的過程可以設定填充因子,將列置於段上,設計索引,外鍵等等。
2.索引
索引對查詢性能的影響很大,要引起重視。
索引加速了數據檢索,Adaptive Server有三類索引:
·復合索引——索引包含多列;當兩列或多列由於它們的邏輯關系而作為整體被查詢時可建立這種索引;
·唯一索引——索引列的值不允許重復;
·簇聚索引和非簇聚索引——簇聚索引強迫Server不斷地對表中數據排序或重排序以保證表中數據的物理順序和邏輯順序的一致性,簇聚索引對范圍查詢性能影響極大;非簇索引沒有這樣的要求,非簇聚索引對修改操作有利。
何時建索引?
·如果手動插入identity列,則創建唯一索引以保證不插入已經存在的值;
·經常被排序訪問的列,即被列在order by子句中的列,最好對其建立索引以便Adaptive Server能充分利用索引順序的優點;
·如果列經常用手連接,則可對列建立索引,這樣系統能更快地執行連接;
·包含主鍵的列一般都有簇聚索引,尤其是當它頻繁地和其它表的列相關聯;
·經常被范圍查詢的列最好為其建立簇聚索引,一旦查詢范圍內的第一個值被發現,則隨後的值在物理上一定相近。簇聚索引對單值查詢並沒有什麼優點。
創建索引的基本語法:
Create [unique][clustered|nonclustered]index index_name
On [[database.]owner.]table_name
(column_name[,column_name]…)
[on segment_name][with consumers=x]
上述語法包含了這樣的暗示:將簇聚索引和它的基表分離在不同的段上;段是邏輯概念,但段可以位於不同的物理設備上,也即將簇聚索引和基表物理上分開。 這是不允許的,我們將在後面討論設備、數據庫、段、表分區時作詳細討論。
3.鍵(key)
理解鍵是理解關聯的關鍵。
鍵和索引往往是一回事。鍵的意義在概念上,鍵用於參照完整性約束。
主鍵是表的單值列的集合,主鍵通過在放置它們的表上創建一個單值索引來實現其單值性的。實際上主鍵是作為標志表的標志符而存在的,一旦主鍵確定,則由該主鍵就確定了的表也就確定了。
外鍵是和其它表中的主鍵相關的列,主鍵和外鍵的關系確定了外鍵的值域,該值域即為相應主鍵的取值范圍。這樣就從理論上強制實現了表與表之間的參照完整性。
前面創建表的語法裡包含了創建鍵的成分。也可以通過其它途徑創建主鍵和外鍵。
◇Unique約束和Primary key約束的區別
Unique約束和Primary key約束用來保證同一表中指定的列上沒有重復值,這兩個約束都產生唯一索引確保數據一致性,默認情況下,Unique約束產生唯一的非聚集索引,Primary key約束產生唯一的聚集索引。Primary key約束比Unique約束嚴格:Primary key列不允許有空值,Unique列允許有空值。
4.視圖
視圖是查看多表中數據的方法,視圖從基表派生,它並非物理存在,而是邏輯表;視圖也系統提供管理表的一種安全機制。視圖使得用戶集中精力在感興趣的數據集上。
創建視圖的語法:
create view [[database.]owner.]vIEw_name
[(column_name[,column_name]…)]
as select [distinct] select_statement
[with check option]
有distinct關鍵字的視圖不能更新。當視圖涉及關聯時,定義視圖要小心,這時是對多表操作,完整性顯得很重要。