![數(shù)據(jù)庫Oracle第4章2.ppt_第1頁](http://file.renrendoc.com/FileRoot1/2019-2/1/0ca2f7f8-5b3c-4d80-87dd-83c5e0161126/0ca2f7f8-5b3c-4d80-87dd-83c5e01611261.gif)
![數(shù)據(jù)庫Oracle第4章2.ppt_第2頁](http://file.renrendoc.com/FileRoot1/2019-2/1/0ca2f7f8-5b3c-4d80-87dd-83c5e0161126/0ca2f7f8-5b3c-4d80-87dd-83c5e01611262.gif)
![數(shù)據(jù)庫Oracle第4章2.ppt_第3頁](http://file.renrendoc.com/FileRoot1/2019-2/1/0ca2f7f8-5b3c-4d80-87dd-83c5e0161126/0ca2f7f8-5b3c-4d80-87dd-83c5e01611263.gif)
![數(shù)據(jù)庫Oracle第4章2.ppt_第4頁](http://file.renrendoc.com/FileRoot1/2019-2/1/0ca2f7f8-5b3c-4d80-87dd-83c5e0161126/0ca2f7f8-5b3c-4d80-87dd-83c5e01611264.gif)
![數(shù)據(jù)庫Oracle第4章2.ppt_第5頁](http://file.renrendoc.com/FileRoot1/2019-2/1/0ca2f7f8-5b3c-4d80-87dd-83c5e0161126/0ca2f7f8-5b3c-4d80-87dd-83c5e01611265.gif)
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫應(yīng)用技術(shù) 第四章 數(shù)據(jù)庫對象 與數(shù)據(jù)庫設(shè)計(jì),4.2 約束,4.2.1 約束的作用與分類,在實(shí)際業(yè)務(wù)中,通常會(huì)要求數(shù)據(jù)必須滿足一系列條件,這些條件能夠保證數(shù)據(jù)的一致性和完整性,稱為商業(yè)規(guī)則。實(shí)現(xiàn)商業(yè)規(guī)則有三種方式: 應(yīng)用程序代碼:在客戶端和程序內(nèi)部檢查,這種方式無法完全保證一致性。 觸發(fā)器:在DBMS內(nèi)部,通過程序代碼對所有數(shù)據(jù)的變化都進(jìn)行檢查,這種方式可以保證一致性,但執(zhí)行代價(jià)較大。 約束(Constraints):對于一些常見、通用的要求,使用設(shè)置的方式建立規(guī)則。這種方式設(shè)置簡單、執(zhí)行代價(jià)較小、一致性強(qiáng)。 數(shù)據(jù)類型:最基本的約束。,ORACLE支持5種類型的完整性約束 NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK,4.2.2 定義與維護(hù)約束,NOT NULL 非空約束是字段級(jí)約束,要求表中所有行在該字段上都必須有數(shù)據(jù)值。 CONSTRAINT NULL|NOT NULL,UNIQUE 唯一性約束要求表中任意兩行在該字段上的值都不相同,但可以為空。 字段級(jí):CONSTRAINT UNIQUE 可在多個(gè)字段上建立一個(gè)唯一性約束,表約束: CONSTRAINT UNIQUE () 系統(tǒng)自動(dòng)建立唯一索引,刪除有外鍵指向的唯一性約束前應(yīng):禁用或刪除外鍵。 刪除或禁用唯一性約束時(shí):通常同時(shí)刪除關(guān)聯(lián)的唯一索引,這會(huì)降低數(shù)據(jù)庫性能。經(jīng)常刪除或禁用唯一性約束可能導(dǎo)致因丟失索引而帶來的性能降低和錯(cuò)誤。如何避免? 1、在唯一性約束保護(hù)的數(shù)據(jù)列上創(chuàng)建非唯一性索引。 2、添加唯一性約束。,PRIMARY KEY 主鍵約束在表上是唯一的,相當(dāng)于非空的唯一性約束??梢酝瑫r(shí)在一個(gè)或多個(gè)字段上建立。 字段級(jí):CONSTRAINT PRIMARY KEY 表級(jí):CONSTRAINT PRIMARY KEY () 用于表聯(lián)接。如:學(xué)生證號(hào)。 唯一性約束和主鍵約束不會(huì)對完全為NULL的鍵進(jìn)行處理。,FOREIGN KEY 外鍵約束作用在父表和子表上 父表上的主鍵或唯一鍵 子表外鍵的值必須:父表字段或者空 在單一字段上建立外鍵,字段級(jí)約束 CONSTRAINT REFERENCES () 在多個(gè)字段上建立外鍵,表級(jí)約束 CONSTRAINT FOREIGN KEY () REFERENCES () ON DELETE SET NULL ON DELETE子句:聲明父表記錄被刪除后,對子表記錄的處理。缺省情況下禁止在子表記錄還存在的情況下刪除父表的記錄。,使用外鍵時(shí)應(yīng)該考慮的因素: 外鍵約束提供了字段參照完整性 外鍵從句中的字段數(shù)目和每個(gè)字段指定的數(shù)據(jù)類型必須和REFERENCES從句中的字段相匹配。 外鍵不能自動(dòng)創(chuàng)建,需要用戶手動(dòng)創(chuàng)建。 必須有外鍵約束參照表的SELECT權(quán)限或REFERENCES權(quán)限。 一個(gè)表中最多可以有31個(gè)外鍵約束。 在臨時(shí)表中不能使用外鍵約束。,CHECK 檢查約束檢查一行記錄是否滿足條件。 CONSTRAINT CHECK() 列級(jí)檢查約束只能與限制的字段有關(guān),一個(gè) 表級(jí)檢查約束只能與限制的表中字段有關(guān),多個(gè) 檢查約束中不能包含子查詢 如:工資獎(jiǎng)金5000,甲的工資乙的工資2000。,是可選的,如果沒提供Oracle將產(chǎn)生一個(gè)以SYS_開始的唯一的名字。,舉例 CREATE TABLE agents( aid CHAR(3) NOT NULL, lid CHAR(3) NULL, salary NUMBER(4,0) PRIMARY KEY(aid), FOREIGN KEY(lid) REFERNCE locations(lid), CHECK(salary0 AND UPPER(aid)=aid) );,約束存在于數(shù)據(jù)字典中,在執(zhí)行SQL或PL/SQL期間使用。 增加約束 NOT NULL使用ALTER的MODIFY子句,其它的使用ALTER的 ADD子句。 CREATE TABLE t(name VARCHAR2(20); ALTER TABLE t MODIFY name NOT NULL; ALTER TABLE t ADD CONSTRAINT t_uk_1 UNIQUE(name); ALTER TABLE t ADD CONSTRAINT t_pk PRIMARY KEY(name); ALTER TABLE t ADD id VARCHAR2(20) CONSTRAINT t_fk_1 REFERENCES tf(id);,修改約束名 ALTER TABLE RENAME CONSTRAINT TO ; 刪除約束 ALTER TABLE DROP CONSTRAINT ; 禁止約束 ALTER TABLE DISABLE CONSTRAINT CASCADE; 啟用約束 ALTER TABLE ENABLE CONSTRAINT ;,4.2.3 約束的建立原則,1、根據(jù)數(shù)據(jù)庫完整性約束的類型確定其實(shí)現(xiàn)的系統(tǒng)層次和方式,并提前考慮對系統(tǒng)性能的影響。一般情況下,靜態(tài)約束應(yīng)盡量包含在數(shù)據(jù)庫模式中,而動(dòng)態(tài)約束由應(yīng)用程序?qū)崿F(xiàn)。 2、實(shí)體完整性約束、參照完整性約束是關(guān)系數(shù)據(jù)庫最重要的完整性約束,在不影響系統(tǒng)關(guān)鍵性能的前提下需盡量應(yīng)用。用一定的時(shí)間和空間來換取系統(tǒng)的易用性是值得的。 3、要慎用目前主流DBMS都支持的觸發(fā)器功能,一方面由于觸發(fā)器的性能開銷較大,另一方面,觸發(fā)器的多級(jí)觸發(fā)不好控制,容易發(fā)生錯(cuò)誤,非用不可時(shí),最好使用Before型語句級(jí)觸發(fā)器。,4、在需求分析階段就必須制定完整性約束的命名規(guī)范,盡量使用有意義的英文單詞、縮寫詞、表名、列名及下劃線等組合,使其易于識(shí)別和記憶。如果使用CASE工具,一般有缺省的規(guī)則,可在此基礎(chǔ)上修改使用。 5、要根據(jù)業(yè)務(wù)規(guī)則對數(shù)據(jù)庫完整性進(jìn)行細(xì)致的測試,以盡早排除隱含的完整性約束間的沖突和對性能的影響。 6、要有專職的數(shù)據(jù)庫設(shè)計(jì)小組,自始至終負(fù)責(zé)數(shù)據(jù)庫的分析、設(shè)計(jì)、測試、實(shí)施及早期維護(hù)。數(shù)據(jù)庫設(shè)計(jì)人員不僅負(fù)責(zé)基于DBMS的數(shù)據(jù)庫完整性約束的設(shè)計(jì)實(shí)現(xiàn),還要負(fù)責(zé)對應(yīng)用軟件實(shí)現(xiàn)的數(shù)據(jù)庫完整性約束進(jìn)行審核。 7、應(yīng)采用合適的CASE工具來降低數(shù)據(jù)庫設(shè)計(jì)各階段的工作量。好的CASE工具能夠支持整個(gè)數(shù)據(jù)庫的生命周期,這將使數(shù)據(jù)庫設(shè)計(jì)人員的工作效率得到很大提高,同時(shí)也容易與用戶溝通。,練習(xí)題,寫出圖書館管理系統(tǒng)中建表的DDL語句及相關(guān)的約束。,4.3 視圖,視圖不存儲(chǔ)數(shù)據(jù), Oracle中將視圖以USER_VIEWS中查詢語句的形式存儲(chǔ),在使用時(shí)組織基表中的數(shù)據(jù)。 視圖的數(shù)據(jù)可以來自: 1至多個(gè)基表、視圖。,4.3.1 視圖的作用,使用視圖的原因 權(quán)限控制 簡化查詢和應(yīng)用程序 兼容數(shù)據(jù)庫設(shè)計(jì)的修改,4.3.2 創(chuàng)建、刪除與使用視圖,視圖的創(chuàng)建 CREATE OR REPLACE FORCE|NOFORCE VIEW () AS WITH CHECK OPTIONS CONSTRAINT WITH READ ONLY; OR REPLACE:對已有同名視圖進(jìn)行替換和修改。 FORCE:不管基表是否存在都創(chuàng)建視圖。 NOFORCE:只有基表存在時(shí),才創(chuàng)建視圖。 :為的列定義的新名字,沒有則用返回的字段名定義。,CREATE OR REPLACE FORCE|NOFORCE VIEW () AS WITH CHECK OPTIONS CONSTRAINT WITH READ ONLY; :可以包含連接、分組及子查詢。 WITH CHECK OPTIONS:對視圖插入或修改時(shí),必須滿足約束條件。 WITH READ ONLY:視圖只讀。,舉例 CREATE VIEW v1(aid, uname, salary) AS SELECT aid, UPPER(aname), salary FROM agents WHERE salary3000; SELECT * FROM v1; 執(zhí)行時(shí),系統(tǒng)會(huì)找出v1的定義,相當(dāng)于在基表上執(zhí)行。,刪除視圖 DROP VIEW CASCADE|RESTRICT; CASCADE:自動(dòng)刪除依賴該視圖的對象,如其它視圖。 RESTRICT:如果有依賴對象存在,拒絕刪除該視圖。 權(quán)限:視圖的建立者或DROP ANY VIEW權(quán)限。 視圖的刪除不影響基表,不會(huì)丟失數(shù)據(jù)。 舉例 DROP VIEW v1;,視圖的優(yōu)點(diǎn) 簡單性 簡化用戶對數(shù)據(jù)的理解和操作 安全性 通過視圖,可以令用戶只能查詢和修改他們能見到的數(shù)據(jù),即限制在數(shù)據(jù)的不同子集上。 邏輯數(shù)據(jù)獨(dú)立性 使應(yīng)用程序和數(shù)據(jù)庫表在一定程度上獨(dú)立,即程序-視圖-數(shù)據(jù)庫表。,視圖的缺點(diǎn) 性能 由多表復(fù)雜查詢定義的視圖 修改限制 由多表復(fù)雜查詢定義的視圖,可能是不可修改的。 定義數(shù)據(jù)庫對象時(shí),應(yīng)該權(quán)衡視圖的優(yōu)點(diǎn)和缺點(diǎn),合理地定義視圖。,4.3.3 視圖上的DML操作,視圖的分類,復(fù)雜視圖上的DML操作的準(zhǔn)則 不允許違反約束的DML操作。 不能將一個(gè)值添加到包含算術(shù)表達(dá)式的列中。 在非key-preserved表上不允許DML操作。 在包括聚組函數(shù)、GROUP BY子句、ROWNUM偽列或DISTINCT關(guān)鍵字的視圖上不允許DML操作。,舉例 UPDATE v1 SET salary = 1000 WHERE aid = A01; SELECT * FROM v1; 此時(shí),A01不存在了,salary 3000, 對表的操作將及時(shí)反映在視圖中。,CREATE VIEW v1(aid, uname,salary) AS SELECT aid, UPPER(aname), salary FROM agents WHERE salary3000;,舉例 CREATE VIEW v2(cname, ordno, dollars) AS SELECT ame, o.ordno, c.dollars FROM customers c, orders o WHERE c.cid = o.cid; UPDATE v2 SET dollars = 100 WHERE cname =TOM;WHERE ordno = 1012; SET cname = AA WHERE ordno = 1012;,在此,orders是鍵保留表,可以修改。,在此,customers表不是鍵保留表,不可以修改。,舉例 CREATE VIEW v3 AS SELECT cid, UPPER(aname) uname FROM customers; UPDATE v3 SET uname = A WHERE cid = C01;,不能對uname對應(yīng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025建材采購合同
- 2025年個(gè)人向銀行借款補(bǔ)充合同標(biāo)準(zhǔn)版本(三篇)
- 2025解除場地租賃合同范本
- 環(huán)保技術(shù)服務(wù)與咨詢合同
- 美食廣場服務(wù)員工作總結(jié)
- 100萬噸綠色清潔能源頁巖氣液化項(xiàng)目可行性研究報(bào)告寫作模板-申批備案
- 2025-2030全球電池保護(hù)板行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國工業(yè)級(jí)4-苯氧基苯酚行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國桁架式門式起重機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國AI虛擬人交互一體機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 福建省泉州市晉江市2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 2025年春新人教版物理八年級(jí)下冊課件 第十章 浮力 第4節(jié) 跨學(xué)科實(shí)踐:制作微型密度計(jì)
- 貨運(yùn)車輛駕駛員服務(wù)標(biāo)準(zhǔn)化培訓(xùn)考核試卷
- 財(cái)務(wù)BP經(jīng)營分析報(bào)告
- 三年級(jí)上冊體育課教案
- 2024高考物理二輪復(fù)習(xí)電學(xué)實(shí)驗(yàn)專項(xiàng)訓(xùn)練含解析
- 2024年全國統(tǒng)一高考英語試卷(新課標(biāo)Ⅰ卷)含答案
- 高中英語:倒裝句專項(xiàng)練習(xí)(附答案)
- 2025屆河北衡水?dāng)?shù)學(xué)高三第一學(xué)期期末統(tǒng)考試題含解析
- 2024年山東省青島市普通高中自主招生物理試卷(含解析)
- 2024信息技術(shù)數(shù)字孿生能力成熟度模型
評(píng)論
0/150
提交評(píng)論