oracle-9i-數(shù)據(jù)庫設(shè)計(jì)指引全集_第1頁
oracle-9i-數(shù)據(jù)庫設(shè)計(jì)指引全集_第2頁
oracle-9i-數(shù)據(jù)庫設(shè)計(jì)指引全集_第3頁
oracle-9i-數(shù)據(jù)庫設(shè)計(jì)指引全集_第4頁
oracle-9i-數(shù)據(jù)庫設(shè)計(jì)指引全集_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Oracle9i數(shù)據(jù)庫設(shè)計(jì)指引全集一、數(shù)據(jù)庫物理設(shè)計(jì)原則1.1 數(shù)據(jù)庫環(huán)境配置原則1.1.1 操作系統(tǒng)環(huán)境: 對(duì)于中小型數(shù)據(jù)庫系統(tǒng),采用linux操作系統(tǒng)比較合適,對(duì)于數(shù)據(jù)庫冗余要求負(fù)載均衡能力要求較高的系統(tǒng),可以采用oracle9i rac的集群數(shù)據(jù)庫的方法,集群節(jié)點(diǎn)數(shù)范圍在264個(gè)。對(duì)于大型數(shù)據(jù)庫系統(tǒng),可以采用sun solaris sparc 64位小型機(jī)系統(tǒng)或hp 9000 系列小型機(jī)系統(tǒng)。rad5適合只讀操作的數(shù)據(jù)庫,rad1 適合oltp數(shù)據(jù)庫1.1.2 內(nèi)存要求 對(duì)于linux操作系統(tǒng)下的數(shù)據(jù)庫,由于在正常情況下oracle對(duì)sga的 管理 能力不超過1.7g。所以總的物理內(nèi)存在

2、4g以下。sga的大小為物理內(nèi)存的50%75%。對(duì)于64位的小型系統(tǒng),oracle數(shù)據(jù)庫對(duì)sga的管理超 過2g的限制,sga設(shè)計(jì)在一個(gè)合適的范圍內(nèi):物理內(nèi)存的50%70%,當(dāng)sga過大的時(shí)候會(huì)導(dǎo)致內(nèi)存分頁,影響系統(tǒng)性能。1.1.3 交換區(qū)設(shè)計(jì)當(dāng)物理內(nèi)存在2g以下的情況下,交換分區(qū)swap為物理內(nèi)存的3倍,當(dāng)物理內(nèi)存>2g的情況下,swap大小為物理內(nèi)存的12倍。1.1.4 其他環(huán)境變量參考o(jì)racle相關(guān)的安裝文檔和隨機(jī)文檔。1.2 數(shù)據(jù)庫設(shè)計(jì)原則1.2.1 數(shù)據(jù)庫sid 數(shù)據(jù)庫sid是唯一標(biāo)志數(shù)據(jù)庫的符號(hào),命名長(zhǎng)度不能超過5個(gè)字符。對(duì)于單節(jié)點(diǎn)數(shù)據(jù)庫,以字符開頭的5個(gè)長(zhǎng)度以內(nèi)字串作為s

3、id的命名。對(duì)于集群數(shù)據(jù)庫, 當(dāng)命名sid后,各節(jié)點(diǎn)sid自動(dòng)命名為sidnn,其中nn為節(jié)點(diǎn)號(hào):1,2,,64。例如rac1、rac2、rac24。1.2.2 數(shù)據(jù)庫全局名數(shù)據(jù)庫全局名稱:<sid>.domain 1.2.3 數(shù)據(jù)庫類型選擇 對(duì)于海量數(shù)據(jù)庫系統(tǒng),采用data warehouse的類型。對(duì)于小型數(shù)據(jù)庫或oltp類型的數(shù)據(jù)庫,采用transaction processing類型。 1.2.4 數(shù)據(jù)庫連接類型選擇 oracle數(shù)據(jù)庫有專用服務(wù)器連接類型和多線程服務(wù)器mts連接類型。對(duì)于批處理服務(wù),需要專用服務(wù)器連接方式,而對(duì)于oltp服務(wù)則mts的連接方式比較合適。由于

