Oracle8對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)課件_第1頁(yè)
Oracle8對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)課件_第2頁(yè)
Oracle8對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)課件_第3頁(yè)
Oracle8對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)課件_第4頁(yè)
Oracle8對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)課件_第5頁(yè)
已閱讀5頁(yè),還剩139頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

綜合實(shí)例定貨系統(tǒng)綜合實(shí)例定貨系統(tǒng)1訂貨系統(tǒng)—

對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)一、系統(tǒng)簡(jiǎn)介二、采用關(guān)系方法三、采用對(duì)象表四、采用對(duì)象視圖訂貨系統(tǒng)—

對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)一、系統(tǒng)簡(jiǎn)介一、系統(tǒng)簡(jiǎn)介系統(tǒng)涉及的實(shí)體和聯(lián)系顧客表,Customer_Info貨物表,Stock_Info訂貨單,purchase_info細(xì)目表Items_infoCustomer_Infopurchase_infoStock_Infoitems_infomn1mmn11一、系統(tǒng)簡(jiǎn)介系統(tǒng)涉及的實(shí)體和聯(lián)系Customer_Infop顧客信息顧客表,Customer_Info顧客信息顧客表,Customer_Info貨物信息貨物表,Stock_Info貨物信息貨物表,Stock_Info定貨信息訂貨單,purchase_info定貨條目(細(xì)目表)items_info定貨信息訂貨單,purchase_info二、采用關(guān)系方法關(guān)系表的定義對(duì)關(guān)系表的數(shù)據(jù)操縱基于關(guān)系表的查詢與統(tǒng)計(jì)二、采用關(guān)系方法關(guān)系表的定義關(guān)系數(shù)據(jù)庫(kù)的解決方案采用關(guān)系方法將顧客信息,訂貨單,貨物條目清單組織成表。將地址拆成為基本元素,如省、市、街道、郵編等。設(shè)置顧客的一個(gè)可能擁有電話的最大限度,每一個(gè)電話表示為表的一列。關(guān)系方法將訂貨條目從訂貨單中分離出來(lái),單獨(dú)存放在一張表中,該表中有指向訂貨單表和貨物表的外鍵。關(guān)系數(shù)據(jù)庫(kù)的解決方案采用關(guān)系方法將顧客信息,訂貨單,貨物條目關(guān)系表的定義采用關(guān)系模型實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的抽象。將實(shí)體定義為關(guān)系(表)。實(shí)體間的聯(lián)系通過(guò)外來(lái)碼或關(guān)系表實(shí)現(xiàn)。表中的字段必須是不可分割的基本單位。不允許表中嵌表。通過(guò)表的連接實(shí)現(xiàn)多表查詢。關(guān)系表的定義采用關(guān)系模型實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的抽象。CREATETABLEcustomer_info( custno NUMBERPRIMARYKEY, custname VARCHAR2(200), street VARCHAR2(200), city VARCHAR2(200),stateVARCHAR2(200), zip VARCHAR2(6), phone1 VARCHAR2(20), phone2 VARCHAR2(20), phone3 VARCHAR2(20));建立顧客表CREATETABLEcustomer_info(建立建立貨物表CREATETABLEstock_info( stockno NUMBERPRIMARYKEY, costNUMBER,tax_codeNUMBER);建立貨物表CREATETABLEstock_info(CREATETABLEpurchase_info( pono NUMBERPRIMARYKEY, custno NUMBERREFERENCEScustomer_info(custno), orderdate DATE, shiptodate DATE, shiptostreet VARCHAR2(200), shiptocity VARCHAR2(200),shiptostateVARCHAR2(200), shiptozip VARCHAR2(20));建立定貨表CREATETABLEpurchase_info(建立建立細(xì)目表CREATETABLEitems_info( lineitemnoNUMBER, ponoNUMBERREFERENCESpurchase_info(pono), stocknoNUMBERREFERENCESstock_info(stockno), quantity NUMBER, discount NUMBER, PRIMARYKEY(pono,lineitemno));建立細(xì)目表CREATETABLEitems_info(向關(guān)系表插入數(shù)據(jù)向顧客表插入數(shù)據(jù)INSERTINTOcustomer_infoVALUES(1,'JeanNance','2AvocetDrive',‘RedwoodShores','CA','95054','415-555-1212',NULL,NULL);INSERTINTOcustomer_infoVALUES(2,'JohnNike','323CollegeDrive','Edison','NJ','08820','609-555-1212','201-555-1212',NULL);向貨物表插入數(shù)據(jù)INSERTINTOstock_infoVALUES(1004,6750.00,2);INSERTINTOstock_infoVALUES(1011,4500.23,2);INSERTINTOstock_infoVALUES(1534,2234.00,2);INSERTINTOstock_infoVALUES(1535,3456.23,2);向關(guān)系表插入數(shù)據(jù)向顧客表插入數(shù)據(jù)向關(guān)系表插入數(shù)據(jù)向定貨單表插入數(shù)據(jù)

INSERTINTOpurchase_infoVALUES(1001,1,SYSDATE,‘10-5月-1997',NULL,NULL,NULL,NULL);INSERTINTOpurchase_infoVALUES(2001,2,SYSDATE,‘20-5月-1997','55MadisonAve','Madison','WI','53715');向定貨單條目插入數(shù)據(jù)INSERTINTOitems_infoVALUES(01,1001,1534,12,0);INSERTINTOitems_infoVALUES(02,1001,1535,10,10);INSERTINTOitems_infoVALUES(10,2001,1004,1,0);INSERTINTOitems_infoVALUES(11,2001,1011,2,1);向關(guān)系表插入數(shù)據(jù)向定貨單表插入數(shù)據(jù)關(guān)系表的查詢查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息(多表連接)SELECTC.custno,C.custname,C.street,C.city,C.state,C.zip,C.phone1,C.phone2,C.phone3,P.pono,P.orderdate,L.stockno,L.lineitemno,L.quantity,L.discountFROMcustomer_infoC,purchase_infoP,items_infoLWHEREC.custno=P.custnoANDP.pono=L.ponoANDP.pono=1001;關(guān)系表的查詢查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息關(guān)系表的查詢SELECTP.pono,C.custname,P.orderdate,cursor(selectstockno,lineitemno,quantity,discountfromitems_infowherepono=p.pono)細(xì)目表見(jiàn)下FROMcustomer_infoC,purchase_infoPWHEREP.custno=C.custnoANDP.pono=2001關(guān)系表的查詢SELECTP.pono,C.custna關(guān)系表的查詢

PONOCUSTNAMEORDERDATE細(xì)目表見(jiàn)下-------------------------------------------------------------------2001JohnNike14-10月-00CURSOR…:4CURSORSTATEMENT:4STOCKNOLINEITEMNOQUANTITYDISCOUNT------------------------------------------------------------------1004101010111121關(guān)系表的查詢PONOCUSTNAMEORDERDA數(shù)據(jù)操縱--查詢數(shù)據(jù)統(tǒng)計(jì)每一個(gè)訂貨單的總價(jià)值SELECTL.pono,SUM(S.cost*L.quantity)FROMitems_infoL,stock_infoSWHEREL.stockno=S.stocknoGROUPBYL.pono;查詢涉及貨物1004的訂貨單及訂貨條目信息SELECTP.pono,P.custno,L.stockno,L.lineitemno,L.quantity,L.discountFROMpurchase_infoP,items_infoLWHEREP.pono=L.ponoANDL.stockno=1004;數(shù)據(jù)操縱--查詢數(shù)據(jù)統(tǒng)計(jì)每一個(gè)訂貨單的總價(jià)值數(shù)據(jù)操縱--維護(hù)數(shù)據(jù)修改數(shù)據(jù):更改1001訂貨單中貨物號(hào)為1535的訂貨量UPDATEitems_infoSETquantity=20WHEREpono=1001ANDstockno=1535;刪除數(shù)據(jù):刪除編號(hào)為1001的訂貨單DELETEFROMitems_info(先刪細(xì)目表記錄)WHEREpono=1001;DELETEFROMpurchase_info(再刪主表記錄)WHEREpono=1001;數(shù)據(jù)操縱--維護(hù)數(shù)據(jù)修改數(shù)據(jù):三、采用對(duì)象表面向?qū)ο蠼鉀Q方案定義類(lèi)型及類(lèi)型體創(chuàng)建對(duì)象表對(duì)象表的數(shù)據(jù)操作三、采用對(duì)象表面向?qū)ο蠼鉀Q方案實(shí)現(xiàn)對(duì)象關(guān)系的方法O-R對(duì)象關(guān)系方法用戶自定義數(shù)據(jù)類(lèi)型使得復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)入數(shù)據(jù)庫(kù)模式中。不將address拆散,也不將聯(lián)系電話存為不相關(guān)的多列,在O-R中可以定義特殊的類(lèi)型表示。不將訂貨條目以單獨(dú)表管理,O-R中將他們作為相應(yīng)訂貨表的嵌套表。收集類(lèi)型作為多值屬性在O-R方法中,主要實(shí)體顧客,貨物,訂貨單變?yōu)閷?duì)象。對(duì)象引用表示他們之間n:1的關(guān)系,實(shí)現(xiàn)對(duì)象關(guān)系的方法O-R對(duì)象關(guān)系方法定義類(lèi)型定貨系統(tǒng)中的類(lèi)型:地址address_t對(duì)象類(lèi)型多個(gè)電話phone_list_t變長(zhǎng)數(shù)組類(lèi)型顧客customer_info_t對(duì)象類(lèi)型貨物stock_info_t對(duì)象類(lèi)型貨物條目line_item_t對(duì)象類(lèi)型多個(gè)貨物條目line_item_list_t嵌套表類(lèi)型定貨單purchase_info_t對(duì)象類(lèi)型

