Oracle管理規(guī)則與完全關(guān)系型
數(shù)據(jù)庫(kù)管理系統(tǒng)(DatabaseManagementSystem,DBMS)就是管理一個(gè)數(shù)據(jù)庫(kù)的軟件,它充當(dāng)所有數(shù)據(jù)的知識(shí)庫(kù),并對(duì)它的存儲(chǔ)、安全、一致性、并發(fā)操作、恢復(fù)和訪問負(fù)責(zé)。DBMS有一個(gè)數(shù)據(jù)詞典(有時(shí)被稱為系統(tǒng)目錄),其中貯存著它擁有的每個(gè)事物的數(shù)據(jù),例如名字、結(jié)構(gòu)、位置和類型,這種關(guān)于數(shù)據(jù)的數(shù)據(jù)也被稱為元數(shù)據(jù)(metadata)。在一條數(shù)據(jù)的生存周期里(從它的創(chuàng)建到刪除),這條數(shù)據(jù)的邏輯和物理信息都被記錄在數(shù)據(jù)詞典中。數(shù)據(jù)庫(kù)系統(tǒng)管理員(DatabaseAdministrator,DBA)應(yīng)該熟悉DBMS的數(shù)據(jù)詞典;在數(shù)據(jù)庫(kù)的整個(gè)生命周期內(nèi),數(shù)據(jù)詞典為他或她服務(wù)。
DBMS應(yīng)該遵循Codd提出的十二條法則,才能被分類到完全關(guān)系型:
1)信息法則。信息表現(xiàn)為貯存在單元中的數(shù)據(jù),正如前面所討論過的,將VIN作為一個(gè)單個(gè)的列使用,違反了這條管理Oracle管理規(guī)則。
2)授權(quán)存取法則。每一個(gè)數(shù)據(jù)項(xiàng)必須通過一個(gè)“表名+行主鍵+列名”的組合形式訪問。例如,如果你能用數(shù)組或指針訪問一個(gè)列,就違反這條管理Oracle管理規(guī)則。
3)必須以一致的方式使用空值。如果由于缺少數(shù)字值,空值(Null)被當(dāng)作0來處理,或者由于缺少字符值而被當(dāng)作一個(gè)空格處理,那么它就違反了這條管理Oracle管理規(guī)則??罩祪H僅是指缺少數(shù)據(jù)而且沒有任何數(shù)值。如果缺少的數(shù)據(jù)需要值,軟件提供商通常提供使用缺省值的能力滿足這一目的。
4)一個(gè)活躍的、在線數(shù)據(jù)字典應(yīng)作為關(guān)系型表被存儲(chǔ),并且該字典應(yīng)該可以通過常規(guī)的數(shù)據(jù)存取語(yǔ)言訪問。如果數(shù)據(jù)字典的任何部分貯存在操作系統(tǒng)文件里,就違反了這條管理Oracle管理規(guī)則。
5)除了可能的低級(jí)存取例程外,數(shù)據(jù)存取語(yǔ)言必須提供所有的存取方式,并且是存取的僅有方式。如果你能通過一個(gè)實(shí)用程序而不是一個(gè)SQL接口來存取支持一個(gè)表的文件,就有可能違反了本管理Oracle管理規(guī)則。參見管理Oracle管理規(guī)則12。
6)所有能被更新的視圖應(yīng)當(dāng)是可更新的。例如,如果你能將三個(gè)表連結(jié)起來,作為一個(gè)視圖的基礎(chǔ),但卻不能更新這個(gè)視圖,則違反本管理Oracle管理規(guī)則。
7)必須有集合級(jí)的插入、更新和刪除。目前,大多數(shù)RDBMS提供商都在某種程度上提供了這種能力。
8)物理數(shù)據(jù)的獨(dú)立性。應(yīng)用不能依賴于物理結(jié)構(gòu),如果一個(gè)支持某表的文件從一張盤移動(dòng)到其他盤上或重新命名,不應(yīng)該對(duì)應(yīng)用產(chǎn)生影響。
9)邏輯數(shù)據(jù)的獨(dú)立性。應(yīng)用不應(yīng)依賴于邏輯結(jié)構(gòu)。如果一個(gè)表必須被分成兩個(gè)部分,那么應(yīng)該提供一個(gè)視圖,以把兩段連接在一起,以便不會(huì)對(duì)應(yīng)用產(chǎn)生影響。
10)完整性的獨(dú)立性。完整性管理Oracle管理規(guī)則應(yīng)該貯存在數(shù)據(jù)字典中。主鍵約束、外鍵約束、檢查約束、觸發(fā)器等等都應(yīng)該貯存在數(shù)據(jù)字典中。
11)分布獨(dú)立性。一個(gè)數(shù)據(jù)庫(kù)即使被分布,也應(yīng)該能繼續(xù)工作。這是管理Oracle管理規(guī)則8的一個(gè)擴(kuò)展,一個(gè)數(shù)據(jù)庫(kù)不僅能在一個(gè)系統(tǒng)(本地地)分布,也能在通過系統(tǒng)的網(wǎng)絡(luò)(遠(yuǎn)程地)分布。
12)非破壞性法則。如果允許低級(jí)存取,一定不能繞過安全性或完整性管理Oracle管理規(guī)則,這些管理Oracle管理規(guī)則是常規(guī)的數(shù)據(jù)存取語(yǔ)言所遵守的,例如,一個(gè)備份或載入工具不能繞過驗(yàn)證、約束和鎖來備份或載入數(shù)據(jù)。然而,軟件供應(yīng)商出于速度的原因,通常提供這些功能。那么,數(shù)據(jù)庫(kù)系統(tǒng)管理員就有責(zé)任確保數(shù)據(jù)的安全性和完整性,如果瞬間出現(xiàn)問題,應(yīng)該立即恢復(fù)。例如當(dāng)載入VLDB時(shí),可以臨時(shí)禁止并重新打開約束檢查。如果一個(gè)DBMS能滿足本章中討論的所有基本原則(兩個(gè)定義、六個(gè)屬性、關(guān)系型操作以及兩個(gè)完整性管理Oracle管理規(guī)則)和這十二條法則,那么它就可以被當(dāng)作一個(gè)RDBMS。
Codd用他的法則總結(jié)了這一切:“對(duì)于一個(gè)有資格成為RDBMS的系統(tǒng)來說,該系統(tǒng)必須排他地使用它的關(guān)系型工具來管理數(shù)據(jù)庫(kù)?!?/P>
【編輯推薦】