4、采用mts后,可以通過配置 網(wǎng)絡(luò) 服務(wù)實(shí)現(xiàn)某些特定批處理服務(wù)采用專用服務(wù)器連接方式,所以數(shù)據(jù)庫設(shè)計(jì)時(shí)一般采用mts類型。 1.2.5 數(shù)據(jù)庫sga配置 數(shù)據(jù)庫sga可以采用手工配置或按物理內(nèi)存比例配置,在數(shù)據(jù)庫初始設(shè)計(jì)階段采用按比例配置方式,在實(shí)際應(yīng)用中按系統(tǒng)調(diào)優(yōu)方式修改sga。 1.2.6 數(shù)據(jù)庫字符集選擇 為了使數(shù)據(jù)庫能夠正確支持多國(guó)語言,必須配置合適的數(shù)據(jù)庫字符集,采用utf8字符集。 注意:如果沒有大對(duì)象,在使用過程中進(jìn)行語言轉(zhuǎn)換沒有什么影響,具體過程如下切記設(shè)定的字符集必須是oracle支持,不然不能start: sql> shutdown immediate;sql>

5、startup mount;sql> alter system enable restricted session;sql> alter system set job_queue_processes=0;sql> alter database open;sql> alter database character set internal_use we8iso8859p1;sql> shutdown immediate;sql> startup 1.2.7 數(shù)據(jù)庫其他參數(shù)配置 1.2.7.1 db_files db_files是數(shù)據(jù)庫能夠同時(shí)打開的文件數(shù)量,默

6、認(rèn)值是200個(gè)。當(dāng)數(shù)據(jù)庫規(guī)劃時(shí)文件數(shù)量files接近或超過200個(gè)時(shí)候,按以下估計(jì)值配置: db_files = files * 1.5 1.2.7.2 db_block_size 一個(gè)extent要是5個(gè)blocks的倍數(shù)為好,如:一個(gè)blocks是4096字節(jié),那一個(gè)extent就是2m、4m或8m為好。 db_block_size是數(shù)據(jù)庫最小物理單元,一旦數(shù)據(jù)庫創(chuàng)建完成,該參數(shù)無法修改,db_block_size按以下規(guī)則調(diào)整: 數(shù)據(jù)倉庫類型: db_block_size盡可能大,采用8192 或 16384 oltp類型: db_block_size 用比較小的取值范圍: 2048 或

7、 4096 blocks推薦是系統(tǒng)操作的塊倍數(shù)裸設(shè)備塊大小是512字節(jié),ntfs是 4k,使用8k的方式在大部分系統(tǒng)上通用。 1.2.8 數(shù)據(jù)庫控制文件配置 1.2.8.1 控制文件鏡象 多個(gè)控制文件存放在不同的物理位置。 1.2.8.2 控制文件配置 控制文件中參數(shù)設(shè)置,最大的數(shù)據(jù)文件數(shù)量不能小于數(shù)據(jù)庫參數(shù)db_files。 1.2.9 數(shù)據(jù)庫日志文件配置 1.2.9.1 日志文件大小 日志文件的大小由數(shù)據(jù)庫事務(wù)處理量決定,在設(shè)計(jì)過程中,確保每20分鐘切換一個(gè)日志文件。所以對(duì)于批處理系統(tǒng),日志文件大小為幾百m 到幾g的大小。對(duì)于oltp系統(tǒng),日志文件大小為幾百m以內(nèi)。 1.2.9.2 日志文

