Oracle订货系统综合知识概述.pptx
《Oracle订货系统综合知识概述.pptx》由会员分享,可在线阅读,更多相关《Oracle订货系统综合知识概述.pptx(97页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、综合实例定货系统订货系统对象关系的设计与实现n一、系统简介n二、采用关系方法n三、采用对象表n四、采用对象视图一、系统简介n系统涉及的实体和联系=顾客表,Customer_Info=货物表,Stock_Info=订货单,purchase_info=细目表 Items_infoCustomer_Infopurchase_infoStock_Infoitems_infomn1mmn11顾客信息n顾客表,Customer_Info货物信息n货物表,Stock_Info定货信息n订货单,purchase_infon定货条目(细目表)items_info二、采用关系方法n关系表的定义n对关系表的数据操纵
2、n基于关系表的查询与统计关系数据库的解决方案n采用关系方法将顾客信息,订货单,货物条目清单组织成表。n将地址拆成为基本元素,如省、市、街道、邮编等。n设置顾客的一个可能拥有电话的最大限度,每一个电话表示为表的一列。n关系方法将订货条目从订货单中分离出来,单独存放在一张表中,该表中有指向订货单表和货物表的外键。关系表的定义n采用关系模型实现对现实世界的抽象。n将实体定义为关系(表)。n实体间的联系通过外来码或关系表实现。n表中的字段必须是不可分割的基本单位。n不允许表中嵌表。n通过表的连接实现多表查询。CREATE TABLE customer_info(custno NUMBER PRIMAR
3、Y KEY,custname VARCHAR2(200),street VARCHAR2(200),city VARCHAR2(200),state VARCHAR2(200),zip VARCHAR2(6),phone1 VARCHAR2(20),phone2 VARCHAR2(20),phone3 VARCHAR2(20);建立顾客表建立货物表CREATE TABLE stock_info(stockno NUMBER PRIMARY KEY,cost NUMBER,tax_code NUMBER);CREATE TABLE purchase_info(ponoNUMBER PRIMARY
4、 KEY,custnoNUMBER REFERENCES customer_info(custno),orderdateDATE,shiptodateDATE,shiptostreetVARCHAR2(200),shiptocityVARCHAR2(200),shiptostate VARCHAR2(200),shiptozipVARCHAR2(20);建立定货表建立细目表CREATE TABLE items_info(lineitemno NUMBER,pono NUMBER REFERENCES purchase_info(pono),stockno NUMBER REFERENCES s
5、tock_info(stockno),quantity NUMBER,discount NUMBER,PRIMARY KEY(pono,lineitemno);向关系表插入数据n向顾客表插入数据INSERT INTO customer_info VALUES(1,Jean Nance,2 Avocet Drive,Redwood Shores,CA,95054,415-555-1212,NULL,NULL);INSERT INTO customer_info VALUES(2,John Nike,323 College Drive,Edison,NJ,08820,609-555-1212,20
6、1-555-1212,NULL);n向货物表插入数据INSERT INTO stock_info VALUES(1004,6750.00,2);INSERT INTO stock_info VALUES(1011,4500.23,2);INSERT INTO stock_info VALUES(1534,2234.00,2);INSERT INTO stock_info VALUES(1535,3456.23,2);向关系表插入数据n向定货单表插入数据 INSERT INTO purchase_info VALUES(1001,1,SYSDATE,10-5月-1997,NULL,NULL,NU
7、LL,NULL);INSERT INTO purchase_info VALUES(2001,2,SYSDATE,20-5月-1997,55 Madison Ave,Madison,WI,53715);n向定货单条目插入数据INSERT INTO items_info VALUES(01,1001,1534,12,0);INSERT INTO items_info VALUES(02,1001,1535,10,10);INSERT INTO items_info VALUES(10,2001,1004,1,0);INSERT INTO items_info VALUES(11,2001,101
8、1,2,1);关系表的查询查询订货单1001的顾客信息和订货详细信息(多表连接)SELECT C.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.discount FROM customer_info C,purchase_info P,items_info L WHERE C.custno=P.custno AND P.pono=L.pono AND P.pono=1001;关系表的
9、查询SELECT P.pono,C.custname,P.orderdate,cursor(select stockno,lineitemno,quantity,discount from items_info where pono=p.pono)细目表见下FROM customer_info C,purchase_info PWHERE P.custno=C.custno AND P.pono=2001关系表的查询 PONO CUSTNAME ORDERDATE 细目表见下-2001 John Nike 14-10月-00 CURSOR :4CURSOR STATEMENT:4 STOCKN
10、O LINEITEMNO QUANTITY DISCOUNT-1004 10 1 0 1011 11 2 1数据操纵-查询数据n统计每一个订货单的总价值SELECT L.pono,SUM(S.cost*L.quantity)FROM items_info L,stock_info SWHERE L.stockno=S.stockno GROUP BY L.pono;n查询涉及货物1004 的订货单及订货条目信息SELECT P.pono,P.custno,L.stockno,L.lineitemno,L.quantity,L.discountFROM purchase_info P,items
11、_info L WHERE P.pono=L.pono AND L.stockno=1004;数据操纵-维护数据n修改数据:=更改1001订货单中货物号为1535的订货量UPDATE items_info SET quantity=20 WHERE pono=1001 AND stockno=1535;n删除数据:=删除编号为1001的订货单DELETE FROM items_info (先删细目表记录)WHERE pono=1001;DELETE FROM purchase_info(再删主表记录)WHERE pono=1001;三、采用对象表q 面向对象解决方案q 定义类型及类型体q 创建
12、对象表q 对象表的数据操作实现对象关系的方法nO R 对象关系方法n用户自定义数据类型使得复杂数据结构进入数据库模式中。n不将address拆散,也不将联系电话存为不相关的多列,在OR中可以定义特殊的类型表示。n不将订货条目以单独表管理,OR中将他们作为相应订货表的嵌套表。n收集类型作为多值属性n在OR方法中,主要实体 顾客,货物,订货单变为对象。n对象引用表示他们之间n:1的关系,定义类型n定货系统中的类型:=地址 address_t 对象类型=多个电话 phone_list_t 变长数组类型 =顾客 customer_info_t 对象类型 =货物 stock_info_t 对象类型 =货
13、物条目 line_item_t 对象类型=多个货物条目 line_item_list_t 嵌套表类型=定货单 purchase_info_t 对象类型 定义类型n定义一个对象类型表示地址信息CREATE TYPE address_t AS OBJECT(street VARCHAR2(200),city VARCHAR2(200),state CHAR(2),zip VARCHAR2(20);n定义一个数组类型,表示顾客的几部电话CREATE TYPE phone_list_t AS VARRAY(10)OF VARCHAR2(20);定义类型n定义一个对象类型表示定货条目信息CREATE T
14、YPE line_item_t AS OBJECT(lineitemno NUMBER,STOCKREF REF stock_info_t,quantity NUMBER,discount NUMBER );n定义一个嵌套表类型,表示定货单中的货物条目信息CREATE TYPE line_item_list_t AS TABLE OF line_item_t;定义类型n定义一个对象类型表示顾客CREATE TYPE customer_info_t AS OBJECT(custno NUMBER,custname VARCHAR2(200),address address_t,phone_lis
15、t phone_list_t,ORDER MEMBER FUNCTION cust_order(x IN customer_info_t)RETURN INTEGER,PRAGMA RESTRICT_REFERENCES(cust_order,WNDS,WNPS,RNPS,RNDS);定义类型n定义一个对象类型表示货物信息CREATE TYPE stock_info_t AS OBJECT(stockno NUMBER,cost NUMBER,tax_code NUMBER );定义类型n定义一个对象类型表示定货单CREATE TYPE purchase_info_t AS OBJECT(po
16、no NUMBER,custref REF customer_info_t,orderdate DATE,shipdate DATE,line_item_list line_item_list_t,shiptoaddr address_t,MAP MEMBER FUNCTION ret_value RETURN NUMBER,PRAGMA RESTRICT_REFERENCES(ret_value,WNDS,WNPS,RNPS,RNDS),MEMBER FUNCTION total_value RETURN NUMBER,PRAGMA RESTRICT_REFERENCES (total_va
17、lue,WNDS,WNPS);嵌套表和可变数组的比较n对顾客中的电话来说=VARRAY的元素是有序的=VARRAY要求预置元素数目n对定货单中的货物条目来说=嵌套表没有上界的限制=嵌套表可以直接做查询=可以对嵌套表做索引定义方法n定义customer_info_t对象类型的方法:CREATE OR REPLACE TYPE BODY customer_info_t AS ORDER MEMBER FUNCTION cust_order(x IN customer_info_t)RETURN INTEGER IS BEGIN RETURN custno-x.custno;END;END;顾客对象
18、的比较是顾客号的比较定义方法n定义purchase_info_t对象类型的方法:CREATE OR REPLACE TYPE BODY purchase_info_t AS MAP MEMBER FUNCTION ret_value RETURN NUMBER IS BEGIN RETURN pono;END;定义方法 MEMBER FUNCTION total_value RETURN NUMBER IS i INTEGER;stock stock_info_t;-(stockno,cost,tax_code)line_item line_item_t;-(lineitemno STOCKR
19、EF quantity discount)total NUMBER:=0;BEGIN FOR i IN 1.SELF.line_item_list.COUNT LOOP line_item:=SELF.line_item_list(i);SELECT DEREF(line_item.stockref)INTO stock FROM DUAL;total:=total+line_item.quantity*stock.cost;END LOOP;RETURN total;END;END;创建对象表n一般来讲,可以按下面规则理解“对象”和“表”之间的关系:=类,即客观世界的实体,对应于表=对象属性
20、对应于表的列=对象对应于表的记录n每一个表是一个隐式的类,它的对象(记录)都有相同的属性(列)创建对象表n定义对象表customer_tabCREATE TABLE customer_tab OF customer_info_t(custno PRIMARY KEY);n对象类型包含四个属性:=custno NUMBER=custname VARCHAR2(200)=address address_t=phone_list phone_list_t创建对象表n对象类型作为创建对象表的模板n约束用于表上,不能定义在类型上(如PRIMARY KEY的约束定义)n表可以包含对象列,由于变长数组pho
21、ne_list_t包含的数量少于10 x20,所以ORACLE将其作为一个存储单元,当超过4000byte时,将以BLOB类型存于表外n不为对象类型分配存储空间,仅为表分配记录空间 创建对象表n对象表stock_tab的定义:CREATE TABLE stock_tab OF stock_info_t(stockno PRIMARY KEY);nSTOCK_INFO_T对象类型包含三个属性:=stockno NUMBER,=cost NUMBER,=tax_code NUMBER创建对象表n对象表purchase_tab的定义:CREATE TABLE purchase_tab OF purc
22、hase_info_t(PRIMARY KEY(pono),SCOPE FOR(custref)IS customer_tab )NESTED TABLE line_item_list STORE AS po_line_tab;npurchase_info_T对象类型的属性包括:=pono NUMBER,=custref REF customer_info_t,=orderdate DATE,=shipdate DATE,=line_item_list line_item_list_t,=shiptoaddr address_t创建对象表n REF操作符:=如果未作限制,REF允许引用任意类型
23、为customer_info_t表的行对象。=SCOPE 约束只是限制purchase_tab对象表的custref列的取值范围。n 嵌套表:=十分适合于表示表间的主从关系,从而可以避免DML中的关系联接(JOIN)。=一个嵌套表的所有记录存储在一个独立的存储表中,在该存储表中有一个隐含的列NESTED_TABLE_ID与相应的父表记录相对应,在嵌套表中的记录与父表中的记录根据NESTED_TABLE_ID对应。=嵌套表类型的各个属性对应于存储表的各列。维护嵌套表n修改嵌套表的存储表 ALTER TABLE po_line_tab ADD(SCOPE FOR(stockref)IS stock
24、_tab);ALTER TABLE po_line_tab STORAGE(NEXT 5K PCTINCREASE 5 MINEXTENTS 1 MAXEXTENTS 20);n插入stock_tab数据INSERT INTO stock_tab VALUES(1004,6750.00,2);INSERT INTO stock_tab VALUES(1011,4500.23,2);INSERT INTO stock_tab VALUES(1534,2234.00,2);INSERT INTO stock_tab VALUES(1535,3456.23,2);向对象表插入数据n插入custome
25、r_tab数据INSERT INTO customer_tab VALUES(1,Jean Nance,address_t(2 Avocet Drive,Redwood Shores,CA,95054),phone_list_t(415-555-1212);INSERT INTO customer_tab VALUES(2,John Nike,address_t(323 College Drive,Edison,NJ,08820),phone_list_t(609-555-1212,201-555-1212);向对象表插入数据向对象表插入数据n插入purchase_tab数据INSERT IN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 订货 系统 综合 知识 概述
限制150内