Informix 如何更加有效的創(chuàng)建主鍵和外鍵
|
作者:whitecrewhouse 出處:www.cublog.cn 更新時(shí)間: 2007年05月12日
|
許多人喜歡在 CREATE TABLE 語(yǔ)句中使用約束鍵字來(lái)創(chuàng)建主鍵、外鍵、惟一性和其他約束。他們認(rèn)為這是一種創(chuàng)建約束的簡(jiǎn)單且方便的方法。下面是一個(gè)例子:
CREATE TABLE sub_accounts ( sub_acc INTEGER PRIMARY KEY, ref_num INTEGER NOT NULL, ref_type INTEGER NOT NULL, sub_descr CHAR(20), FOREIGN KEY (ref_num, ref_type) REFERENCES accounts (acc_num, acc_type));
遺憾的是,對(duì)于數(shù)據(jù)庫(kù)的性能和管理,這樣做并不好。當(dāng) Informix 讀取以上 CREATE TABLE 語(yǔ)句時(shí),它將自動(dòng)創(chuàng)建兩個(gè)索引,一個(gè)用于 sub_acc 上的主鍵,一個(gè)用于 ref_num 和 ref_type 上的外鍵。然后,它將自動(dòng)為每一個(gè)索引指派一個(gè)系統(tǒng)編號(hào),并將該編號(hào)用作索引名,對(duì)于開(kāi)發(fā)人員和設(shè)計(jì)人員而言,這沒(méi)有任何意義。更糟的是,這些索引是在數(shù)據(jù) dbspace 內(nèi)部創(chuàng)建的,因此會(huì)對(duì)數(shù)據(jù)庫(kù)總體性能產(chǎn)生負(fù)面影響,所以 Informix 文檔并不建議這樣做。此外,在刪除該表的主鍵或外鍵約束時(shí),將自動(dòng)刪除這些索引;因此,如果需要在查詢中使用這些索引,則需要重新創(chuàng)建它們。如果表中有數(shù)百萬(wàn)行,那么這可能是一個(gè)十分耗時(shí)的過(guò)程。
因此,在表中創(chuàng)建或添加約束的正確過(guò)程如下:
創(chuàng)建不含約束鍵字的表。 在將使用約束的列上創(chuàng)建索引。 更改表來(lái)添加約束。 下面是一個(gè)很好的例子:
CREATE TABLE item( Item_num smallint, Order_num integer , Stock_num smallint, Manu_code char(3) , Quantity smallint, Total_price money(8) ) IN data1; CREATE UNIQUE INDEX item_idx1 ON item (item_num) IN idx1; ALTER TABLE item ADD CONSTRIANT PRIMARY KEY (item_idx1);
本例中,您可以在不同的數(shù)據(jù)庫(kù)空間(dbspace)中放置索引和數(shù)據(jù),避免與索引一起刪除主鍵約束。
|
|
|
|