8、件組數(shù)量 對(duì)于批處理系統(tǒng),日志文件組為510組;對(duì)于oltp系統(tǒng),日志文件組為 35組,每組日志大小保持一致;對(duì)于集群數(shù)據(jù)庫系統(tǒng),每節(jié)點(diǎn)有各自獨(dú)立的日志組。 1.2.9.3 日志成員數(shù)量 為了確保日志能夠鏡象作用,每日志組的成員為2個(gè)。 1.2.10 數(shù)據(jù)庫回滾段配置 在oracle9i數(shù)據(jù)庫中,設(shè)計(jì)undo表空間取代以前版本的回滾段表空間。 undo 表空間大小的設(shè)計(jì)標(biāo)準(zhǔn)由以下公式計(jì)算: undospace = ur * ups *db_block_size+ 冗余量 ur: 表示在undo中保持的最長(zhǎng)時(shí)間數(shù)秒,由數(shù)據(jù)庫參數(shù)undo_retention值決定。 ups:表示在undo中,每秒

9、產(chǎn)生的數(shù)據(jù)庫塊數(shù)量。 例如:在數(shù)據(jù)庫中保留2小時(shí)的回退數(shù)據(jù),假定每小時(shí)產(chǎn)生200個(gè)數(shù)據(jù)庫塊。則undospace = 2 * 3600 * 200 * 4k = 5.8g 1.2.11 數(shù)據(jù)庫臨時(shí)段表空間配置 數(shù)據(jù)庫臨時(shí)段表空間根據(jù)實(shí)際生產(chǎn)環(huán)境情況調(diào)整其大小,表空間屬性為自動(dòng)擴(kuò)展。 1.2.12 數(shù)據(jù)庫系統(tǒng)表空間配置 系統(tǒng)表空間大小1g左右,除了存放數(shù)據(jù)庫數(shù)據(jù)字典的數(shù)據(jù)外,其他數(shù)據(jù)不得存儲(chǔ)在系統(tǒng)表空間。 1.3 數(shù)據(jù)庫表空間設(shè)計(jì)原則 1.3.1 表空間大小定義原則 當(dāng)表空間 大小小于操作系統(tǒng)對(duì)最大文件限制時(shí),表空間由一個(gè)文件組成。如果表空間大小大于操作系統(tǒng)對(duì)最大文件限制時(shí),該表空間由多個(gè)數(shù)據(jù)文

10、件組成,表空間的總大小為估算為: tablespace + sum (數(shù)據(jù)段+索引段)*150%。 1.3.2 表空間擴(kuò)展性設(shè)計(jì)原則 表空間數(shù)據(jù)文件采用自動(dòng)擴(kuò)展的方式,擴(kuò)展容量快大小按2的整數(shù)倍1m、2m、4m、8m、16m、32m、64m進(jìn)行擴(kuò)展,創(chuàng)建表空間時(shí)盡量采用 nologing選項(xiàng)。表空間的最大限制一般采用unlimited,除非確切知道表空間數(shù)據(jù)文件的最大使用范圍。一般windows 位系統(tǒng)的文件最大,位的unix系統(tǒng)系統(tǒng)文件最大g,但也要注意文件格式設(shè)定的文件大小,建議最大為2g。表空間采用local 管理 方式,例如:create tablespace  tbs_us

11、erinfodatafile    '/oradata/tbs_userinfo.dbf'    size 8m reuse    autoextend on    next 2m    maxsize unlimitednologgingextent management    local autoallocatesegment space management auto; 1.

12、4 裸設(shè)備的使用 一個(gè)scsi設(shè)備可以 14個(gè)分區(qū),unix操作系統(tǒng)256個(gè)分區(qū),性能比文件系統(tǒng)方式高15左右,空間大于要小于(實(shí)際分區(qū)大小減兩個(gè)oracle的數(shù)據(jù)塊),比方 100m,大于為100000k,推薦在unix使用軟連接(ln)方式把裸設(shè)備形成文件,用加入表空間時(shí)加resue 選項(xiàng),當(dāng)然也可只接把設(shè)備加入表空間,移動(dòng)裸設(shè)備使用dd命令 對(duì)于windows平臺(tái),oracle提供軟連接工具,實(shí)現(xiàn)裸設(shè)備的使用,計(jì)算一條記錄的長(zhǎng)度 二、 數(shù)據(jù)庫邏輯設(shè)計(jì)原則 2.1 命名標(biāo)準(zhǔn) 2.1.1 表屬性標(biāo)準(zhǔn) 2.1.1.1 表名 前綴為tbl_ 。數(shù)據(jù)表名稱必須以有特征含義的單詞或縮寫組成,中間可以

