版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库原理与应用第10章Oracle综合实例1数据库原理与应用第10章Oracle综合实例1学习目标●掌握数据库设计的基本步骤和方法。●掌握利用Java和PowerBuilder连接Oracle数据库的方法。2学习目标●掌握数据库设计的基本步骤和方法。210.1系统功能分析10.2系统数据库设计10.3连接Oracle数据库10.4小结第10章Oracle综合实例
310.1系统功能分析10.2系统数据库设计10.310.1系统功能分析
本章以进销存系统为例来介绍数据库设计的过程,系统功能分析是在汇总系统开发的总体任务的基础上完成。本系统中的进销存管理系统需要完成商品管理、仓库管理、客户管理、供应商管理、库存管理、商品销售管理、商品供应管理等多个功能,满足企业高效率的需求,系统功能模块如图10-1所示。
进销存系统商品管理模块客户管理模块供应商管理模块仓库管理模块商品销售模块商品供应模块商品库存模块410.1系统功能分析本章以进销存系统为例来介绍数据库设10.2系统数据库设计10.1系统功能分析10.3连接Oracle数据库10.4小结第10章Oracle综合实例
510.2系统数据库设计10.1系统功能分析10.310.2.1需求分析10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器610.2.1需求分析10.2.2概念结构设计需求分析
系统开发的目标是实现企业进销存管理的系统化、规划化和自动化,基本要求如下:(1)客户管理:对整个销售过程进行管理,对销售对象进行统计。(2)供应商管理:对整个供应过程进行管理,对供应对象进行统计。(3)仓库管理:对仓库信息进行管理。(4)商品管理:对系统销售/供应过程中的商品进行管理。(5)进/退货管理:对整个供应过程中发生的进货/退货进行跟踪统计。(6)售/退货管理:对整个销售过程中发生的进货/退货进行跟踪统计。(7)库存管理:对商品入/出仓库进行跟踪统计。710.2.1需求分析系统开发的目标是实现企业进销存管理10.2.1需求分析
通过对企业进销存管理的内容和数据流程分析,系统的数据结构如表10-1所示。
数据结构名含义组成客户信息(Customer)对销售客户进行记录、统计客户编码、客户名称、地址、电话、邮编供应商信息(Supplier)对供应商进行记录、统计供应商编码、供应商名称、地址、电话、邮编、联系人仓库信息(StoreHouse)对仓库进行记录、统计仓库编码、地址、电话、成立时间商品信息(ProductClass)对商品进行记录、统计商品编号、商品名称、单价、规格810.2.1需求分析通过对企业进销存管理的内容和数据流10.2.1需求分析
系统的数据项如表10-2~10-5所示。
数据项名含义类型长度约束Supplier_ID
供应商编号INT
惟一标识Supplier_Name供应商名称VARCHAR2250非空Address地址VARCHAR2250非空Phone电话VARCHAR225
PostalCode邮编VARCHAR210
ConstactPerson联系人VARCHAR220
910.2.1需求分析系统的数据项如表10-2~10-510.2.1需求分析
数据项名含义类型长度约束Customer_ID
客户编号INT
惟一标识Customer_Name客户名称VARCHAR2250非空Address地址VARCHAR2250非空Phone电话VARCHAR225
PostalCode邮编VARCHAR210
1010.2.1需求分析数据项名含义类型长度约束Custo10.2.1需求分析
数据项名含义类型长度约束StoreHouse_ID
仓库编号INT
惟一标识Address地址VARCHAR2250非空Phone电话VARCHAR225
CreateDate成立时间DATE
1110.2.1需求分析数据项名含义类型长度约束Store10.2.1需求分析
数据项名含义类型长度小数位约束ProductClass_ID
商品编号INT
惟一标识ProductClass_Name商品名称VARCHAR230
非空ProductSpec_ID商品规格VARCHAR230
非空Price
单价NUMBER52非空1210.2.1需求分析数据项名含义类型长度小数位约束Pr10.2.1需求分析
在实际应用中,系统中存在着各种联系:(1)一个仓库可以存储多种商品,一种商品只能存储在一个仓库,而且商品入库或出库时记录是入库还是出库,还记录时间、数量、经手人;(2)一个供应商可以供应多种商品,一种商品可以由多个供应商供应,而且供应商供应商品时记录是进货还是退货,还记录时间、变化数量、金额、经手人;(3)一个客户可以购买多种商品,一种商品可以由多个客户购买,而且客户购买或退商品时记录是卖货还是退货,还记录时间、变化数量、金额、经手人。因此,仓库与商品之间是一对多的联系,客户与商品之间是多对多的联系,供应商与商品之间是多对多的联系。由于在一个商品同一天可能多次存入同一仓库,因此增加入/出库编号以标识每一次库存操作;同理,由于一个客户同一天可能购买多次同一商品,因此增加售/退编号以标识每一次销售操作;一个供应商同一天可能多次供应同一商品,因此增加进/退编号以标识每一次供应操作。1310.2.1需求分析在实际应用中,系统中存在着各种联系10.2.2概念结构设计10.2.1需求分析10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器1410.2.2概念结构设计10.2.1需求分析概念结构设计
根据需求分析,进销存管理系统的E-R图如图10-2所示。
1510.2.2概念结构设计根据需求分析,进销存管理系统的10.2.3逻辑结构设计10.2.2概念结构设计10.2.1需求分析10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器1610.2.3逻辑结构设计10.2.2概念结构设计1010.2.3逻辑结构设计
根据概念模型向逻辑模型转换原则,进销存管理系统的逻辑结构为:(1)一个实体转换成一个关系,所以应有:供应商表(供应商编号、供应商名称、地址、电话、邮编、联系人)。客户表(客户编号、客户名称、地址、电话、邮编)。仓库表(仓库编号、地址、电话、成立时间)。商品表(商品编号、商品名称、单价、规格)。(2)一对多的联系,可以将一方的主键传到多方,成为多方的非主属性,还可以形成新的关系,双方的主键和联系本身的属性作为新关系的属性。1710.2.3逻辑结构设计根据概念模型向逻辑模型转换原则10.2.3逻辑结构设计
由于仓库与商品之间是一对多的联系,而且联系本身有属性,所以可以形成新关系:商品库存表(商品编号、仓库编号、入/出编号、入/出标志、时间、数量、经手人)由于在同一商品同一天可能多次存入同一仓库,因此商品编号、仓库编号和时间三者联合也很难惟一标识一次出入库行为,因此将入/出库编号作为商品库存表的主键,修改后的商品库存表为:商品库存表(商品编号、仓库编号、入/出编号、入/出标志、时间、数量、经手人)(3)多对多的联系形成一个新的关系,多方的主键和联系本身的属性作为新关系的属性,多方的主键联合作主键。由于商品和供应商、客户与商品之间是多对多的联系,所以形成新的关系:商品销售表(商品编号、客户编号、售/退编号、售/退标志、时间、变化数量、金额、经手人)
1810.2.3逻辑结构设计由于仓库与商品之间是一对多的联10.2.3逻辑结构设计
商品供应表(商品编号、供应商编号、进/退编号、进/退标志、时间、变化数量、金额、经手人)由于同一客户同一天可能购买多次同一商品,因此商品编号、客户编号和时间三者联合也很难惟一标识一次销售行为,而售/退编号是不可以重复的有规律的编号,因此将售/退编号作为商品销售表的主键,修改后的商品销售表为:商品销售表(商品编号、客户编号、售/退编号、售/退标志、时间、变化数量、金额、经手人)由于同一供应商同一天可能多次供应同一商品,因此商品编号、供应商编号和时间三者联合也很难惟一标识一次供应行为,而进/退编号是不可以重复的有规律的编号,因此将进/退编号作为商品供应表的主键,修改后的商品供应表为:商品供应表(商品编号、供应商编号、进/退编号、进/退标志、时间、变化数量、金额、经手人)1910.2.3逻辑结构设计商品供应表(商品编号、供应商编10.2.4在Oracle中创建表10.2.2概念结构设计10.2.3逻辑结构设计10.2.1需求分析10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器2010.2.4在Oracle中创建表10.2.2概念结10.2.4在Oracle数据库中创建表
CREATETABLESupplier
(
Supplier_ID
INT
PRIMARYKEY,Supplier_Name
VARCHAR2(250)
NOTNULL,Address
VARCHAR2(250)
NOTNULL,Phone
VARCHAR2(25),PostalCode
VARCHAR2(10),
ConstactPerson
VARCHAR2(20));
2110.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLECustomer
(Customer_ID
INT
PRIMARYKEY,Customer_Name
VARCHAR2(250)
NOTNULL,Address
VARCHAR2(250)
NOTNULL,Phone
VARCHAR2(25)
,
PostalCode
VARCHAR2(10)
);2210.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLEStoreHouse
(
StoreHouse_ID
INTPRIMARYKEY,
Address
VARCHAR2(250)
NOTNULL,
Phone
VARCHAR2(25),
CreateDate
DATE);
2310.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLEProductClass
(ProductClass_ID
INTPRIMARYKEY,
ProductClass_Name
VARCHAR2(30)
NOTNULL,
ProductSpec_ID
VARCHAR2(30)
NOTNULL,
Price
NUMBER(5,2)
NOT
NULL
);
2410.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLEP_C
(ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
Customer_ID
INT
REFERENCESCustomer(Customer_ID),
PC_IDINTPRIMARYKEY,
PC_markINT,
PC_timeDATE,
PC_amountNUMBER(6,2),
PC_sumNUMBER(10,2)
,PC_workerCHAR(10));
2510.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
为了实时统计每种商品销售情况,增加商品销售统计表。CREATETABLEC_ALL
/*商品销售统计表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
CA_amountNUMBER(6,2),
CA_sumNUMBER(10,2),PRIMARYKEY(ProductClass_ID)
);
2610.2.4在Oracle数据库中创建表为了实时统计每10.2.4在Oracle数据库中创建表
CREATETABLEP_S
(ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
Supplier_ID
INT
REFERENCESSupplier(Supplier_ID),
PS_IDINTPRIMARYKEY,
PS_markINT,
PS_timeDATE,
PS_amountNUMBER(6,2),
PS_sumNUMBER(10,2)
,PC_workerCHAR(10));
2710.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
为了实时统计每种商品供应情况,增加商品供应统计表。CREATETABLES_ALL
/*商品供应统计表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
Supplier_ID
INT
REFERENCESSupplier(Supplier_ID),
SA_amountNUMBER(6,2),
SA_sumNUMBER(10,2),PRIMARYKEY(Supplier_ID)
);
2810.2.4在Oracle数据库中创建表为了实时统计每10.2.4在Oracle数据库中创建表
CREATETABLEP_H
(ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
StoreHouse_ID
INT
REFERENCESStoreHouse(StoreHouse_ID),
PH_IDINTPRIMARYKEY,
PH_markINT,
PH_timeDATE,
PH_amountNUMBER(6,2),
PC_workerCHAR(10));
2910.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
为了实时统计每种商品库存情况,增加商品库存统计表。CREATETABLEH_ALL
/*商品库存统计表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
StoreHouse_ID
INT
REFERENCESStoreHouse(StoreHouse_ID),
HA_amountNUMBER(6,2),PRIMARYKEY(StoreHouse_ID));为了系统功能更加完善,可以增加其他统计表等,请读者自行分析。3010.2.4在Oracle数据库中创建表为了实时统计每10.2.5在Oracle中创建索引10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.1需求分析10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器3110.2.5在Oracle中创建索引10.2.2概念10.2.5在Oracle数据库中创建索引
在进销存系统中经常需要查询数据,因此可以根据查询要求在表中创建索引。例如,在商品名称上创建索引。CREATEINDEXp_name_indexONProductCLass(ProductClass_name);为了系统功能更加完善,可以增加其他索引,请读者自行分析。
3210.2.5在Oracle数据库中创建索引在进销存系统10.2.6在Oracle中创建视图10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.1需求分析10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器3310.2.6在Oracle中创建视图10.2.2概念10.2.6在Oracle数据库中创建视图
为了提高系统的隐蔽性和查询方便可以创建一些视图。CREATEVIEWP_S
_VIEW/*商品供应视图*/ASSELECTSupplier..Supplier_ID,
Supplier_Name
,
ProductClass.ProductClass_ID,ProductClass_Name
FROMSupplier
,ProductClass,P_SWHEREProductClass.ProductClass_ID=
P_S.ProductClass_IDANDSupplier.Supplier_ID=P_S.Supplier_IDWITHREADONLY;为了系统功能更加完善,可以增加其他视图,请读者自行分析。
3410.2.6在Oracle数据库中创建视图为了提高系统10.2.7在Oracle中创建序列10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.1需求分析10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器3510.2.7在Oracle中创建序列10.2.2概念10.2.7在Oracle数据库中创建序列
在进销存系统中商品销售过程中售/退编号是不可以重复的有规律的编号,且作为主键,其值可以用序列来填充。CREATESEQUENCEP_C_SQEINCREMENTBY1STARTWITH1MAXVALUE100000MINVALUE1CYCLECACHE20ORDER;同理,在商品供应过程中进/退编号是不可以重复的有规律的编号,且作为主键,其值也可以用序列来填充。为了系统功能更加完善,可以增加其他序列,请读者自行分析。
3610.2.7在Oracle数据库中创建序列在进销存系统10.2.8在Oracle中创建触发器10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.1需求分析3710.2.8在Oracle中创建触发器10.2.2概10.2.8在Oracle数据库中创建触发器
在进销存系统中有时某种商品的库存量太少会影响销售活动,所以当某商品的库存量太少时系统应自动告警,这时需要用到触发器。CREATETRIGGERP_H_TRIGGER/******为商品库存统计表创建缺货触发器,数量小于1000时触发********/AFTERDELETEORUPDATEONH_ALLFOREACHROWWHEN(HA_amount<1000)BEGINDBMS_OUTPUT.PUT_LINE('编号为:'||:NEW.ProductClass_ID||'的商品在'||:NEW.StoreHouse_ID||'号仓库库存总量小于1000');END;为了系统功能更加完善,可以增加其他触发器,请读者自行分析。
3810.2.8在Oracle数据库中创建触发器在进销存系10.2.9在Oracle中创建存储过程或存储函数10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.1需求分析10.2.8在Oracle中创建触发器3910.2.9在Oracle中创建存储过程或存储函数在Oracle数据库中创建存储过程或函数
在进销存系统中有时需要统计某供应商供应的商品名称列表,这时可以使用存储过程。CREATEPROCEDUREP_S_PRO(s1Supplier.Supplier_ID%TYPE)ASp1ProductClass.ProductClass_ID%TYPE;p2ProductClass.ProductClass_Name
%TYPE;Cursorc1ISSELECTProductClass_IDFROMP_SWHERESupplier_ID=s1;BEGINOPENc1;LOOPFETCHc1intop1;EXITWHENc1%NOTFOUND;
4010.2.9在Oracle数据库中创建存储过程或函数在10.2.9在Oracle数据库中创建存储过程或函数
SELECTProductClass_Name
intop2FROMProductClassWHEREProductClass_ID=p1;DBMS_OUTPUT.PUT_LINE(p2);ENDLOOP;CLOSEc1;END;为了系统功能更加完善,可以增加其他存储过程或函数,请读者自行分析。
4110.2.9在Oracle数据库中创建存储过程或函数S10.3连接Oracle数据库10.2系统数据库设计10.1系统功能分析10.4小结第10章Oracle综合实例
4210.3连接Oracle数据库10.2系统数据库设计110.3.1利用Java连接Oracle10.3连接Oracle数据库10.3.2利用PowerbBilder连接Oracle4310.3.1利用Java连接Oracle10.3连接10.3.1Java连接Oracle
Java利用JDBC(JavaDatabaseConnectivity,Java数据库连接)连接Oracle数据库。假设使用Oracle安装过程中创建的Oracle数据库“DBSEPI”。JDBC是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一的访问接口。JDBC由一组用Java语言编写的类与接口组成,通过调用这些类和接口所提供的方法,用户能够以一致的方式连接多种不同的数据库系统(如Access、Server2000、Oracle、Sybase等),进而使用标准的SQL语言来存取数据库中的数据,而不必再为每一种数据库系统编写不同的Java程序代主键。JDBC提供的主要功能如下:(1)同一个数据库建立连接;(2)向数据库发送SQL语句;(3)处理数据库返回的结果。4410.3.1Java连接OracleJava利用JD1.设置数据源
打开操作系统的控制面板,双击“数据源(ODBC)”图标,选择“用户DSN”选项卡,如图10-3所示,画面中显示了已有的数据源名称。
451.设置数据源打开操作系统的控制面板,双击“数据源(O1.设置数据源
单击“添加”按钮,出现建立新数据来源对话框,如图10-4所示。
461.设置数据源单击“添加”按钮,出现建立新数据来源对话1.设置数据源
选中“OracleinOraHome92”作为新数据源的驱动程序,单击“完成”按钮,出现OracleODBC驱动器配置窗口,如图10-5所示。
471.设置数据源选中“OracleinOraHome1.设置数据源
在“DataSourceName”编辑框输入数据源的名称,假设为
“dbspei”,在“TNSServerName”编辑框输入Oracle数据库的名称,假设使用Oracle安装过程中创建的数据库“dbsepi”,在“User”编辑框输入用户名“usepi”,单击“TestConnection”按钮,出现OracleODBC驱动连接窗口,如图10-6所示。
481.设置数据源在“DataSourceName”编1.设置数据源
在“ServerName”编辑框显示数据库的名称“dbspei”,在“UseName”编辑框显示用户名“usepi”,在“Password”编辑框输入密码“usepi”,单击“OK”按钮,如果配置正确,则出现连接成功窗口,如图10-7所示。
491.设置数据源在“ServerName”编辑框显示数2.建立JDBC-ODBC桥接器
在和某一特定数据库建立连接之前,必须首先加载一种可用的JDBC驱动程序。这需要使用java.sql包中的下列方法来加载JDBC驱动程序,一般的使用格式如下:Class.forName("DriverName");“DriverName”是要加载的JDBC驱动程序名称。驱动程序名称根据数据库厂商提供的JDBC驱动程序的种类来确定。由于本例采用的是Oracle数据库,所以加载Oracle数据库驱动程序的方法为:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");502.建立JDBC-ODBC桥接器在和某一特定数据库建立3.连接数据库
创建和指定数据库的连接需要使用DriverManager类的getConnection()方法,其一般的使用格式如下:Connectionconn=DriverManager.getConnection(URL,user,password);该方法返回的是一个Connection对象。这里的URL是一个字符串,代表了将要连接的数据源,即具体的数据库位置。不同的JDBC驱动程序其URL是不同的。本例为:Connectionconn=DriverManager.getConnection("jdbc:odbc:dbsepi","usepi","usepi");
513.连接数据库创建和指定数据库的连接需要使用Drive4.向数据库发送SQL语句
在与某个特定数据库建立连接之后,这个连接会话就可以用于发送SQL语句。在发送SQL语句之前,必须创建一个Statement类的对象,该对象负责将SQL语句发送给数据库。如果SQL语句运行后产生结果集,Statement对象会将结果集返回给一个ResultSet对象。例如:创建Statement对象是使用Connection接口的createStatement()方法来实现的:Statementsmt=conn.createStatement();Statement对象创建好之后,就可以使用该对象的executeQuery()方法来执行数据库查询语句,executeQuery()方法返回一个ResultSet类的对象,它包含了SQL查询语句执行的结果。例如:ResultSetrs=smt.executeQuery("SELECT*FROMstudent");
524.向数据库发送SQL语句在与某个特定数据库建立连接之5.处理查询结果
一个ResultSet对象包含了执行某个SQL语句后满足条件的所有的行,它还提供了对这些行的访问,用户可以通过一组get方法来访问当前行的不同列。通常结果集的形式是一张带有表头和相应数值的表,例如:
while(rs.next()){ out.print(""+rs.getString(1)); out.print(""+rs.getString(2)); out.print(""+rs.getString(3)+"<br>");
535.处理查询结果一个ResultSet对象包含了执行某6.关闭创建的各个对象
一个Statement对象在同一时间只能打开一个结果集,所以如果在同一个Statement对象中运行下一条SQL语句时,第一条SQL语句生成的ResultSet对象就被自动关闭了。当然也可以通过调用ResultSet接口的close()方法来手工关闭。关闭Statement对象和Connection对象可以分别使用各自的close()方法,例如:rs.close(); stmt.close(); conn.close();
546.关闭创建的各个对象一个Statement对象在同一10.3.2利用PowerbBilder连接Oracle10.3连接Oracle数据库10.3.1利用Java连接Oracle5510.3.2利用PowerbBilder连接Oracle10.3.2PowerBuilder连接Oracle
PowerBuilder连接Oracle数据库有两种方法,一是使用专用接口,二是使用通用接口。假设使用Oracle安装过程中创建的Oracle数据库“DBSEPI”。1.通过专用接口连接数据库PowerBuilder的专用接口都是为网络上的大型数据库提供的,如Sybase、Oracle、Informix、SQLServer等。因此,首先要调通网络,其次安装数据库和专用接口软件,接下来配置数据库的描述文件(Profile)。通过专用接口连接数据库需要首先创建数据库描述文件,然后利用数据库描述文件即可连接数据库了。Oracle数据库是大型分布式数据库,在PowerBuilder中通过专用接口“O90Oracle9.0.1”连接Oracle9数据库。连接步骤共分为创建数据库描述文件、连接数据库两步。
5610.3.2PowerBuilder连接OracleP10.3.2PowerBuilder连接Oracle
(1)创建数据库描述文件首先进入数据库描述文件配置窗口,如图10-8所示。
5710.3.2PowerBuilder连接Oracle(10.3.2PowerBuilder连接Oracle
在数据库描述文件窗口中选中“O90Oracle9.0.1”,单击鼠标右键,在快捷菜单中选中“NewProfile”,出现数据库描述文件配置窗口,选中“Connection”选项卡,如图10-9所示。
5810.3.2PowerBuilder连接Oracle在10.3.2PowerBuilder连接Oracle
在“ProfileName”编辑框输入用户命名的数据库描述文件名,假设为
“dbsepi”,在“Server”编辑框输入数据库名,假设使用Oracle安装过程中创建的数据库“dbsepi”,在“LoginID”编辑框输入用户名“usepi”,在“Password”编辑框输入该用户的密码“usepi”,在“Connectas”下拉列表中选择该用户的级别“SYSDBA”,其他选项不做修改,单击“OK”按钮即可保存此数据库描述文件,同时此数据库描述文件“dbsepi”出现在数据库画板对象窗口中“O90Oracle9.0.1”的级联列表中,如图10-10所示。
5910.3.2PowerBuilder连接Oracle在10.3.2PowerBuilder连接Oracle
(2)连接数据库在数据库画板中通过不同的数据库描述文件连接不同的数据库。选中要连接的数据库描述文件“dbsepi”,单击数据库画笔图标或单击鼠标右键,在快捷菜单中选中“Connect”即可连接指定的数据库了。
连接成功后,数据库描述文件“dbsepi”就显示在“O90Oracle9.0.1”级联列表中。
6010.3.2PowerBuilder连接Oracle(2.通过ODBC通用接口连接数据库
PowerBuilder通过ODBC通用接口可以连接各种数据库,如Access、Foxpro、Excel、Oracle、Syabse等。在PowerBuilder中通过通用接口ODBC连接Oracle数据库的步骤共分为配置ODBC数据源、创建数据库描述文件、连接数据库三步。
612.通过ODBC通用接口连接数据库PowerBuild2.通过ODBC通用接口连接数据库
(1)配置ODBC数据源在数据库画板对象窗口中依次单击“ODBODBC”→“Utilities”左边的“+”号,使之展开,如图10-11所示。
622.通过ODBC通用接口连接数据库(1)配置ODBC数2.通过ODBC通用接口连接数据库
选中“ODBCAdministrator”,双击鼠标左键,再参照图10-3、10-4、10-5、10-6、10-7完成ODBC数据源的配置。
(2)创建数据库描述文件在图10-11所示的数据库画板对象窗口中选中“ODBODBC”,单击鼠标右键,在快捷菜单中选中“NewProfile”,出现数据库描述文件配置窗口,选中“Connection”选项卡,如图10-12所示。
632.通过ODBC通用接口连接数据库选中“ODBCAd2.通过ODBC通用接口连接数据库
在“ProfileName”编辑框输入数据库描述文件名
“pb_oracle”,从“DataSource”下拉列表中选择ODBC数据源“dbsepi”,在“UserID”编辑框输入用户名“usepi”,在“Password”编辑框输入该用户的密码“usepi”,单击“OK”按钮即可完成数据库描述文件的建立。数据库描述文件创建成功后,该描述文件即出现在数据库画板对象窗口中“ODBODBC”的级联列表中。(3)连接数据库在数据库画板对象窗口中,选中要连接的数据库描述文件“pb_oracle”,单击数据库画笔图标或单击鼠标右键,在快捷菜单中选中“Connect”即可连接指定的数据库。
642.通过ODBC通用接口连接数据库在“Profile3.编写应用对象Open事件脚本
在PowerBuilder的应用对象的OPEN事件中编写如下脚本:SQLCA.DBMS="ODBC"SQLCA.AutoCommit=FalseSQLCA.DBPARM="CONNECTSTRING='DSN=pb_oracle;UID=usepi;PWD=usepi'"//此处连接的数据源为“pb_oracle”connect;ifSQLCA.SQLCODE=-1thenmessagebox('提示信息','数据库连接失败!')elsemessagebox('提示信息','数据库连接成功!')endif
653.编写应用对象Open事件脚本在PowerBuild4.向数据库发送SQL语句
PowerBuilder一般通过数据窗口对象与数据库连接,显示数据查询、更新的结果,数据窗口对象是一可视化编辑数据的窗口,所以应先创建一数据窗口对象(例如dw_1),利用dw_1.settransobject(SQLCA)语句连接数据库,利用dw_1.retrieve()来获取数据库中的数据,利用dw_1.insertrow()插入一行数据,在dw_1中可以向空行中添加或修改原有数据,利用dw_1.update()和COMMIT命令保存数据,利用dw_1.deleterow()删除一行数据。
664.向数据库发送SQL语句PowerBuilder一般5.断开数据库,释放资源
在PowerBuilder的应用对象的CLOSE事件中编写如下脚本:disconnect;//断开与数据库的连接关于具体编程已不属于本教材的内容,请读者查阅其他相关参考资料。
675.断开数据库,释放资源在PowerBuilder的应10.4小结10.2系统数据库设计10.3连接Oracle数据库10.1系统功能分析第10章Oracle综合实例
6810.4小结10.2系统数据库设计10.3连接Or10.4小结
(1)数据库设计包含需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行与维护六步,其中前三步是数据库设计成功与否的关键。(2)数据库设计过程中需求分析形成应用系统的数据字典,包含数据结构、数据项、处理要求等;概念结构设计形成应用系统的全局E-R图;逻辑结构设计形成由E-R图根据转换规则形成的数据库的模式;在实际应用设计过程中经常需要根据实际情况为应用系统添加视图、序列、存储过程、存储函数或触发器等数据库对象,以使数据库设计更加完善。(3)利用Java和PowerBuilder连接Oracle数据库的方法。
6910.4小结(1)数据库设计包含需求分析、概念结构设计数据库原理与应用第10章Oracle综合实例70数据库原理与应用第10章Oracle综合实例1学习目标●掌握数据库设计的基本步骤和方法。●掌握利用Java和PowerBuilder连接Oracle数据库的方法。71学习目标●掌握数据库设计的基本步骤和方法。210.1系统功能分析10.2系统数据库设计10.3连接Oracle数据库10.4小结第10章Oracle综合实例
7210.1系统功能分析10.2系统数据库设计10.310.1系统功能分析
本章以进销存系统为例来介绍数据库设计的过程,系统功能分析是在汇总系统开发的总体任务的基础上完成。本系统中的进销存管理系统需要完成商品管理、仓库管理、客户管理、供应商管理、库存管理、商品销售管理、商品供应管理等多个功能,满足企业高效率的需求,系统功能模块如图10-1所示。
进销存系统商品管理模块客户管理模块供应商管理模块仓库管理模块商品销售模块商品供应模块商品库存模块7310.1系统功能分析本章以进销存系统为例来介绍数据库设10.2系统数据库设计10.1系统功能分析10.3连接Oracle数据库10.4小结第10章Oracle综合实例
7410.2系统数据库设计10.1系统功能分析10.310.2.1需求分析10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器7510.2.1需求分析10.2.2概念结构设计需求分析
系统开发的目标是实现企业进销存管理的系统化、规划化和自动化,基本要求如下:(1)客户管理:对整个销售过程进行管理,对销售对象进行统计。(2)供应商管理:对整个供应过程进行管理,对供应对象进行统计。(3)仓库管理:对仓库信息进行管理。(4)商品管理:对系统销售/供应过程中的商品进行管理。(5)进/退货管理:对整个供应过程中发生的进货/退货进行跟踪统计。(6)售/退货管理:对整个销售过程中发生的进货/退货进行跟踪统计。(7)库存管理:对商品入/出仓库进行跟踪统计。7610.2.1需求分析系统开发的目标是实现企业进销存管理10.2.1需求分析
通过对企业进销存管理的内容和数据流程分析,系统的数据结构如表10-1所示。
数据结构名含义组成客户信息(Customer)对销售客户进行记录、统计客户编码、客户名称、地址、电话、邮编供应商信息(Supplier)对供应商进行记录、统计供应商编码、供应商名称、地址、电话、邮编、联系人仓库信息(StoreHouse)对仓库进行记录、统计仓库编码、地址、电话、成立时间商品信息(ProductClass)对商品进行记录、统计商品编号、商品名称、单价、规格7710.2.1需求分析通过对企业进销存管理的内容和数据流10.2.1需求分析
系统的数据项如表10-2~10-5所示。
数据项名含义类型长度约束Supplier_ID
供应商编号INT
惟一标识Supplier_Name供应商名称VARCHAR2250非空Address地址VARCHAR2250非空Phone电话VARCHAR225
PostalCode邮编VARCHAR210
ConstactPerson联系人VARCHAR220
7810.2.1需求分析系统的数据项如表10-2~10-510.2.1需求分析
数据项名含义类型长度约束Customer_ID
客户编号INT
惟一标识Customer_Name客户名称VARCHAR2250非空Address地址VARCHAR2250非空Phone电话VARCHAR225
PostalCode邮编VARCHAR210
7910.2.1需求分析数据项名含义类型长度约束Custo10.2.1需求分析
数据项名含义类型长度约束StoreHouse_ID
仓库编号INT
惟一标识Address地址VARCHAR2250非空Phone电话VARCHAR225
CreateDate成立时间DATE
8010.2.1需求分析数据项名含义类型长度约束Store10.2.1需求分析
数据项名含义类型长度小数位约束ProductClass_ID
商品编号INT
惟一标识ProductClass_Name商品名称VARCHAR230
非空ProductSpec_ID商品规格VARCHAR230
非空Price
单价NUMBER52非空8110.2.1需求分析数据项名含义类型长度小数位约束Pr10.2.1需求分析
在实际应用中,系统中存在着各种联系:(1)一个仓库可以存储多种商品,一种商品只能存储在一个仓库,而且商品入库或出库时记录是入库还是出库,还记录时间、数量、经手人;(2)一个供应商可以供应多种商品,一种商品可以由多个供应商供应,而且供应商供应商品时记录是进货还是退货,还记录时间、变化数量、金额、经手人;(3)一个客户可以购买多种商品,一种商品可以由多个客户购买,而且客户购买或退商品时记录是卖货还是退货,还记录时间、变化数量、金额、经手人。因此,仓库与商品之间是一对多的联系,客户与商品之间是多对多的联系,供应商与商品之间是多对多的联系。由于在一个商品同一天可能多次存入同一仓库,因此增加入/出库编号以标识每一次库存操作;同理,由于一个客户同一天可能购买多次同一商品,因此增加售/退编号以标识每一次销售操作;一个供应商同一天可能多次供应同一商品,因此增加进/退编号以标识每一次供应操作。8210.2.1需求分析在实际应用中,系统中存在着各种联系10.2.2概念结构设计10.2.1需求分析10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器8310.2.2概念结构设计10.2.1需求分析概念结构设计
根据需求分析,进销存管理系统的E-R图如图10-2所示。
8410.2.2概念结构设计根据需求分析,进销存管理系统的10.2.3逻辑结构设计10.2.2概念结构设计10.2.1需求分析10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器8510.2.3逻辑结构设计10.2.2概念结构设计1010.2.3逻辑结构设计
根据概念模型向逻辑模型转换原则,进销存管理系统的逻辑结构为:(1)一个实体转换成一个关系,所以应有:供应商表(供应商编号、供应商名称、地址、电话、邮编、联系人)。客户表(客户编号、客户名称、地址、电话、邮编)。仓库表(仓库编号、地址、电话、成立时间)。商品表(商品编号、商品名称、单价、规格)。(2)一对多的联系,可以将一方的主键传到多方,成为多方的非主属性,还可以形成新的关系,双方的主键和联系本身的属性作为新关系的属性。8610.2.3逻辑结构设计根据概念模型向逻辑模型转换原则10.2.3逻辑结构设计
由于仓库与商品之间是一对多的联系,而且联系本身有属性,所以可以形成新关系:商品库存表(商品编号、仓库编号、入/出编号、入/出标志、时间、数量、经手人)由于在同一商品同一天可能多次存入同一仓库,因此商品编号、仓库编号和时间三者联合也很难惟一标识一次出入库行为,因此将入/出库编号作为商品库存表的主键,修改后的商品库存表为:商品库存表(商品编号、仓库编号、入/出编号、入/出标志、时间、数量、经手人)(3)多对多的联系形成一个新的关系,多方的主键和联系本身的属性作为新关系的属性,多方的主键联合作主键。由于商品和供应商、客户与商品之间是多对多的联系,所以形成新的关系:商品销售表(商品编号、客户编号、售/退编号、售/退标志、时间、变化数量、金额、经手人)
8710.2.3逻辑结构设计由于仓库与商品之间是一对多的联10.2.3逻辑结构设计
商品供应表(商品编号、供应商编号、进/退编号、进/退标志、时间、变化数量、金额、经手人)由于同一客户同一天可能购买多次同一商品,因此商品编号、客户编号和时间三者联合也很难惟一标识一次销售行为,而售/退编号是不可以重复的有规律的编号,因此将售/退编号作为商品销售表的主键,修改后的商品销售表为:商品销售表(商品编号、客户编号、售/退编号、售/退标志、时间、变化数量、金额、经手人)由于同一供应商同一天可能多次供应同一商品,因此商品编号、供应商编号和时间三者联合也很难惟一标识一次供应行为,而进/退编号是不可以重复的有规律的编号,因此将进/退编号作为商品供应表的主键,修改后的商品供应表为:商品供应表(商品编号、供应商编号、进/退编号、进/退标志、时间、变化数量、金额、经手人)8810.2.3逻辑结构设计商品供应表(商品编号、供应商编10.2.4在Oracle中创建表10.2.2概念结构设计10.2.3逻辑结构设计10.2.1需求分析10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器8910.2.4在Oracle中创建表10.2.2概念结10.2.4在Oracle数据库中创建表
CREATETABLESupplier
(
Supplier_ID
INT
PRIMARYKEY,Supplier_Name
VARCHAR2(250)
NOTNULL,Address
VARCHAR2(250)
NOTNULL,Phone
VARCHAR2(25),PostalCode
VARCHAR2(10),
ConstactPerson
VARCHAR2(20));
9010.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLECustomer
(Customer_ID
INT
PRIMARYKEY,Customer_Name
VARCHAR2(250)
NOTNULL,Address
VARCHAR2(250)
NOTNULL,Phone
VARCHAR2(25)
,
PostalCode
VARCHAR2(10)
);9110.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLEStoreHouse
(
StoreHouse_ID
INTPRIMARYKEY,
Address
VARCHAR2(250)
NOTNULL,
Phone
VARCHAR2(25),
CreateDate
DATE);
9210.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLEProductClass
(ProductClass_ID
INTPRIMARYKEY,
ProductClass_Name
VARCHAR2(30)
NOTNULL,
ProductSpec_ID
VARCHAR2(30)
NOTNULL,
Price
NUMBER(5,2)
NOT
NULL
);
9310.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
CREATETABLEP_C
(ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
Customer_ID
INT
REFERENCESCustomer(Customer_ID),
PC_IDINTPRIMARYKEY,
PC_markINT,
PC_timeDATE,
PC_amountNUMBER(6,2),
PC_sumNUMBER(10,2)
,PC_workerCHAR(10));
9410.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
为了实时统计每种商品销售情况,增加商品销售统计表。CREATETABLEC_ALL
/*商品销售统计表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
CA_amountNUMBER(6,2),
CA_sumNUMBER(10,2),PRIMARYKEY(ProductClass_ID)
);
9510.2.4在Oracle数据库中创建表为了实时统计每10.2.4在Oracle数据库中创建表
CREATETABLEP_S
(ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
Supplier_ID
INT
REFERENCESSupplier(Supplier_ID),
PS_IDINTPRIMARYKEY,
PS_markINT,
PS_timeDATE,
PS_amountNUMBER(6,2),
PS_sumNUMBER(10,2)
,PC_workerCHAR(10));
9610.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
为了实时统计每种商品供应情况,增加商品供应统计表。CREATETABLES_ALL
/*商品供应统计表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
Supplier_ID
INT
REFERENCESSupplier(Supplier_ID),
SA_amountNUMBER(6,2),
SA_sumNUMBER(10,2),PRIMARYKEY(Supplier_ID)
);
9710.2.4在Oracle数据库中创建表为了实时统计每10.2.4在Oracle数据库中创建表
CREATETABLEP_H
(ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
StoreHouse_ID
INT
REFERENCESStoreHouse(StoreHouse_ID),
PH_IDINTPRIMARYKEY,
PH_markINT,
PH_timeDATE,
PH_amountNUMBER(6,2),
PC_workerCHAR(10));
9810.2.4在Oracle数据库中创建表CREATE10.2.4在Oracle数据库中创建表
为了实时统计每种商品库存情况,增加商品库存统计表。CREATETABLEH_ALL
/*商品库存统计表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
StoreHouse_ID
INT
REFERENCESStoreHouse(StoreHouse_ID),
HA_amountNUMBER(6,2),PRIMARYKEY(StoreHouse_ID));为了系统功能更加完善,可以增加其他统计表等,请读者自行分析。9910.2.4在Oracle数据库中创建表为了实时统计每10.2.5在Oracle中创建索引10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.1需求分析10.2.6在Oracle中创建视图10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器10010.2.5在Oracle中创建索引10.2.2概念10.2.5在Oracle数据库中创建索引
在进销存系统中经常需要查询数据,因此可以根据查询要求在表中创建索引。例如,在商品名称上创建索引。CREATEINDEXp_name_indexONProductCLass(ProductClass_name);为了系统功能更加完善,可以增加其他索引,请读者自行分析。
10110.2.5在Oracle数据库中创建索引在进销存系统10.2.6在Oracle中创建视图10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.1需求分析10.2.7在Oracle中创建序列10.2.9在Oracle中创建存储过程或存储函数10.2.8在Oracle中创建触发器10210.2.6在Oracle中创建视图10.2.2概念10.2.6在Oracle数据库中创建视图
为了提高系统的隐蔽性和查询方便可以创建一些视图。CREATEVIEWP_S
_VIEW/*商品供应视图*/ASSELECTSupplier..Supplier_ID,
Supplier_Name
,
ProductClass.ProductClass_ID,ProductClass_Name
FROMSupplier
,ProductClass,P_SWHEREProductClass.ProductClass_ID=
P_S.ProductClass_IDANDSupplier.Supplier_ID=P_S.Supplier_IDWITHREADONLY;为了系统功能更加完善,可以增加其他视图,请读者自行分析。
10310.2.6在Oracle数据库中创建视图为了提高系统10.2.7在Oracle中创建序列10.2.2概念结构设计10.2.3逻辑结构设计10.2.4在Oracle中创建表10.2系统数据库设计10.2.5在Oracle中创建索引10.2.6在Oracle中创建视图10.2.1需求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会所瓷砖装修项目合同
- 丽水市办公室装修合同范本
- 保险公司装修安全协议条款
- 橡胶制品氨水配送协议
- 书店装修保密协定
- 低碳环保家居装修合同范本
- 仓储物流中心改造装修合同
- 出租车运营合作协议
- 中铁物流机械设备运输协议
- 商业餐饮液化气配送协议
- 区块链技术在发票管理中的应用
- JJG 693-2011可燃气体检测报警器
- 农村夜校班国语试卷完整版
- 卖场布局与陈列智慧树知到期末考试答案2024年
- 2022年4月自考00409美育基础试题及答案含解析
- 卓阳储能品牌产品手册
- 山东省菏泽市2023-2024学年高一年级上册11月期中英语试题
- (2024年)生物实验室安全教育
- 自然拼读法对提高初中学生英语词汇拼写和拼读能力的研究
- 书香班级成果展示
- 奥林匹克运动课程第三章-现代奥林匹克运动的发展
评论
0/150
提交评论