定義類(lèi)型定貨系統(tǒng)中的類(lèi)型:定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示地址信息CREATETYPEaddress_tASOBJECT(streetVARCHAR2(200),cityVARCHAR2(200),stateCHAR(2),zipVARCHAR2(20));定義一個(gè)數(shù)組類(lèi)型,表示顧客的幾部電話CREATETYPEphone_list_tASVARRAY(10)OFVARCHAR2(20);定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示地址信息定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨條目信息CREATETYPEline_item_tASOBJECT(lineitemnoNUMBER,STOCKREFREFstock_info_t,quantityNUMBER,discountNUMBER);定義一個(gè)嵌套表類(lèi)型,表示定貨單中的貨物條目信息CREATETYPEline_item_list_tASTABLEOFline_item_t;定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨條目信息定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示顧客CREATETYPEcustomer_info_tASOBJECT(custnoNUMBER,custnameVARCHAR2(200),addressaddress_t,phone_listphone_list_t,ORDERMEMBERFUNCTIONcust_order(xINcustomer_info_t)RETURNINTEGER,PRAGMARESTRICT_REFERENCES(cust_order,WNDS,WNPS,RNPS,RNDS));定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示顧客定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示貨物信息CREATETYPEstock_info_tASOBJECT(stocknoNUMBER,costNUMBER,tax_codeNUMBER);定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示貨物信息定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨單CREATETYPEpurchase_info_tASOBJECT(ponoNUMBER,custrefREFcustomer_info_t,orderdateDATE,shipdateDATE,line_item_listline_item_list_t,shiptoaddraddress_t,MAPMEMBERFUNCTIONret_valueRETURNNUMBER,PRAGMARESTRICT_REFERENCES(ret_value,WNDS,WNPS,RNPS,RNDS),MEMBERFUNCTIONtotal_valueRETURNNUMBER,PRAGMARESTRICT_REFERENCES(total_value,WNDS,WNPS));定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨單嵌套表和可變數(shù)組的比較對(duì)顧客中的電話來(lái)說(shuō)VARRAY的元素是有序的VARRAY要求預(yù)置元素?cái)?shù)目對(duì)定貨單中的貨物條目來(lái)說(shuō)嵌套表沒(méi)有上界的限制嵌套表可以直接做查詢可以對(duì)嵌套表做索引嵌套表和可變數(shù)組的比較對(duì)顧客中的電話來(lái)說(shuō)定義方法定義customer_info_t對(duì)象類(lèi)型的方法:CREATEORREPLACETYPEBODYcustomer_info_tASORDERMEMBERFUNCTIONcust_order(xINcustomer_info_t)RETURNINTEGERISBEGINRETURNcustno-x.custno;END;END;顧客對(duì)象的比較是顧客號(hào)的比較定義方法定義customer_info_t對(duì)象類(lèi)型的方法:顧定義方法定義purchase_info_t對(duì)象類(lèi)型的方法:CREATEORREPLACETYPEBODYpurchase_info_tASMAPMEMBERFUNCTIONret_valueRETURNNUMBERIS BEGIN RETURNpono; END; 定義方法定義purchase_info_t對(duì)象類(lèi)型的方法:定義方法MEMBERFUNCTIONtotal_valueRETURNNUMBERISiINTEGER; stockstock_info_t;--(stockno,cost,tax_code) line_itemline_item_t;--(lineitemnoSTOCKREFquantitydiscount) totalNUMBER:=0;BEGINFORiIN1..SELF.line_item_list.COUNTLOOPline_item:=SELF.line_item_list(i);SELECTDEREF(line_item.stockref)INTOstockFROMDUAL;total:=total+line_item.quantity*stock.cost;ENDLOOP;RETURNtotal;END;END;定義方法MEMBERFUNCTIONtotal_va創(chuàng)建對(duì)象表一般來(lái)講,可以按下面規(guī)則理解“對(duì)象”和“表”之間的關(guān)系:類(lèi),即客觀世界的實(shí)體,對(duì)應(yīng)于表對(duì)象屬性對(duì)應(yīng)于表的列對(duì)象對(duì)應(yīng)于表的記錄每一個(gè)表是一個(gè)隱式的類(lèi),它的對(duì)象(記錄)都有相同的屬性(列)創(chuàng)建對(duì)象表一般來(lái)講,可以按下面規(guī)則理解“對(duì)象”和“表”之間的創(chuàng)建對(duì)象表定義對(duì)象表customer_tabCREATETABLEcustomer_tabOFcustomer_info_t(custnoPRIMARYKEY);對(duì)象類(lèi)型包含四個(gè)屬性: custnoNUMBER custnameVARCHAR2(200) addressaddress_t phone_listphone_list_t創(chuàng)建對(duì)象表定義對(duì)象表customer_tab創(chuàng)建對(duì)象表對(duì)象類(lèi)型作為創(chuàng)建對(duì)象表的模板約束用于表上,不能定義在類(lèi)型上(如PRIMARYKEY的約束定義)表可以包含對(duì)象列,由于變長(zhǎng)數(shù)組phone_list_t包含的數(shù)量少于10x20,所以O(shè)RACLE將其作為一個(gè)存儲(chǔ)單元,當(dāng)超過(guò)4000byte時(shí),將以BLOB類(lèi)型存于表外不為對(duì)象類(lèi)型分配存儲(chǔ)空間,僅為表分配記錄空間創(chuàng)建對(duì)象表對(duì)象類(lèi)型作為創(chuàng)建對(duì)象表的模板創(chuàng)建對(duì)象表對(duì)象表stock_tab的定義:CREATETABLEstock_tabOFstock_info_t(stocknoPRIMARYKEY);STOCK_INFO_T對(duì)象類(lèi)型包含三個(gè)屬性:stocknoNUMBER,costNUMBER,tax_codeNUMBER創(chuàng)建對(duì)象表對(duì)象表stock_tab的定義:創(chuàng)建對(duì)象表對(duì)象表purchase_tab的定義:CREATETABLEpurchase_tabOFpurchase_info_t(PRIMARYKEY(pono),SCOPEFOR(custref)IScustomer_tab)NESTEDTABLEline_item_listSTOREASpo_line_tab;purchase_info_T對(duì)象類(lèi)型的屬性包括:ponoNUMBER,custrefREFcustomer_info_t,orderdateDATE,shipdateDATE,line_item_listline_item_list_t,shiptoaddraddress_t創(chuàng)建對(duì)象表對(duì)象表purchase_tab的定義:創(chuàng)建對(duì)象表REF操作符:如果未作限制,REF允許引用任意類(lèi)型為customer_info_t表的行對(duì)象。SCOPE約束只是限制purchase_tab對(duì)象表的custref列的取值范圍。嵌套表:十分適合于表示表間的主從關(guān)系,從而可以避免DML中的關(guān)系聯(lián)接(JOIN)。一個(gè)嵌套表的所有記錄存儲(chǔ)在一個(gè)獨(dú)立的存儲(chǔ)表中,在該存儲(chǔ)表中有一個(gè)隱含的列NESTED_TABLE_ID與相應(yīng)的父表記錄相對(duì)應(yīng),在嵌套表中的記錄與父表中的記錄根據(jù)NESTED_TABLE_ID對(duì)應(yīng)。嵌套表類(lèi)型的各個(gè)屬性對(duì)應(yīng)于存儲(chǔ)表的各列。創(chuàng)建對(duì)象表REF操作符:維護(hù)嵌套表修改嵌套表的存儲(chǔ)表ALTERTABLEpo_line_tabADD(SCOPEFOR(stockref)ISstock_tab);ALTERTABLEpo_line_tabSTORAGE(NEXT5KPCTINCREASE5MINEXTENTS1MAXEXTENTS20);維護(hù)嵌套表修改嵌套表的存儲(chǔ)表插入stock_tab數(shù)據(jù)INSERTINTOstock_tabVALUES(1004,6750.00,2);INSERTINTOstock_tabVALUES(1011,4500.23,2);INSERTINTOstock_tabVALUES(1534,2234.00,2);INSERTINTOstock_tabVALUES(1535,3456.23,2);向?qū)ο蟊聿迦霐?shù)據(jù)向?qū)ο蟊聿迦霐?shù)據(jù)插入customer_tab數(shù)據(jù)INSERTINTOcustomer_tabVALUES(1,`JeanNance',address_t(`2AvocetDrive',`RedwoodShores',`CA',`95054'),phone_list_t(`415-555-1212'));INSERTINTOcustomer_tabVALUES(2,`JohnNike',address_t(`323CollegeDrive',`Edison',`NJ',`08820'),phone_list_t(`609-555-1212',`201-555-1212'));向?qū)ο蟊聿迦霐?shù)據(jù)插入customer_tab數(shù)據(jù)向?qū)ο蟊聿迦霐?shù)據(jù)向?qū)ο蟊聿迦霐?shù)據(jù)插入purchase_tab數(shù)據(jù)INSERTINTOpurchase_tabSELECT1001,REF(C),SYSDATE,'10-MAY-1997',line_item_list_t(),NULLFROMcustomer_tabCWHEREC.custno=1;上面的語(yǔ)句用下列屬性創(chuàng)建了一個(gè)purchase_info_T對(duì)象:pono=1001 custref=對(duì)于顧客1的引用orderdate=SYSDATE shipdate=10-MAY-1997line_item_list=一個(gè)空的貨物列表shiptoaddr=NULL向?qū)ο蟊聿迦霐?shù)據(jù)插入purchase_tab數(shù)據(jù)向嵌套表插入數(shù)據(jù)INSERTINTOTHE(SELECTP.line_item_listFROMpurchase_tabPWHEREP.pono=1001)SELECT01,REF(S),12,0FROMstock_tabSWHERES.stockno=1534;INSERTINTOTHE(SELECTP.line_item_listFROMpurchase_tabPWHEREP.pono=1001)SELECT02,REF(S),10,10FROMstock_tabSWHERES.stockno=1535;向嵌套表插入數(shù)據(jù)INSERTINTOTHE(SEL向?qū)ο蟊聿迦霐?shù)據(jù)INSERTINTOpurchase_tabSELECT2001,REF(C),SYSDATE,'20-MAY-1997',line_item_list_t(),address_t(`55Madisonve','Madison','WI','53715')FROMcustomer_tabCWHEREC.custno=2;向?qū)ο蟊聿迦霐?shù)據(jù)INSERTINTOpurchase_向嵌套表插入數(shù)據(jù)INSERTINTOTHE(SELECTP.line_item_listFROMpurchase_tabPWHEREP.pono=2001)SELECT10,REF(S),1,0FROMstock_tabSWHERES.stockno=1004;INSERTINTOTHE(SELECTP.line_item_listFROMpurchase_tabPWHEREP.pono=2001)VALUES(line_item_t(11,NULL,2,1));向嵌套表插入數(shù)據(jù)INSERTINTOTHE(SEL修改嵌套表修改定單表中單號(hào)為2001記錄的嵌套表,將條目號(hào)為11的貨物指針指向1011號(hào)貨物UPDATETHE(SELECTP.line_item_list FROMpurchase_tabP WHEREP.pono=2001)plistSETplist.stockref=(SELECTREF(S) FROMstock_tabS WHERES.stockno=1011)WHEREplist.lineitemno=11;修改嵌套表修改定單表中單號(hào)為2001記錄的嵌套表,將條目號(hào)為使用排序方法排序方法的引用SELECTp.ponoFROMpurchase_tabpORDERBYVALUE(p);按purchase_tab對(duì)象大小比較,隱含調(diào)用:MAPMEMBERFUNCTIONret_valueRETURNNUMBERISBEGINRETURNpono;END;相當(dāng)于orderbypono使用排序方法排序方法的引用數(shù)據(jù)操縱--查詢數(shù)據(jù)查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息SELECTDEREF(p.custref),p.shiptoaddr,p.pono,p.orderdate,line_item_listFROMpurchase_tabpWHEREp.pono=1001;每一個(gè)訂貨單的總價(jià)值SELECTp.pono,p.total_value()FROMpurchase_tabp;數(shù)據(jù)操縱--查詢數(shù)據(jù)查詢訂貨單1001的顧客信息和訂貨詳數(shù)據(jù)操縱--查詢數(shù)據(jù)查詢定貨單及涉及貨物1004定貨條目的信息。SELECTpo.pono,po.custref.custno,CURSOR(SELECT*FROMTABLE(po.line_item_list)LWHEREL.stockref.stockno=1004)FROMpurchase_tabpo;數(shù)據(jù)操縱--查詢數(shù)據(jù)查詢定貨單及涉及貨物1004定貨條目的數(shù)據(jù)操縱--刪除數(shù)據(jù)在下面的刪除例子中,Oracle自動(dòng)刪除所有屬于訂貨單的貨物條目,而在原關(guān)系模型中必須要考慮到兩張表的刪除問(wèn)題。刪除訂貨單1001:DELETE FROMpurchase_tabWHEREpono=1001;數(shù)據(jù)操縱--刪除數(shù)據(jù)在下面的刪除例子中,Oracle自動(dòng)刪除四、采用對(duì)象視圖對(duì)象視圖解決方案(基于關(guān)系表)定義對(duì)象視圖對(duì)象視圖的查詢使用觸發(fā)器更新對(duì)象視圖四、采用對(duì)象視圖對(duì)象視圖解決方案(基于關(guān)系表)對(duì)象視圖解決方案對(duì)象視圖是虛擬對(duì)象表,數(shù)據(jù)源取自表和視圖。采用對(duì)象表實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)一般采用如下步驟建立實(shí)體和關(guān)系通過(guò)創(chuàng)建和填充關(guān)系表實(shí)現(xiàn)實(shí)體關(guān)系結(jié)構(gòu)采用UDT表示對(duì)象關(guān)系模式,模型化一個(gè)實(shí)體關(guān)系結(jié)構(gòu)采用O-R模式創(chuàng)建和填充對(duì)象表實(shí)現(xiàn)實(shí)體關(guān)系結(jié)構(gòu)采用對(duì)象視圖方式要使用相同的初始步驟,但最后一步有所不同,它不是通過(guò)創(chuàng)建和填充對(duì)象表的方式,而是使用對(duì)象視圖來(lái)表示虛擬對(duì)象表,數(shù)據(jù)取自一般的關(guān)系表對(duì)象視圖解決方案對(duì)象視圖是虛擬對(duì)象表,數(shù)據(jù)源取自表和視圖。定義對(duì)象視圖三個(gè)對(duì)象視圖:Customer_view,Stock_view,Purchase_view。創(chuàng)建對(duì)象視圖的語(yǔ)句有四個(gè)部分:視圖的名字視圖所基于的對(duì)象類(lèi)型的名字基于主碼創(chuàng)建對(duì)象標(biāo)識(shí)OID)一個(gè)選擇語(yǔ)句根據(jù)對(duì)應(yīng)的對(duì)象類(lèi)型向虛擬對(duì)象表中填充數(shù)據(jù)后面例子借用前面的幾個(gè)類(lèi)型定義定義對(duì)象視圖三個(gè)對(duì)象視圖:定義對(duì)象視圖Customer_view對(duì)象視圖:CREATEORREPLACEVIEWcustomer_viewOFcustomer_info_tWITHOBJECTOID(custno)ASSELECTC.custno,C.custname,address_t(C.street,C.city,C.state,C.zip),phone_list_t(C.phone1,C.phone2,C.phone3)FROMcustomer_infoC;定義對(duì)象視圖Customer_view對(duì)象視圖:定義對(duì)象視圖Stock_view對(duì)象視圖CREATEORREPLACEVIEWstock_viewOFstock_info_t WITHOBJECTOID(stockno)AS SELECT*FROMstock_info;定義對(duì)象視圖Stock_view對(duì)象視圖定義對(duì)象視圖Purchase_view對(duì)象視圖CREATEORREPLACEVIEWpurchase_viewOFpurchase_info_tWITHOBJECTOID(pono)ASSELECTP.pono,,P.orderdate,P.shiptodate,,address_t(P.shiptostreet,P.shiptocity,P.shiptostate,P.shiptozip)FROMpurchase_infoP;客戶對(duì)象引用嵌套表列定義對(duì)象視圖Purchase_view對(duì)象視圖客戶對(duì)象引用嵌構(gòu)造視圖的對(duì)象引用列MAKE_REF(customer_view,P.custno),MAKE_REF(對(duì)象表/視圖,定位記錄的主鍵值)返回指向?qū)ο蟊?視圖的一個(gè)對(duì)象(記錄)的REF客戶對(duì)象引用構(gòu)造視圖的對(duì)象引用列客戶對(duì)象引用構(gòu)造視圖的嵌套表列CAST(MULTISET(SELECTline_item_t(L.lineitemno,MAKE_REF(stock_view,L.stockno),L.quantity,L.discount)FROMitems_infoLWHEREL.pono=P.pono)ASline_item_list_t),嵌套表列構(gòu)造視圖的嵌套表列CAST(嵌套表列定義對(duì)象視圖purchase_info_t對(duì)象類(lèi)型有如下屬性:

pono NUMBERcustref REFcustomer_info_torderdate DATEshipdate DATEline_item_listline_item_list_tshiptoaddr address_t定義對(duì)象視圖purchase_info_t對(duì)象類(lèi)型有如下屬使用對(duì)象視圖--查詢數(shù)據(jù)查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息SELECTDEREF(p.custref),p.shiptoaddr,p.pono,p.orderdate,line_item_listFROMpurchase_viewpWHEREp.pono=1001;統(tǒng)計(jì)每一個(gè)訂貨單的總價(jià)值SELECTp.pono,p.total_value()FROMpurchase_viewp;使用對(duì)象視圖--查詢數(shù)據(jù)查詢訂貨單1001的顧客信息和訂使用對(duì)象視圖--查詢數(shù)據(jù)查詢定貨單及涉及貨物1004定貨條目的信息。SELECTpo.pono,po.custref.custno,

CURSOR(SELECT*FROMTABLE(po.line_item_list)LWHEREL.stockref.stockno=1004)FROMpurchase_viewpo;使用對(duì)象視圖--查詢數(shù)據(jù)查詢定貨單及涉及貨物1004定貨使用觸發(fā)器更新對(duì)象視圖Oracle提供INSTEADOF觸發(fā)器可作為更新復(fù)雜對(duì)象視圖的方法。每當(dāng)想要改變對(duì)象視圖中行對(duì)象的屬性值時(shí),Oracle執(zhí)行對(duì)象視圖的INSTEADOF觸發(fā)器在觸發(fā)器中,Oracle使用關(guān)鍵字:OLD和:NEW存取行對(duì)象的當(dāng)前值和新值。使用觸發(fā)器更新對(duì)象視圖Oracle提供INSTEADOF觸使用觸發(fā)器更新對(duì)象視圖Stock_view的INSTEADOF觸發(fā)器CREATEORREPLACETRIGGERstockview_insert_trINSTEADOFINSERTONstock_viewFOREACHROWBEGININSERTINTOstock_infoVALUES(:NEW.stockno,:NEW.cost,:NEW.tax_code);END;

使用觸發(fā)器更新對(duì)象視圖Stock_view的INSTEAD使用觸發(fā)器更新對(duì)象視圖Customer_view的INSTEADOF觸發(fā)器CREATEORREPLACETRIGGERcustview_insert_trINSTEADOFINSERTONcustomer_viewFOREACHROWDECLAREphonesphone_list_t;tphone1customer_info.phone1%TYPE:=NULL;tphone2customer_info.phone2%TYPE:=NULL;tphone3customer_info.phone3%TYPE:=NULL;使用觸發(fā)器更新對(duì)象視圖Customer_view的INST使用觸發(fā)器更新對(duì)象視圖BEGINphones:=:NEW.phone_list;IFphones.COUNT>2THENtphone3:=phones(3);ENDIF;IFphones.COUNT>1THENtphone2:=phones(2);ENDIF;IFphones.COUNT>0THENtphone1:=phones(1);ENDIF;使用觸發(fā)器更新對(duì)象視圖BEGIN使用觸發(fā)器更新對(duì)象視圖INSERTINTOcustomer_infoVALUES(:NEW.custno,:NEW.custname,:NEW.address.street,:NEW.address.city,:NEW.address.state,:NEW.address.zip,tphone1,tphone2,tphone3);END;使用觸發(fā)器更新對(duì)象視圖INSERTINTOcust向?qū)ο笠晥D插入數(shù)據(jù)下列語(yǔ)句激活了customer_view觸發(fā)器:INSERTINTOcustomer_viewVALUES(13,`EllanWhite',address_t(`25IStreet',`Memphis',`TN',`05456'),phone_list_t(`615-555-1212'));向?qū)ο笠晥D插入數(shù)據(jù)下列語(yǔ)句激活了customer_view觸使用觸發(fā)器更新對(duì)象視圖Purchase_view的INSTEADOF觸發(fā)器CREATEORREPLACETRIGGERpoview_insert_trINSTEADOFINSERTONpurchase_viewFOREACHROWDECLAREline_itmsline_item_list_t;iINTEGER;custvarcustomer_info_t;stockvarstock_info_t;stockvartempREFstock_info_t;使用觸發(fā)器更新對(duì)象視圖Purchase_view的INSTE使用觸發(fā)器更新對(duì)象視圖BEGINline_itms:=:NEW.line_item_list;SELECTDEREF(:NEW.custref)INTOcustvarFROMDUAL;INSERTINTOpurchase_infoVALUES(:NEW.pono,custvar.custno,:NEW.orderdate,:NEW.shipdate,:NEW.shiptoaddr.street,:NEW.shiptoaddr.city,:NEW.shiptoaddr.state,:NEW.shiptoaddr.zip);向定貨單表插入數(shù)據(jù)使用觸發(fā)器更新對(duì)象視圖BEGIN向定貨單表插入數(shù)據(jù)使用觸發(fā)器更新對(duì)象視圖FORiIN1..line_itms.COUNTLOOPstockvartemp:=line_itms(i).stockref; SELECTDEREF(stockvartemp)INTOstockvarFROMDUAL; INSERTINTOitems_infoVALUES(line_itms(i).lineitemno,:NEW.pono,stockvar.stockno,line_itms(i).quantity,line_itms(i).discount);ENDLOOP;END;向定貨條目表插入數(shù)據(jù)使用觸發(fā)器更新對(duì)象視圖FORiIN1..line_it向?qū)ο笠晥D插入數(shù)據(jù)下列語(yǔ)句激活了purchase_view觸發(fā)器:INSERTINTOpurchase_viewSELECT3001,REF(c),SYSDATE,SYSDATE,CAST(MULTISET(SELECTline_item_t(41,REF(S),20,1)FROMstock_viewSWHERES.stockno=1535)ASline_item_list_t),address_t(`22NothingameAve',‘Cockstown','AZ','44045')FROMcustomer_viewcWHEREc.custno=1向?qū)ο笠晥D插入數(shù)據(jù)下列語(yǔ)句激活了purchase_view觸查詢對(duì)象視圖查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息SELECTDEREF(p.custref),p.shiptoaddr,p.pono, p.orderdate,line_item_list FROMpurchase_viewpWHEREp.pono=1001;每一個(gè)訂貨單的總價(jià)值SELECTp.pono,p.total_value() FROMpurchase_viewp;涉及貨物1004的訂貨單及訂貨條目信息SELECTpo.pono,po.custref.custno,CURSOR(SELECT*FROMTABLE(po.line_item_list)LWHEREL.stockref.stockno=1004)FROMpurchase_viewpo;查詢對(duì)象視圖查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息綜合實(shí)例定貨系統(tǒng)綜合實(shí)例定貨系統(tǒng)73訂貨系統(tǒng)—

對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)一、系統(tǒng)簡(jiǎn)介二、采用關(guān)系方法三、采用對(duì)象表四、采用對(duì)象視圖訂貨系統(tǒng)—

對(duì)象關(guān)系的設(shè)計(jì)與實(shí)現(xiàn)一、系統(tǒng)簡(jiǎn)介一、系統(tǒng)簡(jiǎn)介系統(tǒng)涉及的實(shí)體和聯(lián)系顧客表,Customer_Info貨物表,Stock_Info訂貨單,purchase_info細(xì)目表Items_infoCustomer_Infopurchase_infoStock_Infoitems_infomn1mmn11一、系統(tǒng)簡(jiǎn)介系統(tǒng)涉及的實(shí)體和聯(lián)系Customer_Infop顧客信息顧客表,Customer_Info顧客信息顧客表,Customer_Info貨物信息貨物表,Stock_Info貨物信息貨物表,Stock_Info定貨信息訂貨單,purchase_info定貨條目(細(xì)目表)items_info定貨信息訂貨單,purchase_info二、采用關(guān)系方法關(guān)系表的定義對(duì)關(guān)系表的數(shù)據(jù)操縱基于關(guān)系表的查詢與統(tǒng)計(jì)二、采用關(guān)系方法關(guān)系表的定義關(guān)系數(shù)據(jù)庫(kù)的解決方案采用關(guān)系方法將顧客信息,訂貨單,貨物條目清單組織成表。將地址拆成為基本元素,如省、市、街道、郵編等。設(shè)置顧客的一個(gè)可能擁有電話的最大限度,每一個(gè)電話表示為表的一列。關(guān)系方法將訂貨條目從訂貨單中分離出來(lái),單獨(dú)存放在一張表中,該表中有指向訂貨單表和貨物表的外鍵。關(guān)系數(shù)據(jù)庫(kù)的解決方案采用關(guān)系方法將顧客信息,訂貨單,貨物條目關(guān)系表的定義采用關(guān)系模型實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的抽象。將實(shí)體定義為關(guān)系(表)。實(shí)體間的聯(lián)系通過(guò)外來(lái)碼或關(guān)系表實(shí)現(xiàn)。表中的字段必須是不可分割的基本單位。不允許表中嵌表。通過(guò)表的連接實(shí)現(xiàn)多表查詢。關(guān)系表的定義采用關(guān)系模型實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的抽象。CREATETABLEcustomer_info( custno NUMBERPRIMARYKEY, custname VARCHAR2(200), street VARCHAR2(200), city VARCHAR2(200),stateVARCHAR2(200), zip VARCHAR2(6), phone1 VARCHAR2(20), phone2 VARCHAR2(20), phone3 VARCHAR2(20));建立顧客表CREATETABLEcustomer_info(建立建立貨物表CREATETABLEstock_info( stockno NUMBERPRIMARYKEY, costNUMBER,tax_codeNUMBER);建立貨物表CREATETABLEstock_info(CREATETABLEpurchase_info( pono NUMBERPRIMARYKEY, custno NUMBERREFERENCEScustomer_info(custno), orderdate DATE, shiptodate DATE, shiptostreet VARCHAR2(200), shiptocity VARCHAR2(200),shiptostateVARCHAR2(200), shiptozip VARCHAR2(20));建立定貨表CREATETABLEpurchase_info(建立建立細(xì)目表CREATETABLEitems_info( lineitemnoNUMBER, ponoNUMBERREFERENCESpurchase_info(pono), stocknoNUMBERREFERENCESstock_info(stockno), quantity NUMBER, discount NUMBER, PRIMARYKEY(pono,lineitemno));建立細(xì)目表CREATETABLEitems_info(向關(guān)系表插入數(shù)據(jù)向顧客表插入數(shù)據(jù)INSERTINTOcustomer_infoVALUES(1,'JeanNance','2AvocetDrive',‘RedwoodShores','CA','95054','415-555-1212',NULL,NULL);INSERTINTOcustomer_infoVALUES(2,'JohnNike','323CollegeDrive','Edison','NJ','08820','609-555-1212','201-555-1212',NULL);向貨物表插入數(shù)據(jù)INSERTINTOstock_infoVALUES(1004,6750.00,2);INSERTINTOstock_infoVALUES(1011,4500.23,2);INSERTINTOstock_infoVALUES(1534,2234.00,2);INSERTINTOstock_infoVALUES(1535,3456.23,2);向關(guān)系表插入數(shù)據(jù)向顧客表插入數(shù)據(jù)向關(guān)系表插入數(shù)據(jù)向定貨單表插入數(shù)據(jù)

INSERTINTOpurchase_infoVALUES(1001,1,SYSDATE,‘10-5月-1997',NULL,NULL,NULL,NULL);INSERTINTOpurchase_infoVALUES(2001,2,SYSDATE,‘20-5月-1997','55MadisonAve','Madison','WI','53715');向定貨單條目插入數(shù)據(jù)INSERTINTOitems_infoVALUES(01,1001,1534,12,0);INSERTINTOitems_infoVALUES(02,1001,1535,10,10);INSERTINTOitems_infoVALUES(10,2001,1004,1,0);INSERTINTOitems_infoVALUES(11,2001,1011,2,1);向關(guān)系表插入數(shù)據(jù)向定貨單表插入數(shù)據(jù)關(guān)系表的查詢查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息(多表連接)SELECTC.custno,C.custname,C.street,C.city,C.state,C.zip,C.phone1,C.phone2,C.phone3,P.pono,P.orderdate,L.stockno,L.lineitemno,L.quantity,L.discountFROMcustomer_infoC,purchase_infoP,items_infoLWHEREC.custno=P.custnoANDP.pono=L.ponoANDP.pono=1001;關(guān)系表的查詢查詢訂貨單1001的顧客信息和訂貨詳細(xì)信息關(guān)系表的查詢SELECTP.pono,C.custname,P.orderdate,cursor(selectstockno,lineitemno,quantity,discountfromitems_infowherepono=p.pono)細(xì)目表見(jiàn)下FROMcustomer_infoC,purchase_infoPWHEREP.custno=C.custnoANDP.pono=2001關(guān)系表的查詢SELECTP.pono,C.custna關(guān)系表的查詢

PONOCUSTNAMEORDERDATE細(xì)目表見(jiàn)下-------------------------------------------------------------------2001JohnNike14-10月-00CURSOR…:4CURSORSTATEMENT:4STOCKNOLINEITEMNOQUANTITYDISCOUNT------------------------------------------------------------------1004101010111121關(guān)系表的查詢PONOCUSTNAMEORDERDA數(shù)據(jù)操縱--查詢數(shù)據(jù)統(tǒng)計(jì)每一個(gè)訂貨單的總價(jià)值SELECTL.pono,SUM(S.cost*L.quantity)FROMitems_infoL,stock_infoSWHEREL.stockno=S.stocknoGROUPBYL.pono;查詢涉及貨物1004的訂貨單及訂貨條目信息SELECTP.pono,P.custno,L.stockno,L.lineitemno,L.quantity,L.discountFROMpurchase_infoP,items_infoLWHEREP.pono=L.ponoANDL.stockno=1004;數(shù)據(jù)操縱--查詢數(shù)據(jù)統(tǒng)計(jì)每一個(gè)訂貨單的總價(jià)值數(shù)據(jù)操縱--維護(hù)數(shù)據(jù)修改數(shù)據(jù):更改1001訂貨單中貨物號(hào)為1535的訂貨量UPDATEitems_infoSETquantity=20WHEREpono=1001ANDstockno=1535;刪除數(shù)據(jù):刪除編號(hào)為1001的訂貨單DELETEFROMitems_info(先刪細(xì)目表記錄)WHEREpono=1001;DELETEFROMpurchase_info(再刪主表記錄)WHEREpono=1001;數(shù)據(jù)操縱--維護(hù)數(shù)據(jù)修改數(shù)據(jù):三、采用對(duì)象表面向?qū)ο蠼鉀Q方案定義類(lèi)型及類(lèi)型體創(chuàng)建對(duì)象表對(duì)象表的數(shù)據(jù)操作三、采用對(duì)象表面向?qū)ο蠼鉀Q方案實(shí)現(xiàn)對(duì)象關(guān)系的方法O-R對(duì)象關(guān)系方法用戶自定義數(shù)據(jù)類(lèi)型使得復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)入數(shù)據(jù)庫(kù)模式中。不將address拆散,也不將聯(lián)系電話存為不相關(guān)的多列,在O-R中可以定義特殊的類(lèi)型表示。不將訂貨條目以單獨(dú)表管理,O-R中將他們作為相應(yīng)訂貨表的嵌套表。收集類(lèi)型作為多值屬性在O-R方法中,主要實(shí)體顧客,貨物,訂貨單變?yōu)閷?duì)象。對(duì)象引用表示他們之間n:1的關(guān)系,實(shí)現(xiàn)對(duì)象關(guān)系的方法O-R對(duì)象關(guān)系方法定義類(lèi)型定貨系統(tǒng)中的類(lèi)型:地址address_t對(duì)象類(lèi)型多個(gè)電話phone_list_t變長(zhǎng)數(shù)組類(lèi)型顧客customer_info_t對(duì)象類(lèi)型貨物stock_info_t對(duì)象類(lèi)型貨物條目line_item_t對(duì)象類(lèi)型多個(gè)貨物條目line_item_list_t嵌套表類(lèi)型定貨單purchase_info_t對(duì)象類(lèi)型

定義類(lèi)型定貨系統(tǒng)中的類(lèi)型:定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示地址信息CREATETYPEaddress_tASOBJECT(streetVARCHAR2(200),cityVARCHAR2(200),stateCHAR(2),zipVARCHAR2(20));定義一個(gè)數(shù)組類(lèi)型,表示顧客的幾部電話CREATETYPEphone_list_tASVARRAY(10)OFVARCHAR2(20);定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示地址信息定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨條目信息CREATETYPEline_item_tASOBJECT(lineitemnoNUMBER,STOCKREFREFstock_info_t,quantityNUMBER,discountNUMBER);定義一個(gè)嵌套表類(lèi)型,表示定貨單中的貨物條目信息CREATETYPEline_item_list_tASTABLEOFline_item_t;定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨條目信息定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示顧客CREATETYPEcustomer_info_tASOBJECT(custnoNUMBER,custnameVARCHAR2(200),addressaddress_t,phone_listphone_list_t,ORDERMEMBERFUNCTIONcust_order(xINcustomer_info_t)RETURNINTEGER,PRAGMARESTRICT_REFERENCES(cust_order,WNDS,WNPS,RNPS,RNDS));定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示顧客定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示貨物信息CREATETYPEstock_info_tASOBJECT(stocknoNUMBER,costNUMBER,tax_codeNUMBER);定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示貨物信息定義類(lèi)型定義一個(gè)對(duì)象類(lèi)型表示定貨單CREATETYPEpurchase_info_tASOBJECT(ponoNUMBER,custrefREFcustomer_info_t,orderdateDATE,shipdateDATE,line_item_listline_item_list_t,shiptoaddraddress_t,MAPMEMBERFUNCT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論