13、用“_”分割,例如:tbl_pstn_detail。表名稱不能用雙引號(hào)包含。 2.1.1.2 表分區(qū)名 前綴為p 。分區(qū)名必須有特定含義的單詞或字串。 例如 :tbl_pstn_detail 的分區(qū)p2004100101表示該分區(qū)存儲(chǔ) 2004100101時(shí)段的數(shù)據(jù)。 2.1.1.3 字段名 字段名稱必須用字母開頭,采用有特征含義的單詞或縮寫,不能用雙引號(hào)包含。 2.1.1.4 主鍵名 前綴為pk_。主鍵名稱應(yīng)是 前綴+表名+構(gòu)成的字段名。如果復(fù)合主鍵的構(gòu)成字段較多,則只包含第一個(gè)字段。表名可以去掉前綴。 2.1.1.5 外鍵名 前綴為fk_。外鍵名稱應(yīng)是 前綴+ 外鍵表名 + 主鍵表名 +

14、外鍵表構(gòu)成的字段名。表名可以去掉前綴。 2.1.2 索引 4.1.2.1 普通索引 前綴為idx_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的字段名。如果復(fù)合索引的構(gòu)成字段較多,則只包含第一個(gè)字段,并添加序號(hào)。表名可以去掉前綴。 2.1.2.2 主鍵索引 前綴為idx_pk_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的主鍵字段名,在創(chuàng)建表時(shí)候用using index指定主鍵索引屬性。 2.1.2.3 唯一所以 前綴為idx_uk_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的字段名。 2.1.2.4 外鍵索引 前綴為idx_fk_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的外鍵字段名。 2.1.2.5 函數(shù)索引 前綴為idx_func

15、_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的特征表達(dá)字符。 2.1.2.6 蔟索引 前綴為idx_clu_。索引名稱應(yīng)是 前綴+表名+構(gòu)成的簇字段。 2.1.3 視圖 前綴為v_。按業(yè)務(wù)操作命名視圖。 2.1.4 實(shí)體化視圖 前綴為mv_。按業(yè)務(wù)操作命名實(shí)體化視圖。 2.1.5 存儲(chǔ)過程 前綴為proc_ 。按業(yè)務(wù)操作命名存儲(chǔ)過程 2.1.6 觸發(fā)器 前綴為trig_ 。觸發(fā)器名應(yīng)是 前綴 + 表名 + 觸發(fā)器名。 2.1.7 函數(shù) 前綴為func_ 。按業(yè)務(wù)操作命名函數(shù) 2.1.8 數(shù)據(jù)包 前綴為pkg_ 。按業(yè)務(wù)操作集合命名數(shù)據(jù)包。 2.1.9 序列 前綴為seq_ 。按業(yè)務(wù)屬性命名。 2.1.1

16、0 表空間 2.1.10.1 公用表空間 前綴為tbs_ 。 根據(jù)存儲(chǔ)的特性命名,例如: tbs_parameter 。 2.1.10.2 專用表空間 tbs_<表名稱>_nn。該表空間專門存儲(chǔ)指定的某一個(gè)表,或某一表的假設(shè)干個(gè)分區(qū)的數(shù)據(jù) 2.1.11 數(shù)據(jù)文件 <表空間名>nn.dbf 。nn =1,2,3,4,等。 2.1.12 普通變量 前綴為var_ 。 存放字符、數(shù)字、日期型變量。 2.1.13 游標(biāo)變量 前綴為cur_ 。存放游標(biāo)記錄集。 2.1.14 記錄型變量 前綴為rec_ 。 存放記錄型數(shù)據(jù)。 2.1.15 表類型變量 前綴為tab_ 。 存放表類型

