版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、設(shè)計規(guī)范文檔文檔ID:數(shù)據(jù)庫設(shè)計規(guī)范版本號1.0修訂歷史記錄日期版本說明作者目錄修訂歷史記錄2目錄3數(shù)據(jù)庫設(shè)計指南51. 概述51.1 目的51.2 范圍52. 設(shè)計標準52.1 表52.2 字段設(shè)計原則52.3 域72.4 鍵設(shè)計原則82.5 索引設(shè)計原則92.5.1 什么是索引92.5.2 使用索引的目的92.5.3 何時使用索引92.5.4 索引的種類92.5.5 管理索引的準則102.5.6 怎樣建立最佳索引112.5.7 索引的選擇性122.5.8 確定索引的實際碎片142.5.9 重建索引162.6 數(shù)據(jù)完整性212.6.1 實體完整性212.6.2 域完整性212.6.3 引用完
2、整性212.6.4 用戶定義完整性212.7 關(guān)系設(shè)計原則212.7.1 一對一關(guān)系212.7.2 一對多關(guān)系222.7.3 多對多關(guān)系222.8 創(chuàng)建數(shù)據(jù)字典(由于目前普遍采用PD,所以考慮刪除本節(jié))223. 命名標準223.1 表223.2 視圖233.3 域(Domains)233.4 字段233.5 索引233.6 存儲過程233.7 觸發(fā)器243.8 主鍵命名243.9 業(yè)務(wù)規(guī)則243.10 約束24數(shù)據(jù)庫設(shè)計指南1. 概述1.1 目的本文檔用于指導(dǎo)系統(tǒng)設(shè)計員進行數(shù)據(jù)庫設(shè)計,規(guī)范數(shù)據(jù)庫設(shè)計文檔,提出工件的評審標準。1.2 范圍適用于技術(shù)中心所有項目/產(chǎn)品的數(shù)據(jù)庫設(shè)計。2. 設(shè)計標準2
3、.1 表為在性能、擴展性和數(shù)據(jù)完整性方面達到了最好平衡,表的設(shè)計應(yīng)該滿足第三范式(3NF),即: · 表內(nèi)的每一個值都只能被表達一次。· 表內(nèi)的每一行都應(yīng)該被唯一的標識(有唯一鍵)。· 表內(nèi)不應(yīng)該存儲傳遞依賴于主鍵的非鍵信息。實際使用中考慮到編碼效率、執(zhí)行效率等問題,往往需要對表的設(shè)計進行反規(guī)范化,通常是對表進行合并,以下是幾種常見的合并情況:1. 基礎(chǔ)代碼表的合并。當基礎(chǔ)代碼表的數(shù)據(jù)行數(shù)不多時,可考慮把多個表進行合并,使用標記項區(qū)分數(shù)據(jù),并對標記項進行聚集索引,在物理上把數(shù)據(jù)放在一起,可以提高執(zhí)行效率,例如:職稱、文化程度、職務(wù)等就可以合并在一起。2. 一對一表
4、的合并。增加數(shù)據(jù)冗余,可以提高執(zhí)行效率。數(shù)據(jù)庫查詢的瓶頸是多表聯(lián)合查詢,如果數(shù)目增大,運行性能就顯著下降。把所以列放在一個表,只要有適當?shù)淖侄嗡饕?,其速度就很快。當然表格的嚴謹性則下降。3. 普遍和個別(類似于面向?qū)ο笾械母割惡妥宇悾┑暮喜?,如采購合同、銷售合同可以合并在一起放到基本的合同表中,這樣可以大大提高數(shù)據(jù)處理性能。不把數(shù)據(jù)表的非標準化當作當然的設(shè)計理念。而具體的操作不過是一種派生。所以如果表出了問題重新產(chǎn)生非標準化的表是完全可能的。2.2 字段設(shè)計原則字段應(yīng)該保持全局一致性,即無論一個字段在哪個表出現(xiàn),其名稱、類型等都應(yīng)該保持不變,如定單表Order中有一個OrderID,那么定單細
5、目表OrderItem中在引用時應(yīng)該還命名為OrderID并保持類型不變字段的數(shù)據(jù)類型應(yīng)使用標準(抽象)數(shù)據(jù)類型來定義,以使其含義不受目標數(shù)據(jù)庫數(shù)據(jù)類型差異的影響,便于溝通理解,盡量使用域(Domains)來定義字段的類型,以便于保持一致性和提高可維護性。在選擇數(shù)據(jù)類型時應(yīng)盡量使用標準數(shù)據(jù)類型,而不使用個別數(shù)據(jù)庫系統(tǒng)提供的個性化類型,以保持數(shù)據(jù)庫定義具有良好的可移植性??紤]到目前物理數(shù)據(jù)模型的設(shè)計都采用PD,為了保持數(shù)據(jù)類型命名的獨立性,在PD環(huán)境下定義了一個抽象的目標數(shù)據(jù)庫AbstractDB,并定義了標準(抽象)的數(shù)據(jù)類型,物理數(shù)據(jù)模型應(yīng)在AbstractDB下進行設(shè)計,然后再生成實際的目
6、標數(shù)據(jù)庫(Sql server、Oracle等)的創(chuàng)建腳本。標準數(shù)據(jù)類型定義表2-1:表2-1 標準數(shù)據(jù)類型定義表類型說明使用建議Char(n)固定長度的非 Unicode 字符數(shù)據(jù),在MS Sql Server中,最大長度為 8,000 個字符。當字段長度差異不是很明顯時使用,如郵政編碼、姓名等varchar(n)類似Char(n),但長度可變當字段長度較大(>50),表的記錄數(shù)很多,且長短差異較大時,由于可以顯著降低磁盤空間占用,所以推薦使用,如備注,多數(shù)情況少于200字節(jié),個別情況下可能會達到1000字節(jié)。int1616位帶符號整數(shù)從 -215 (-32,768) 到 215 -
7、1 (32,767) 的整數(shù)數(shù)據(jù)。int3232位帶符號整數(shù)從 -231 (-2,147,483,648) 到 231 - 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。某些情況可作為主鍵Decimal十進制數(shù),默認長度最大位數(shù)38位,有效值從 -1038 +1 到 1038 - 1。精度可調(diào),當對準確度要求較高時使用,如金額、單價等財務(wù)數(shù)據(jù)。decimal(n)總長度為n的十進制數(shù)decimal(p,s)總長度為p,小數(shù)位數(shù)為s的十進制數(shù)Single單精度浮點數(shù),長度4字節(jié)有效數(shù)字7位,從 -3.40E + 38 到 3.40E + 38 之間的浮點數(shù)字。存儲大小為 4 字節(jié)。
8、在 SQL Server 中,其他見doubleDouble雙精度浮點數(shù),長度8字節(jié)15位有效數(shù)字,從 - 1.79E + 308 到 1.79E + 308 之間的浮點數(shù)字。當對準確度要求不是很高時可以使用,如工程計算、圖形計算等Datetime日期時間型,長度8字節(jié)從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數(shù)據(jù),精確度為百分之三秒(等于 3.33 毫秒或 0.00333 秒)。Timestamp時間戳,長度為8字節(jié)的二進制數(shù)數(shù)據(jù)庫范圍的唯一數(shù)字,一個表只能有一個 timestamp 列,每次更新行時自動對該類型字段進行更新,所以在多用戶環(huán)境下該類型的字
9、段可以用于檢查更新沖突。Boolean布爾型,不同數(shù)據(jù)庫存儲策略不同,在MS Sql Server中會將每8個布爾型字段保存到一個字節(jié)中,每個字段占1個Bit。存儲真/假,是/否等邏輯值,不能對該類型的字段使用索引long binary長二進制字符串,可變長度二進制數(shù)據(jù),介于 0 與 231-1 (2,147,483,647) 字節(jié)之間??杀4鎴D象、視頻、音頻、OLE對象等大的二進制數(shù)據(jù)long text長文本字符串,可變長度非 Unicode 數(shù)據(jù)的最大長度為 231-1 (2,147,483,647)個字節(jié)??杀4娲蟮募兾谋緮?shù)據(jù)。表2-2 數(shù)據(jù)類型對照表標準類型MS Sql 7/ 2000
10、Oracle 8IBM DB 2 7.0Access 2000Char(n)Char(8000)Char(2000)Char(255)Text(255)varchar(n)Varchar(8000)Varchar(4000)Varchar(4000)longtextint16SmallintSmallintsmallintSmallintint32IntIntegerintegerIntegerDecimaldecimal numericNumberDecimalnumericdecimal(n)Decimal numericNumber(m)Decimal(n)Numericdecimal(
11、p,s)decimal numericNumber(m,n)Decimal(p,s)NumericSingleRealFloatRealSingleDoubleFloatFloatDouble precisionDoubleDatetimeDatetimeDateDateDatetimeTimestampTimestampTimestampTimestampBooleanBitSmallintSmallintYesnobinary(n)binary(8000)binaryvarbinary(n)varbinary(8000)Row(2000)binarylong binaryImageLong
12、Long rowLONG VARGRAPHICLONGBINARY GENERALlong textTextLong rowLONG VARCHARlongtext2.3 域域可以幫助識別模型中信息的類型,它定義了列的一組有效值,使用域來定義列可以使得不同表中列的數(shù)據(jù)特征更容易標準化及便于修改。域分為標準域和方案域兩種,標準域由域名前加“_”構(gòu)成,各方案項目通用,方案域由各方案項目根據(jù)實際情況自行定義。標準域的定義見下表:(可擴展)名稱編碼說明類型長度精度addressAddress聯(lián)系地址varchar(100)100eMailEMail電子郵件varchar(30)30Note200not
13、e200備注varchar(200)200PathNamepathName路徑名varchar(250)250Percentpercent百分比decimal(10,2)102moneyMoney金額decimal(18,2)182pricePrice單價decimal(12,2)122SexSex性別char(1)1telephoneTelephone電話號碼char(16)16unitOfMeasureunitOfMeasure計量單位char(16)16wwwwww網(wǎng)址varchar(30)302.4 鍵設(shè)計原則鍵(主鍵)標注字段的唯一并保證表之間(外鍵)的完整性,以下方法有助于進行鍵的
14、設(shè)計:1. 避免使用復(fù)合鍵作為主鍵;2. 為關(guān)聯(lián)字段創(chuàng)建外鍵;3. 所有的鍵都必須唯一;4. 一個外鍵總是關(guān)聯(lián)唯一的鍵字段;5. 避免選擇用戶可編輯的字段作為鍵,因為一旦輸入錯誤,唯一能做的就是刪除整個記錄然后從頭開始;6. 使用流水號表。主鍵定義方案:(供討論)在綜合考慮性能、并發(fā)性和分布性等多種因素后,確定公司數(shù)據(jù)庫中的主鍵統(tǒng)一使用CHAR(16)型的單一字段保存的10進制字符串,其內(nèi)容分為兩部分,前6個字節(jié)為分段號,后10個字節(jié)為段內(nèi)編號,分段號全局唯一,段內(nèi)編號本地唯一,寬度不足時前面用0補齊(如:56789)。主鍵生成算法 1:根據(jù)公司現(xiàn)行狀況Int 類型,采用序列,長度為11位;V
15、archar類型,采用java生成,長度為32位;主鍵生成算法 2:目的:返回指定表的最大可用主鍵。輸入:表名輸出:新的主鍵strMaxkey步驟:1、 取表的最大主鍵strMaxKey(可使用序列或流水號表)。2、 若strMaxKey非空值或空字符串則繼續(xù),否則轉(zhuǎn)93、 取strMaxKey的前6位送到strSectID4、 取strMaxKey的后10位送到strOffset5、 將strOffset由字符型變?yōu)殚L整型并加1送到lngOffset6、 將lngOffset由長整型轉(zhuǎn)換為寬度為10字節(jié)的字符串,前面用0補齊。7、 將strSectID和strOffset進行字符串連接操作后
16、送到strMaxKey中8、 轉(zhuǎn)119、 取分段號strSectid,strSectid由組織統(tǒng)一分配,組織內(nèi)的每個數(shù)據(jù)中心唯一。10、 將strSectID和“0000000001”進行字符串連接操作后送到strMaxKey中11、 算法結(jié)束 2.5 索引設(shè)計原則2.5.1 什么是索引索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數(shù)據(jù);Oracle存儲索引的數(shù)據(jù)結(jié)構(gòu)是B*樹,位圖索引也是如此,只不過是葉子節(jié)點不同B*數(shù)索引;索引由根節(jié)點、分支節(jié)點和葉子節(jié)點組成,上級索引塊包含下級索引塊的索引數(shù)據(jù),葉節(jié)點包含索引數(shù)據(jù)和確定行實際位置的rowid。2.5.2 使用索引的目的加快查
17、詢速度減少I/O操作消除磁盤排序2.5.3 何時使用索引查詢返回的記錄數(shù)排序表<40%非排序表 <7% 表的碎片較多(頻繁增加、刪除)2.5.4 索引的種類非唯一索引(最常用)唯一索引位圖索引局部有前綴分區(qū)索引局部無前綴分區(qū)索引全局有前綴分區(qū)索引散列分區(qū)索引基于函數(shù)的索引2.5.5 管理索引的準則在表中插入數(shù)據(jù)后創(chuàng)建索引。在用SQL*Loader或import工具插入或裝載數(shù)據(jù)后,建立索引比較有效;索引正確的表和列。經(jīng)常檢索排序大表中40%或非排序表7%的行,建議建索引;。為了改善多表關(guān)聯(lián),索引列用于聯(lián)結(jié);。列中的值相對比較唯一;。取值范圍(大:B*樹索引,?。何粓D索引);。Dat
18、e型列一般適合基于函數(shù)的索引;。列中有許多空值,不適合建立索引為性能而安排索引列。經(jīng)常一起使用多個字段檢索記錄,組合索引比單索引更有效;。把最常用的列放在最前面,例:dx_groupid_serv_id(groupid,serv_id),在where條件中使用groupid或groupid,serv_id,查詢將使用索引,若僅用到serv_id字段,則索引無效;。合并/拆分不必要的索引。限制每個表索引的數(shù)量。一個表可以有幾百個索引(你會這樣做嗎?),但是對于頻繁插入和更新表,索引越多系統(tǒng)CPU,I/O負擔就越重;。建議每張表不超過5個索引。刪除不再需要的索引。索引無效,集中表現(xiàn)在該使用基于函數(shù)
19、的索引或位圖索引,而使用了B*樹索引;。應(yīng)用中的查詢不使用索引;。重建索引之前必須先刪除索引,若用alter index rebuild重建索引,則不必刪除索引。索引數(shù)據(jù)塊空間使用。創(chuàng)建索引時指定表空間,特別是在建立主鍵時,應(yīng)明確指定表空間;。合理設(shè)定pctfress,注意:不能給索引指定pctused;。估計索引的大小和合理地設(shè)置存儲參數(shù),默認為表空間大小,或initial與next設(shè)置成一樣大。考慮并行創(chuàng)建索引。對大表可以采用并行創(chuàng)建索引,在并行創(chuàng)建索引時,存儲參數(shù)被每個查詢服務(wù)器進程分別使用,例如:initial為1M,并行度為8,則創(chuàng)建索引期間至少要消耗8M空間;考慮用nologgin
20、g創(chuàng)建索引。對大表創(chuàng)建索引可以使用nologging來減少重做日志;。節(jié)省重做日志文件的空間;??s短創(chuàng)建索引的時間;。改善了并行創(chuàng)建大索引時的性能。2.5.6 索引的選擇性索引的選擇性是指索引列中不同值的數(shù)目與表中記錄數(shù)的比。如果一個表中有2000條記錄,表索引列有1980個不同的值,那么這個索引的選擇性就是1980/2000=0.99。一個索引的選擇性越接近于1,這個索引的效率就越高。如果是使用基于cost的最優(yōu)化,優(yōu)化器不應(yīng)該使用選擇性不好的索引。如果是使用基于rule的最優(yōu)化,優(yōu)化器在確定執(zhí)行路徑時不會考慮索引的選擇性(除非是唯一性索引),并且不得不手工優(yōu)化查詢以避免使用非選擇性的索引。
21、確定索引的選擇性,可以有兩種方法:手工測量和自動測量。(1)手工測量索引的選擇性如果要根據(jù)一個表的兩列創(chuàng)建兩列并置索引,可以用以下方法測量索引的選擇性:列的選擇性=不同值的數(shù)目/行的總數(shù) /* 越接近1越好 */select count(distinct 第一列|'%'|第二列)/count(*)from 表名/ 如果我們知道其中一列索引的選擇性(例如其中一列是主鍵),那么我們就可以知道另一列索引的選擇性。手工方法的優(yōu)點是在創(chuàng)建索引前就能評估索引的選擇性。(2)自動測量索引的選擇性如果分析一個表,也會自動分析所有表的索引。第一,為了確定一個表的確定性,就要分析表。analyze
22、 table 表名 compute statistics/ 第二,確定索引里不同關(guān)鍵字的數(shù)目:select distinct_keysfrom user_indexeswhere table_name='表名'and index_name='索引名'/ 第三,確定表中行的總數(shù):select num_rowsfrom user_tableswhere table_name='表名'/ 第四,索引的選擇性=索引里不同關(guān)鍵字的數(shù)目/表中行的總數(shù):select i.distinct_keys/t.num_rowsfromuser_indexes i,us
23、er_tables twhere i.table_name='表名'and i.index_name='索引名'and i.table_name=t.table_name/ 第五,可以查詢USER_TAB_COLUMNS以了解每個列的選擇性。表中所有行在該列的不同值的數(shù)目:selectcolumn_name,num_distinctfrom user_tab_columnswhere table_name='表名'/ 列的選擇性=NUM_DISTINCT/表中所有行的總數(shù),查詢USER_TAB_COLUMNS有助測量每個列的選擇性,但它并不能精確
24、地測量列的并置組合的選擇性。要想測量一組列的選擇性,需要采用手工方法或者根據(jù)這組列創(chuàng)建一個索引并重新分析表。2.5.7 確定索引的實際碎片隨著數(shù)據(jù)庫的使用,不可避免地對基本表進行插入,更新和刪除,這樣導(dǎo)致葉子行在索引中被刪除,使該索引產(chǎn)生碎片。插入刪除越頻繁的表,索引碎片的程度也越高。碎片的產(chǎn)生使訪問和使用該索引的I/O成本增加。碎片較高的索引必須重建以保持最佳性能。(1)利用驗證索引命令對索引進行驗證。這將有價值的索引信息填入index_stats表。validate index 用戶名.索引名/ (2)查詢index_stats表以確定索引中刪除的、未填滿的葉子行的百分比。selectna
25、me,del_lf_rows,lf_rows,round(del_lf_rows/(lf_rows+0.0000000001)*100) "Frag Percent"from index_stats/ (3)如果索引的葉子行的碎片超過10%,考慮對索引進行重建。alter index 用戶名.索引名 rebuildtablespace 表空間名storage(initial 初始值 next 擴展值)nologging/ (4)如果出于空間或其他考慮,不能重建索引,可以整理索引。alter index用戶名.索引名 coalesce/ (5)清除分析信息analyze in
26、dex 用戶名.索引名delete statistics/ 2.5.8 怎樣建立最佳索引明確地創(chuàng)建索引create index index_name on table_name(field_name)tablespace tablespace_namepctfree 5initrans 2maxtrans 255storage(minextents 1maxextents 16382pctincrease 0);創(chuàng)建基于函數(shù)的索引。常用與UPPER、LOWER、TO_CHAR(date)等函數(shù)分類上,例:create index idx_func on emp (UPPER(ename) ta
27、blespace tablespace_name;創(chuàng)建位圖索引。對基數(shù)較小,且基數(shù)相對穩(wěn)定的列建立索引時,首先應(yīng)該考慮位圖索引,例:create bitmap index idx_bitm on class (classno) tablespace tablespace_name;明確地創(chuàng)建唯一索引??梢杂胏reate unique index語句來創(chuàng)建唯一索引,例:create unique index dept_unique_idx on dept(dept_no) tablespace idx_1;創(chuàng)建與約束相關(guān)的索引??梢杂胾sing index字句,為與unique和primary
28、key約束相關(guān)的索引,例如:alter table table_nameadd constraint PK_primary_keyname primary key (field_name)using index tablespace tablespace_name;如何創(chuàng)建局部分區(qū)索引?;A(chǔ)表必須是分區(qū)表;。分區(qū)數(shù)量與基礎(chǔ)表相同;。每個索引分區(qū)的子分區(qū)數(shù)量與相應(yīng)的基礎(chǔ)表分區(qū)相同;?;A(chǔ)表的子分區(qū)中的行的索引項,被存儲在該索引的相應(yīng)的子分區(qū)中,例如:Create Index TG_CDR04_SERV_ID_IDX On TG_CDR04(SERV_ID)Pctfree 5Tablespace
29、TBS_AK01_IDXStorage (MaxExtents 32768PctIncrease 0FreeLists 1FreeList Groups 1)local /如何創(chuàng)建范圍分區(qū)的全局索引?;A(chǔ)表可以是全局表和分區(qū)表。create index idx_start_date on tg_cdr01(start_date)global partition by range(start_date)(partition p01_idx vlaues less than (0106)partition p01_idx vlaues less than (0111)partition p01_i
30、dx vlaues less than (0401 )/2.5.9 重建索引(1)檢查需要重建的索引。根據(jù)以下幾方面進行檢查,確定需要重建的索引。第一,查看SYSTEM表空間中的用戶索引。為了避免數(shù)據(jù)字典的碎片出現(xiàn),要盡量避免在SYSTEM表空間出現(xiàn)用戶的表和索引。select index_name from dba_indexes where tablespace_name='SYSTEM' and owner not in ('SYS','SYSTEM')/ 第二,確保用戶的表和索引不在同一表空間內(nèi)。表和索引對象的第一個規(guī)則是把表和索引分離。
31、把表和相應(yīng)的索引建立在不同的表空間中,最好在不同的磁盤上。這樣可以避免在數(shù)據(jù)管理和查詢時出現(xiàn)的許多I/O沖突。set linesize 120col "OWNER" format a20col "INDEX" format a30col "TABLE" format a30col "TABLESPACE" format a30selecti.owner "OWNER", i.index_name "INDEX",t.table_name "TABLE",i
32、.tablespace_name "TABLESPACE"from dba_indexes i,dba_tables twhere i.owner=t.ownerand i.table_name=t.table_nameand i.tablespace_name=t.tablespace_nameand i.owner not in ('SYS','SYSTEM')/ 第三,查看數(shù)據(jù)表空間里有哪些索引用戶的默認表空間應(yīng)該不是SYSTEM表空間,而是數(shù)據(jù)表空間。在建立索引時,如果不指定相應(yīng)的索引表空間名,那么,該索引就會建立在數(shù)據(jù)表空間中。這是
33、程序員經(jīng)常忽略的一個問題。應(yīng)該在建索引時,明確的指明相應(yīng)的索引表空間。col segment_name format a30select owner,segment_name,sum(bytes) from dba_segmentswhere tablespace_name='數(shù)據(jù)表空間名'and segment_type='INDEX'group by owner,segment_name/ 第四,查看哪個索引被擴展了超過10次隨著表記錄的增加,相應(yīng)的索引也要增加。如果一個索引的next extent值設(shè)置不合理(太?。?,索引段的擴展變得很頻繁。索引的exte
34、nt太多,檢索時的速度和效率就會降低。set linesize 100col owner format a10col segment_name format a30col tablespace_name format a30selectcount(*),owner,segment_name,tablespace_namefrom dba_extentswhere segment_type='INDEX'and owner not in ('SYS','SYSTEM')group by owner,segment_name,tablespace_n
35、amehaving count(*) >10order by count(*) desc/(2)找出需要重建的索引后,需要確定索引的大小,以設(shè)置合理的索引存儲參數(shù)。set linesize 120col "INDEX" format a30col "TABLESPACE" format a20selectowner "OWNER",segment_name "INDEX",tablespace_name "TABLESPACE",bytes "BYTES/COUNT",
36、sum(bytes) "TOTAL BYTES",round(sum(bytes)/(1024*1024),0) "TOTAL M",count(bytes) "TOTAL COUNT"from dba_extentswhere segment_type='INDEX' and segment_name in ('索引名1','索引名2',.)group by owner,segment_name,segment_type,tablespace_name,bytesorder by ow
37、ner,segment_name/ (3)確定索引表空間還有足夠的剩余空間。確定要把索引重建到哪個索引表空間中。要保證相應(yīng)的索引表空間有足夠的剩余空間。select round(bytes/(1024*1024),2) free(M)from sm$ts_freewhere tablespace_name='表空間名'/ (4)重建索引。重建索引時要注意以下幾點:a.如果不指定tablespace名,索引將建在用戶的默認表空間。b.如果不指定nologging,將會寫日志,導(dǎo)致速度變慢。由于索引的重建沒有恢復(fù)的必要,所以,可以不寫日志。c.如果出現(xiàn)資源忙,表明有進程正在使用該索
38、引,等待一會再提交。alter index 索引名rebuildtablespace 索引表空間名storage(initial 初始值 next 擴展值)nologging/ (5)檢查索引。對重建好的索引進行檢查。select *from dba_extentswhere segment_name='索引名'/ (6)根據(jù)索引進行查詢,檢查索引是否有效使用相應(yīng)的where條件進行查詢,確保使用該索引??纯词褂盟饕蟮男Ч绾巍elect *from dba_ind_columnswhere index_name like '表名%'/ 然后,根據(jù)相應(yīng)的索引
39、項進行查詢。select *from '表名%'where ./ (6)找出有碎片的表空間,并收集其碎片。重建索引后,原有的索引被刪除,這樣會造成表空間的碎片。select 'alter tablespace '|tablespace_name|' coalesce;'from dba_free_space_coalescedwhere percent_blocks_coalesced!=100/ 整理表空間的碎片。alter tablespace 表空間名 coalesce/ 要刪除索引的原因。不再需要的索引;。索引沒有針對其相關(guān)的表所發(fā)布的查
40、詢提供所期望的性能改善;。應(yīng)用沒有用該索引來查詢數(shù)據(jù);。該索引無效,必須在重建之前刪除該索引;。該索引已經(jīng)變的太碎了,必須在重建之前刪除該索引;。語句:drop index idx_name;drop index idx_name drop partition partition_name;建立索引的代價基礎(chǔ)表維護時,系統(tǒng)要同時維護索引,不合理的索引將嚴重影響系統(tǒng)資源,主要表現(xiàn)在CPU和I/O上;插入、更新、刪除數(shù)據(jù)產(chǎn)生大量db read鎖等待;2.6 數(shù)據(jù)完整性數(shù)據(jù)完整性有四種類型:實體完整性、域完整性、引用完整性和用戶定義完整性等幾種。大型數(shù)據(jù)庫一般都提供豐富的約束機制,以保證數(shù)據(jù)的完整性
41、,通常采用的有鍵、規(guī)則、約束和觸發(fā)器等幾種。2.6.1 實體完整性實體完整性將行定義為特定表的唯一實體。實體完整性強制表的標識符列或主鍵的完整性(通過索引、UNIQUE 約束、PRIMARY KEY 約束或 IDENTITY 屬性)。2.6.2 域完整性域完整性是指給定列的輸入有效性。強制域有效性的方法有:限制類型(通過數(shù)據(jù)類型)、格式(通過 CHECK 約束和規(guī)則)或可能值的范圍(通過 FOREIGN KEY 約束、CHECK 約束、DEFAULT 定義、NOT NULL 定義和規(guī)則)。2.6.3 引用完整性在輸入或刪除記錄時,引用完整性保持表之間已定義的關(guān)系。引用完整性基于外鍵與主鍵之間或
42、外鍵與唯一鍵之間的關(guān)系(通過 FOREIGN KEY 和 CHECK 約束)。引用完整性確保鍵值在所有表中一致。這樣的一致性要求不能引用不存在的值,如果鍵值更改了,那么在整個數(shù)據(jù)庫中,對該鍵值的所有引用要進行一致的更改。如果定義了強制引用完整性時,則禁止用戶進行下列操作:· 當主表中沒有關(guān)聯(lián)的記錄時,將記錄添加到相關(guān)表中。· 更改主表中的值并導(dǎo)致相關(guān)表中的記錄孤立。· 從主表中刪除記錄,但仍存在與該記錄匹配的相關(guān)記錄。 2.6.4 用戶定義完整性用戶定義完整性使您得以定義不屬于其它任何完整性分類的特定業(yè)務(wù)規(guī)則。所有的完整性類型都支持用戶定義完整性(包括CREATE
43、 TABLE 中的所有列級和表級約束、存儲過程和觸發(fā)器)。2.7 關(guān)系設(shè)計原則在關(guān)系數(shù)據(jù)庫中,關(guān)系能防止冗余的數(shù)據(jù)。關(guān)系是通過匹配鍵列中的數(shù)據(jù)而工作的,而鍵列通常是兩個表中具有相同名稱的列。在大多數(shù)情況下,關(guān)系將一個表中為每個行提供唯一標識符的主鍵與另一個表中外鍵內(nèi)的項相匹配。表與表之間存在三種類型的關(guān)系,即一對一關(guān)系、一對多關(guān)系和多對多關(guān)系。 2.7.1 一對一關(guān)系在一對一關(guān)系中,表 A 中的一行最多只能與表 B 中的一行相匹配,反之亦然。如果兩個相關(guān)列都是主鍵或具有唯一約束,則創(chuàng)建的是一對一關(guān)系。存在一對一關(guān)系時通常會將列保存在同一個表中,但出于以下目的,可以將列保存在一個以上的表中:分割一個含有許多列的表。出于安全考慮而隔離表的某一部分。存儲可以很容易刪除的臨時數(shù)據(jù),只需刪除表即可刪除這
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)廚房設(shè)備購銷協(xié)議2024版B版
- 2024版河南省事業(yè)編制人員勞動協(xié)議樣式版B版
- 二零二五年度大巴車租賃與城市慶典活動策劃合同3篇
- 二零二五年度酒吧股份投資及風(fēng)險控制合同3篇
- 二零二五年度科技園區(qū)場地租賃詳細協(xié)議2篇
- 2024版短期勞務(wù)合同范例
- 濰坊護理職業(yè)學(xué)院《材料分析測試與表征》2023-2024學(xué)年第一學(xué)期期末試卷
- 太原學(xué)院《橋梁工程(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年食堂管理員與廚師合同3篇
- 二零二五年建筑工程施工企業(yè)工程結(jié)算與審計合同2篇
- 上海某建筑基礎(chǔ)及上部結(jié)構(gòu)加固工程施工方案磚木結(jié)構(gòu) 磚混結(jié)構(gòu)
- 精神病醫(yī)院財務(wù)后勤總務(wù)管理制度
- 停車場施工施工組織設(shè)計方案
- GB/T 37238-2018篡改(污損)文件鑒定技術(shù)規(guī)范
- 普通高中地理課程標準簡介(湘教版)
- 河道治理工程監(jiān)理通知單、回復(fù)單范本
- 超分子化學(xué)簡介課件
- 高二下學(xué)期英語閱讀提升練習(xí)(一)
- 易制爆化學(xué)品合法用途說明
- 【PPT】壓力性損傷預(yù)防敷料選擇和剪裁技巧
- 大氣喜慶迎新元旦晚會PPT背景
評論
0/150
提交評論