综合实例定货系统订货系统—对象关系的设计与实现一、系统简介二、采用关系方法三、采用对象表四、采用对象视图一、系统简介系统涉及的实体和联系顾客表,Customer_Info货物表,Stock_Info订货单,purchase_info细目表Items_infoCustomer_Infopurchase_infoStock_Infoitems_infomn1mmn11顾客信息顾客表,Customer_Info编号顾客名地址邮编电话1电话2电话31JeanNance2AvocetDrive,RedwoodShores,CA95054415-555-12122JohnNike323CollegeDrive,Edison,NJ08820609-555-1212201-555-1212货物信息货物表,Stock_Info货物号价格税率10046750.00210114500.23215342234.00215353456.232定货信息订货单,purchase_info定货条目(细目表)items_info单号顾客定货日期发货日期到货街道到货城市邮编200121-1-9620-5-9810011条目编号单号货物数量折扣011001153412002100115351010102001100410112001101121二、采用关系方法关系表的定义对关系表的数据操纵基于关系表的查询与统计关系数据库的解决方案采用关系方法将顾客信息,订货单,货物条目清单组织成表。将地址拆成为基本元素,如省、市、街道、邮编等。设置顾客的一个可能拥有电话的最大限度,每一个电话表示为表的一列。关系方法将订货条目从订货单中分离出来,单独存放在一张表中,该表中有指向订货单表和货物表的外键。关系表的定义采用关系模型实现对现实世界的抽象。将实体定义为关系(表)。实体间的联系通过外来码或关系表实现。表中的字段必须是不可分割的基本单位。不允许表中嵌表。通过表的连接实现多表查询。CREATETABLEcustomer_info(custnoNUMBERPRIMARYKEY,custnameVARCHAR2(200),streetVARCHAR2(200),cityVARCHAR2(200),stateVARCHAR2(200),zipVARCHAR2(6),phone1VARCHAR2(20),phone2VARCHAR2(20),phone3VARCHAR2(20));建立顾客表建立货物表CREATETABLEstock_info(stocknoNUMBERPRIMARYKEY,costNUMBER,tax_codeNUMBER);CREATETABLEpurchase_info(ponoNUMBERPRIMARYKEY,custnoNUMBERREFERENCEScustomer_info(custno),orderdateDATE,shiptodateDATE,shiptostreetVARCHAR2(200),shiptocityVARCHAR2(200),shiptostateVARCHAR2(200),shiptozipVARCHAR2(20));建立定货表建立细目表CREATETABLEitems_info(lineitemnoNUMBER,ponoNUMBERREFERENCESpurchase_info(pono),stocknoNUMBERREFERENCESstock_info(stockno),quantityNUMBER,discountNUMBER,PRIMARYKEY(pono,lineitemno));向关系表插入数据向顾客表插入数据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);向货物表插入数据INSERTINTOstock_infoVALUES(1004,6750.00,2);INSERTINTOstock_infoVALUES(1011,4500.23,2);INSERTINTOstock_infoVALUES(1534,2234.00,2);INSERTINTOstock_infoVALUES(1535,3456.23,2);向关系表插入数据向定货单表插入数据INSERTINTOpurchase_infoVALUES(1001,1,SYSDATE,‘10-5月-1997',NULL,NULL,NULL,NULL);INSERTINTOpurchase_infoVALUES(2001,2,SYSDATE,‘20-5月-1997','55MadisonAve','Madison','WI','53715');向定货单条目插入数据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);关系表的查询查询订货单1001的顾客信息和订货详细信息(多表连接)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;关系表的查询SELECTP.pono,C.custname,P.orderdate,cursor(selectstockno,lineitemno,quantity,discountfromitems_infowherepono=p.pono)细目表见下FROMcustomer_infoC,purchase_infoPWHEREP.custno=C.custnoANDP.pono=2001关系表的查询PONOCUSTNAMEORDERDATE细目表见下-------------------------------------------------------------------2001JohnNike14-10月-00CURSOR…:4CURSORSTATEMENT:4STOCKNOLINEITEMNOQUANTITYDISCOUNT------------------------------------------------------------------1004101010111121数据操纵--查询数据统计每一个订货单的总价值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;数据操纵--维护数据修改数据:更改1001订货单中货物号为1535的订货量UPDATEitems_infoSETquantity=20WHEREpono=1001ANDstockno=1535;删除数据:删除编号为1001的订货单DELETEFROMitems_info(先删细目表记录)WHEREpono=1001;DELETEFROMpurchase_info(再删主表记录)WHEREpono=1001;三、采用对象表面向对象解决方案定义类型及类型体创建对象表对象表的数据操作实现对象关系的方法O-R对象关系方法用户自定义数据类型使得复杂数据结构进入数据库模式中。不将address拆散,也不将联系电话存为不相关的多列,在O-R中可以定义特殊的类型表示。不将订货条目以单独表管理,O-R中将他们作为相应订货表的嵌套表。收集类型作为多值属性在O-R方法中,主要实体顾客,货物,订货单变为对象。对象引用表示他们之间n:1的关系,定义类型定货系统中的类型:地址address_t对象类型多个电话phone_list_t变长数组类型顾客customer_info_t对象类型货物stock_info_t对象类型货物条目line_item_t对象类型多个货物条目line_item_list_t嵌套表类型定货单purchase_info_t对象类型定义类型定义一个对象类型表示地址信息CREATETYPEaddress_tASOBJECT(streetVARCHAR2(200),cityVARCHAR2(200),stateCHAR(2),zipVARCHAR2(20));定义一个数组类型,表示顾客的几部电话CREATETYPEphone_list_tASVARRAY(10)OFVARCHAR2(20);定义类型定义一个对象类型表示定货条目信息CREATETYPEline_item_tASOBJECT(lineitemnoNUMBER,STOCKREFREFstock_info_t,quantityNUMBER,discountNUMBER);定义一个嵌套表类型,表示定货单中的货物条目信息CREATETYPEline_item_list_tASTABLEOFline_item_t;定义类型定义一个对象类型表示顾客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));定义类型定义一个对象类型表示货物信息CREATETYPEstock_info_tASOBJECT(stocknoNUMBER,costNUMBER,tax_codeNUMBER);定义类型定义一个对象类型表示定货单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,PRAGMARESTR