17、數(shù)據(jù)。 2.1.16 數(shù)據(jù)庫鏈 前綴為dbl_ 。 表示分布式數(shù)據(jù)庫外部鏈接關(guān)系。 2.2 命名 2.2.1 語言 命名應(yīng)該使用英文單詞,防止使用拼音,特別不應(yīng)該使用拼音簡(jiǎn)寫。命名不允許使用中文或者特殊字符。英文單詞用對(duì)象本身意義相對(duì)或相近的單詞,選擇最簡(jiǎn)單 或最通用的單詞,不能使用毫不相干的單詞來命名。當(dāng)一個(gè)單詞不能表達(dá)對(duì)象含義時(shí),用詞組組合,如果組合太長(zhǎng)時(shí),采用用簡(jiǎn)或縮寫,縮寫要基本能表達(dá)原單詞的 意義。當(dāng)出現(xiàn)對(duì)象名重名時(shí),是不同類型對(duì)象時(shí),加類型前綴或后綴以示區(qū)別。 2.2.2 大小寫 名稱一律大寫,以方便不同數(shù)據(jù)庫移植,以及防止程序調(diào)用問題。 2.2.3 單詞分隔 命名的各單詞之間可以

18、使用下劃線進(jìn)行分隔。 2.2.4 保留字 命名不允許使用sql保留字。 2.2.5 命名長(zhǎng)度 表名、字段名、視圖名長(zhǎng)度應(yīng)限制在20個(gè)字符內(nèi)(含前綴)。 2.2.6 字段名稱 同一個(gè)字段名在一個(gè)數(shù)據(jù)庫中只能代表一個(gè)意思。比方telephone在一個(gè)表中代表“ 號(hào)碼”的意思,在另外一個(gè)表中就不能代表“ 號(hào)碼”的意思。 不同的表用于相同內(nèi)容的字段應(yīng)該采用同樣的名稱,字段類型定義。 2.3 數(shù)據(jù)類型 2.3.1 字符型 固定長(zhǎng)度的字串類型采用char,長(zhǎng)度不固定的字串類型采用varchar。防止在長(zhǎng)度不固定的情況下采用char類型。如果在數(shù)據(jù)遷移等出現(xiàn)以上情況,則必須使用trim()函數(shù)截去字串后的空

19、格。 2.3.2 數(shù)字型 數(shù)字型字段盡量采用number類型。 2.3.3 日期和時(shí)間 2.3.3.1 系統(tǒng)時(shí)間 由數(shù)據(jù)庫產(chǎn)生的系統(tǒng)時(shí)間首選數(shù)據(jù)庫的日期型,如date類型。 2.3.3.2 外部時(shí)間 由數(shù)據(jù)導(dǎo)入或外部應(yīng)用程序產(chǎn)生的日期時(shí)間類型采用varchar類型,數(shù)據(jù)格式采用:yyyymmddhh24miss。 2.3.3.3 大字段 如無特別需要,防止使用大字段(blob,clob,long,text,image等)。 2.3.3.4 唯一鍵 對(duì)于數(shù)字型唯一鍵值,盡可能用系列sequence產(chǎn)生。 2.4 設(shè)計(jì) 2.4.1 范式 如無性能上的必須原因,應(yīng)該使用關(guān)系數(shù)據(jù)庫理論,到達(dá)較高的范式

20、,防止數(shù)據(jù)冗余,但是如果在數(shù)據(jù)量上與性能上無特別要求,考慮到實(shí)現(xiàn)的方便性可以有適當(dāng) 的數(shù)據(jù)冗余,但基本上要到達(dá)3nf.如非確實(shí)必要,防止一個(gè)字段中存儲(chǔ)多個(gè)標(biāo)志的做法。如11101表示5個(gè)標(biāo)志的一種取值。這往往是增加復(fù)雜度,降低性 能的地方。2.4.2 表設(shè)計(jì)  2.4.2.1 邏輯段設(shè)計(jì)原則2.4.2.1.1 tablespace每個(gè)表在創(chuàng)建時(shí)候,必須指定所在的表空間,不要采用默認(rèn)表空間以防止表建立在系統(tǒng)表空間上導(dǎo)致性能問題。對(duì)于事務(wù)比較繁忙的數(shù)據(jù)表,必須存放在該表的專用表空間中。2.4.2.1.2 pctused默認(rèn)pctused導(dǎo)致數(shù)據(jù)庫物理空間利用率非常低40%左右;對(duì)于upd

21、ate比較少或update不導(dǎo)致行增大的表,pctused可設(shè)置在6085之間;對(duì)于update能夠?qū)е滦性龃蟮谋恚瑄pdate設(shè)置在4070之間2.4.2.1.3 initrans對(duì)于需要并行查詢或者在rac數(shù)據(jù)庫中需要并行處理的表,initrans設(shè)置為2的倍數(shù),否則,不設(shè)該值。2.4.2.1.4 storage2.4.2.1.4.1 initial盡量減少表數(shù)據(jù)段的extents數(shù)量,initial的大小盡量接近數(shù)據(jù)段的大小64k,128k, ,1m,2m,4m,8m,16m ,等按2的倍數(shù)進(jìn)行圓整。例如表或分區(qū)數(shù)據(jù)段大小為28m,則initial取32m。2.4.2.1.4.2 nex

22、t 表或分區(qū)擴(kuò)展extents的大小,按上述方法進(jìn)行圓整。當(dāng)表或分區(qū)數(shù)據(jù)段無法按initial接近值進(jìn)行圓整的情況下,其大小可以按 initial+next進(jìn)行圓整。此時(shí),必須設(shè)置minextents=2。例如:表或分區(qū)數(shù)據(jù)段大小為150m,則initial=128m; next=32m,minextents=2。2.4.2.1.4.3 minextents該參數(shù)表示表創(chuàng)建時(shí)候extents的初始數(shù)量,一般取12。2.4.2.1.4.4 pctincrease表示每個(gè)擴(kuò)展extents的增長(zhǎng)率,設(shè)置pctincrease=0能夠獲得較好的存儲(chǔ)性能。2.4.2.2 特殊表設(shè)計(jì)原則2.4.2.2.

23、1 分區(qū)表 對(duì)于數(shù)據(jù)量比較大的表,根據(jù)表數(shù)據(jù)的屬性進(jìn)行分區(qū),以得到較好的性能。如果表按某些字段進(jìn)行增長(zhǎng),則采用按字段值范圍進(jìn)行范圍分區(qū);如果表按某個(gè)字段的 幾個(gè)關(guān)鍵值進(jìn)行分布,則采用列表分區(qū);對(duì)于靜態(tài)表,則采用hash分區(qū)或列表分區(qū);在范圍分區(qū)中,如果數(shù)據(jù)按某關(guān)鍵字段均衡分布,則采用子分區(qū)的復(fù)合分區(qū) 方法。2.4.2.2.2 聚蔟表如果某幾個(gè)靜態(tài)表關(guān)系比較密切,則可以采用聚蔟表的方法。2.4.2.3 完整性設(shè)計(jì)原則2.4.2.3.1 主鍵約束關(guān)聯(lián)表的父表要求有主健,主健字段或組合字段必須滿足非空屬性和唯一性要求。對(duì)于數(shù)據(jù)量比較大的父表,要求指定索引段。2.4.2.3.2 外鍵關(guān)聯(lián)對(duì)于關(guān)聯(lián)兩個(gè)表

24、的字段,一般應(yīng)該分別建立主鍵、外鍵。實(shí)際是否建立外鍵,根據(jù)對(duì)數(shù)據(jù)完整性的要求決定。為了提高性能,對(duì)于數(shù)據(jù)量比較大的標(biāo)要求對(duì)外健建立索引。對(duì)于有要求級(jí)聯(lián)刪除屬性的外鍵,必須指定on delete cascade 。2.4.2.3.3 null值對(duì)于字段能否null,應(yīng)該在sql建表腳本中明確指明,不應(yīng)使用缺省。由于null值在參加任何運(yùn)算中,結(jié)果均為null。所以在應(yīng)用程序中必須利用nvl()函數(shù)把可能為null值得字段或變量轉(zhuǎn)換為非null的默認(rèn)值。例如:nvlsale,0。2.4.2.3.4 check條件對(duì)于字段有 檢查 性約束,要求指定check規(guī)則。2.4.2.3.5 觸發(fā)器觸發(fā)器是一

25、種特殊的存儲(chǔ)過程,通過數(shù)據(jù)表的dml操作而觸發(fā)執(zhí)行,起作用是為確保數(shù)據(jù)的完整性和一致性不被破壞而創(chuàng)建,實(shí)現(xiàn)數(shù)據(jù)的完整約束。觸發(fā)器的before或after事務(wù)屬性的選擇時(shí)候,對(duì)表操作的事務(wù)屬性必須與應(yīng)用程序事務(wù)屬性保持一致,以防止死鎖發(fā)生。在大型導(dǎo)入表中,盡量防止使用觸發(fā)器。2.4.2.4 注釋表、字段等應(yīng)該有中文名稱注釋,以及需要說明的內(nèi)容。2.4.3 索引設(shè)計(jì)對(duì)于查詢中需要作為查詢條件的字段,可以考慮建立索引。最終根據(jù)性能的需要決定是否建立索引。對(duì)于復(fù)合索引,索引字段順序比較關(guān)鍵,把查詢頻率比較高的字段排在索引組合的最前面。在分區(qū)表中,盡量采用local分區(qū)索引以方便分區(qū)維護(hù)。除非時(shí)分區(qū)l

26、ocal索引,否則在創(chuàng)建索引段時(shí)候必須指定指定索引段的tablespace、storage屬性,具體參考4.4.2.1內(nèi)容。2.4.4 視圖設(shè)計(jì)視圖是虛擬的數(shù)據(jù)庫表,在使用時(shí)要遵循以下原則: 從一個(gè)或多個(gè)庫表中查詢部分?jǐn)?shù)據(jù)項(xiàng); 為簡(jiǎn)化查詢,將復(fù)雜的檢索或字查詢通過視圖實(shí)現(xiàn); 提高數(shù)據(jù)的 安全 性,只將需要查看的數(shù)據(jù)信息顯示給權(quán)限有限的人員; 視圖中如果嵌套使用視圖,級(jí)數(shù)不得超過3級(jí); 由于視圖中只能固定條件或沒有條件,所以對(duì)于數(shù)據(jù)量較大或隨時(shí)間的推移逐漸增多的庫表,不宜使用視圖;可以采用實(shí)體化視圖代替。 除特殊需要,防止類似select * from tablename 而沒有檢索條件的視圖;

27、 視圖中盡量防止出現(xiàn)數(shù)據(jù)排序的sql語句。2.4.5 包設(shè)計(jì) 存儲(chǔ)過程、函數(shù)、外部游標(biāo)必須在指定的數(shù)據(jù)包對(duì)象package中實(shí)現(xiàn)。存儲(chǔ)過程、函數(shù)的建立如同其它語言形式的編程過程,適合采用模塊化設(shè)計(jì)方法;當(dāng) 具體算法改變時(shí),只需要修改需要存儲(chǔ)過程即可,不需要修改其它語言的源程序。當(dāng)和數(shù)據(jù)庫頻繁交換數(shù)據(jù)是通過存儲(chǔ)過程可以提高運(yùn)行速度,由于只有被授權(quán)的用 戶才能執(zhí)行存儲(chǔ)過程,所以存儲(chǔ)過程有利于提高系統(tǒng)的 安全 性。 存儲(chǔ)過程、函數(shù)必須檢索數(shù)據(jù)庫表記錄或數(shù)據(jù)庫其他對(duì)象,甚至修改執(zhí)行insert、delete、update、drop、create等操作數(shù)據(jù) 庫信息。如果某項(xiàng)功能不需要和數(shù)據(jù)庫打交道,則不

28、得通過數(shù)據(jù)庫存儲(chǔ)過程或函數(shù)的方式實(shí)現(xiàn)。在函數(shù)中防止采用dml或ddl語句。在數(shù)據(jù)包采用存儲(chǔ)過程、函數(shù)重載的方法,簡(jiǎn)化數(shù)據(jù)包設(shè)計(jì),提高代碼效率。存儲(chǔ)過程、函數(shù)必須有相應(yīng)的出錯(cuò)處理功能。2.4.6 安全性設(shè)計(jì)2.4.4.6.1 管理 默認(rèn)用戶在生產(chǎn)環(huán)境中,必須嚴(yán)格管理sys和system用戶,必須修改其默認(rèn)密碼,禁止用該用戶建立數(shù)據(jù)庫應(yīng)用對(duì)象。刪除或鎖定數(shù)據(jù)庫測(cè)試用戶scott 。2.4.6.2 數(shù)據(jù)庫級(jí)用戶權(quán)限設(shè)計(jì)必須按照應(yīng)用需求,設(shè)計(jì)不同的用戶訪問權(quán)限。包括應(yīng)用系統(tǒng)管理用戶,普通用戶等,按照業(yè)務(wù)需求建立不同的應(yīng)用角色。用戶訪問另外的用戶對(duì)象時(shí),應(yīng)該通過創(chuàng)建同義詞對(duì)象synonym進(jìn)行訪問。2.

29、4.6.3 角色與權(quán)限確定每個(gè)角色對(duì)數(shù)據(jù)庫表的操作權(quán)限,如創(chuàng)建、檢索、更新、刪除等。每個(gè)角色擁有剛好能夠完成任務(wù)的權(quán)限,不多也不少。在應(yīng)用時(shí)再為用戶分配角色,則每個(gè)用戶的權(quán)限等于他所兼角色的權(quán)限之和。2.4.6.4 應(yīng)用級(jí)用戶設(shè)計(jì)應(yīng)用級(jí)的用戶帳號(hào)密碼不能與數(shù)據(jù)庫相同,防止用戶直接操作數(shù)據(jù)庫。用戶只能用帳號(hào)登陸到應(yīng)用軟件,通過應(yīng)用軟件訪問數(shù)據(jù)庫,而沒有其它途徑操作數(shù)據(jù)庫。2.4.6.5 用戶密碼管理用戶帳號(hào)的密碼必須進(jìn)行加密處理,確保在任何地方的查詢都不會(huì)出現(xiàn)密碼的明文。2.5 sql編寫2.5.1 字符類型數(shù)據(jù)sql中的字符類型數(shù)據(jù)應(yīng)該統(tǒng)一使用單引號(hào)。特別對(duì)純數(shù)字的字串,必須用單引號(hào),否則會(huì)導(dǎo)

30、致內(nèi)部轉(zhuǎn)換而引起性能問題或索引失效問題。利用trim(),lower()等函數(shù)格式化匹配條件。2.5.2 復(fù)雜sql對(duì)于非常復(fù)雜的sql(特別是有多層嵌套,帶子句或相關(guān)查詢的),應(yīng)該先考慮是否設(shè)計(jì)不當(dāng)引起的。對(duì)于一些復(fù)雜sql可以考慮使用程序?qū)崿F(xiàn)。user_tab_comments 數(shù)據(jù)字典comment on 可加注解2.5.3 高效性3.6.2 排序的優(yōu)化 9i為專用服務(wù)器時(shí)系統(tǒng)變量workarea_size_policy 設(shè)定為auto, statistics_level設(shè)定為 typical 可獲取v$pga_target_advice中的優(yōu)化建議。參數(shù)pga_aggregate_target值為所有連接用戶可用排序內(nèi)存。 9i為共享服務(wù)器時(shí)workarea_size_policy設(shè)定為me

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論