版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與應(yīng)用第10章Oracle綜合實例1數(shù)據(jù)庫原理與應(yīng)用第10章Oracle綜合實例1學習目標●掌握數(shù)據(jù)庫設(shè)計的基本步驟和方法。●掌握利用Java和PowerBuilder連接Oracle數(shù)據(jù)庫的方法。2學習目標●掌握數(shù)據(jù)庫設(shè)計的基本步驟和方法。210.1系統(tǒng)功能分析10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.3連接Oracle數(shù)據(jù)庫10.4小結(jié)第10章Oracle綜合實例
310.1系統(tǒng)功能分析10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.310.1系統(tǒng)功能分析
本章以進銷存系統(tǒng)為例來介紹數(shù)據(jù)庫設(shè)計的過程,系統(tǒng)功能分析是在匯總系統(tǒng)開發(fā)的總體任務(wù)的基礎(chǔ)上完成。本系統(tǒng)中的進銷存管理系統(tǒng)需要完成商品管理、倉庫管理、客戶管理、供應(yīng)商管理、庫存管理、商品銷售管理、商品供應(yīng)管理等多個功能,滿足企業(yè)高效率的需求,系統(tǒng)功能模塊如圖10-1所示。
進銷存系統(tǒng)商品管理模塊客戶管理模塊供應(yīng)商管理模塊倉庫管理模塊商品銷售模塊商品供應(yīng)模塊商品庫存模塊410.1系統(tǒng)功能分析本章以進銷存系統(tǒng)為例來介紹數(shù)據(jù)庫設(shè)10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.1系統(tǒng)功能分析10.3連接Oracle數(shù)據(jù)庫10.4小結(jié)第10章Oracle綜合實例
510.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.1系統(tǒng)功能分析10.310.2.1需求分析10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器610.2.1需求分析10.2.2概念結(jié)構(gòu)設(shè)計需求分析
系統(tǒng)開發(fā)的目標是實現(xiàn)企業(yè)進銷存管理的系統(tǒng)化、規(guī)劃化和自動化,基本要求如下:(1)客戶管理:對整個銷售過程進行管理,對銷售對象進行統(tǒng)計。(2)供應(yīng)商管理:對整個供應(yīng)過程進行管理,對供應(yīng)對象進行統(tǒng)計。(3)倉庫管理:對倉庫信息進行管理。(4)商品管理:對系統(tǒng)銷售/供應(yīng)過程中的商品進行管理。(5)進/退貨管理:對整個供應(yīng)過程中發(fā)生的進貨/退貨進行跟蹤統(tǒng)計。(6)售/退貨管理:對整個銷售過程中發(fā)生的進貨/退貨進行跟蹤統(tǒng)計。(7)庫存管理:對商品入/出倉庫進行跟蹤統(tǒng)計。710.2.1需求分析系統(tǒng)開發(fā)的目標是實現(xiàn)企業(yè)進銷存管理10.2.1需求分析
通過對企業(yè)進銷存管理的內(nèi)容和數(shù)據(jù)流程分析,系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)如表10-1所示。
數(shù)據(jù)結(jié)構(gòu)名含義組成客戶信息(Customer)對銷售客戶進行記錄、統(tǒng)計客戶編碼、客戶名稱、地址、電話、郵編供應(yīng)商信息(Supplier)對供應(yīng)商進行記錄、統(tǒng)計供應(yīng)商編碼、供應(yīng)商名稱、地址、電話、郵編、聯(lián)系人倉庫信息(StoreHouse)對倉庫進行記錄、統(tǒng)計倉庫編碼、地址、電話、成立時間商品信息(ProductClass)對商品進行記錄、統(tǒng)計商品編號、商品名稱、單價、規(guī)格810.2.1需求分析通過對企業(yè)進銷存管理的內(nèi)容和數(shù)據(jù)流10.2.1需求分析
系統(tǒng)的數(shù)據(jù)項如表10-2~10-5所示。
數(shù)據(jù)項名含義類型長度約束Supplier_ID
供應(yīng)商編號INT
惟一標識Supplier_Name供應(yīng)商名稱VARCHAR2250非空Address地址VARCHAR2250非空Phone電話VARCHAR225
PostalCode郵編VARCHAR210
ConstactPerson聯(lián)系人VARCHAR220
910.2.1需求分析系統(tǒng)的數(shù)據(jù)項如表10-2~10-510.2.1需求分析
數(shù)據(jù)項名含義類型長度約束Customer_ID
客戶編號INT
惟一標識Customer_Name客戶名稱VARCHAR2250非空Address地址VARCHAR2250非空Phone電話VARCHAR225
PostalCode郵編VARCHAR210
1010.2.1需求分析數(shù)據(jù)項名含義類型長度約束Custo10.2.1需求分析
數(shù)據(jù)項名含義類型長度約束StoreHouse_ID
倉庫編號INT
惟一標識Address地址VARCHAR2250非空Phone電話VARCHAR225
CreateDate成立時間DATE
1110.2.1需求分析數(shù)據(jù)項名含義類型長度約束Store10.2.1需求分析
數(shù)據(jù)項名含義類型長度小數(shù)位約束ProductClass_ID
商品編號INT
惟一標識ProductClass_Name商品名稱VARCHAR230
非空ProductSpec_ID商品規(guī)格VARCHAR230
非空Price
單價NUMBER52非空1210.2.1需求分析數(shù)據(jù)項名含義類型長度小數(shù)位約束Pr10.2.1需求分析
在實際應(yīng)用中,系統(tǒng)中存在著各種聯(lián)系:(1)一個倉庫可以存儲多種商品,一種商品只能存儲在一個倉庫,而且商品入庫或出庫時記錄是入庫還是出庫,還記錄時間、數(shù)量、經(jīng)手人;(2)一個供應(yīng)商可以供應(yīng)多種商品,一種商品可以由多個供應(yīng)商供應(yīng),而且供應(yīng)商供應(yīng)商品時記錄是進貨還是退貨,還記錄時間、變化數(shù)量、金額、經(jīng)手人;(3)一個客戶可以購買多種商品,一種商品可以由多個客戶購買,而且客戶購買或退商品時記錄是賣貨還是退貨,還記錄時間、變化數(shù)量、金額、經(jīng)手人。因此,倉庫與商品之間是一對多的聯(lián)系,客戶與商品之間是多對多的聯(lián)系,供應(yīng)商與商品之間是多對多的聯(lián)系。由于在一個商品同一天可能多次存入同一倉庫,因此增加入/出庫編號以標識每一次庫存操作;同理,由于一個客戶同一天可能購買多次同一商品,因此增加售/退編號以標識每一次銷售操作;一個供應(yīng)商同一天可能多次供應(yīng)同一商品,因此增加進/退編號以標識每一次供應(yīng)操作。1310.2.1需求分析在實際應(yīng)用中,系統(tǒng)中存在著各種聯(lián)系10.2.2概念結(jié)構(gòu)設(shè)計10.2.1需求分析10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器1410.2.2概念結(jié)構(gòu)設(shè)計10.2.1需求分析概念結(jié)構(gòu)設(shè)計
根據(jù)需求分析,進銷存管理系統(tǒng)的E-R圖如圖10-2所示。
1510.2.2概念結(jié)構(gòu)設(shè)計根據(jù)需求分析,進銷存管理系統(tǒng)的10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.2概念結(jié)構(gòu)設(shè)計10.2.1需求分析10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器1610.2.3邏輯結(jié)構(gòu)設(shè)計10.2.2概念結(jié)構(gòu)設(shè)計1010.2.3邏輯結(jié)構(gòu)設(shè)計
根據(jù)概念模型向邏輯模型轉(zhuǎn)換原則,進銷存管理系統(tǒng)的邏輯結(jié)構(gòu)為:(1)一個實體轉(zhuǎn)換成一個關(guān)系,所以應(yīng)有:供應(yīng)商表(供應(yīng)商編號、供應(yīng)商名稱、地址、電話、郵編、聯(lián)系人)??蛻舯恚蛻艟幪枴⒖蛻裘Q、地址、電話、郵編)。倉庫表(倉庫編號、地址、電話、成立時間)。商品表(商品編號、商品名稱、單價、規(guī)格)。(2)一對多的聯(lián)系,可以將一方的主鍵傳到多方,成為多方的非主屬性,還可以形成新的關(guān)系,雙方的主鍵和聯(lián)系本身的屬性作為新關(guān)系的屬性。1710.2.3邏輯結(jié)構(gòu)設(shè)計根據(jù)概念模型向邏輯模型轉(zhuǎn)換原則10.2.3邏輯結(jié)構(gòu)設(shè)計
由于倉庫與商品之間是一對多的聯(lián)系,而且聯(lián)系本身有屬性,所以可以形成新關(guān)系:商品庫存表(商品編號、倉庫編號、入/出編號、入/出標志、時間、數(shù)量、經(jīng)手人)由于在同一商品同一天可能多次存入同一倉庫,因此商品編號、倉庫編號和時間三者聯(lián)合也很難惟一標識一次出入庫行為,因此將入/出庫編號作為商品庫存表的主鍵,修改后的商品庫存表為:商品庫存表(商品編號、倉庫編號、入/出編號、入/出標志、時間、數(shù)量、經(jīng)手人)(3)多對多的聯(lián)系形成一個新的關(guān)系,多方的主鍵和聯(lián)系本身的屬性作為新關(guān)系的屬性,多方的主鍵聯(lián)合作主鍵。由于商品和供應(yīng)商、客戶與商品之間是多對多的聯(lián)系,所以形成新的關(guān)系:商品銷售表(商品編號、客戶編號、售/退編號、售/退標志、時間、變化數(shù)量、金額、經(jīng)手人)
1810.2.3邏輯結(jié)構(gòu)設(shè)計由于倉庫與商品之間是一對多的聯(lián)10.2.3邏輯結(jié)構(gòu)設(shè)計
商品供應(yīng)表(商品編號、供應(yīng)商編號、進/退編號、進/退標志、時間、變化數(shù)量、金額、經(jīng)手人)由于同一客戶同一天可能購買多次同一商品,因此商品編號、客戶編號和時間三者聯(lián)合也很難惟一標識一次銷售行為,而售/退編號是不可以重復的有規(guī)律的編號,因此將售/退編號作為商品銷售表的主鍵,修改后的商品銷售表為:商品銷售表(商品編號、客戶編號、售/退編號、售/退標志、時間、變化數(shù)量、金額、經(jīng)手人)由于同一供應(yīng)商同一天可能多次供應(yīng)同一商品,因此商品編號、供應(yīng)商編號和時間三者聯(lián)合也很難惟一標識一次供應(yīng)行為,而進/退編號是不可以重復的有規(guī)律的編號,因此將進/退編號作為商品供應(yīng)表的主鍵,修改后的商品供應(yīng)表為:商品供應(yīng)表(商品編號、供應(yīng)商編號、進/退編號、進/退標志、時間、變化數(shù)量、金額、經(jīng)手人)1910.2.3邏輯結(jié)構(gòu)設(shè)計商品供應(yīng)表(商品編號、供應(yīng)商編10.2.4在Oracle中創(chuàng)建表10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.1需求分析10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器2010.2.4在Oracle中創(chuàng)建表10.2.2概念結(jié)10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
CREATETABLECustomer
(Customer_ID
INT
PRIMARYKEY,Customer_Name
VARCHAR2(250)
NOTNULL,Address
VARCHAR2(250)
NOTNULL,Phone
VARCHAR2(25)
,
PostalCode
VARCHAR2(10)
);2210.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
CREATETABLEStoreHouse
(
StoreHouse_ID
INTPRIMARYKEY,
Address
VARCHAR2(250)
NOTNULL,
Phone
VARCHAR2(25),
CreateDate
DATE);
2310.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
CREATETABLEProductClass
(ProductClass_ID
INTPRIMARYKEY,
ProductClass_Name
VARCHAR2(30)
NOTNULL,
ProductSpec_ID
VARCHAR2(30)
NOTNULL,
Price
NUMBER(5,2)
NOT
NULL
);
2410.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
為了實時統(tǒng)計每種商品銷售情況,增加商品銷售統(tǒng)計表。CREATETABLEC_ALL
/*商品銷售統(tǒng)計表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
CA_amountNUMBER(6,2),
CA_sumNUMBER(10,2),PRIMARYKEY(ProductClass_ID)
);
2610.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表為了實時統(tǒng)計每10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
為了實時統(tǒng)計每種商品供應(yīng)情況,增加商品供應(yīng)統(tǒng)計表。CREATETABLES_ALL
/*商品供應(yīng)統(tǒng)計表*/(
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數(shù)據(jù)庫中創(chuàng)建表為了實時統(tǒng)計每10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
為了實時統(tǒng)計每種商品庫存情況,增加商品庫存統(tǒng)計表。CREATETABLEH_ALL
/*商品庫存統(tǒng)計表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
StoreHouse_ID
INT
REFERENCESStoreHouse(StoreHouse_ID),
HA_amountNUMBER(6,2),PRIMARYKEY(StoreHouse_ID));為了系統(tǒng)功能更加完善,可以增加其他統(tǒng)計表等,請讀者自行分析。3010.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表為了實時統(tǒng)計每10.2.5在Oracle中創(chuàng)建索引10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.1需求分析10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器3110.2.5在Oracle中創(chuàng)建索引10.2.2概念10.2.5在Oracle數(shù)據(jù)庫中創(chuàng)建索引
在進銷存系統(tǒng)中經(jīng)常需要查詢數(shù)據(jù),因此可以根據(jù)查詢要求在表中創(chuàng)建索引。例如,在商品名稱上創(chuàng)建索引。CREATEINDEXp_name_indexONProductCLass(ProductClass_name);為了系統(tǒng)功能更加完善,可以增加其他索引,請讀者自行分析。
3210.2.5在Oracle數(shù)據(jù)庫中創(chuàng)建索引在進銷存系統(tǒng)10.2.6在Oracle中創(chuàng)建視圖10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.1需求分析10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器3310.2.6在Oracle中創(chuàng)建視圖10.2.2概念10.2.6在Oracle數(shù)據(jù)庫中創(chuàng)建視圖
為了提高系統(tǒng)的隱蔽性和查詢方便可以創(chuàng)建一些視圖。CREATEVIEWP_S
_VIEW/*商品供應(yīng)視圖*/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;為了系統(tǒng)功能更加完善,可以增加其他視圖,請讀者自行分析。
3410.2.6在Oracle數(shù)據(jù)庫中創(chuàng)建視圖為了提高系統(tǒng)10.2.7在Oracle中創(chuàng)建序列10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.1需求分析10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器3510.2.7在Oracle中創(chuàng)建序列10.2.2概念10.2.7在Oracle數(shù)據(jù)庫中創(chuàng)建序列
在進銷存系統(tǒng)中商品銷售過程中售/退編號是不可以重復的有規(guī)律的編號,且作為主鍵,其值可以用序列來填充。CREATESEQUENCEP_C_SQEINCREMENTBY1STARTWITH1MAXVALUE100000MINVALUE1CYCLECACHE20ORDER;同理,在商品供應(yīng)過程中進/退編號是不可以重復的有規(guī)律的編號,且作為主鍵,其值也可以用序列來填充。為了系統(tǒng)功能更加完善,可以增加其他序列,請讀者自行分析。
3610.2.7在Oracle數(shù)據(jù)庫中創(chuàng)建序列在進銷存系統(tǒng)10.2.8在Oracle中創(chuàng)建觸發(fā)器10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.1需求分析3710.2.8在Oracle中創(chuàng)建觸發(fā)器10.2.2概10.2.8在Oracle數(shù)據(jù)庫中創(chuàng)建觸發(fā)器
在進銷存系統(tǒng)中有時某種商品的庫存量太少會影響銷售活動,所以當某商品的庫存量太少時系統(tǒng)應(yīng)自動告警,這時需要用到觸發(fā)器。CREATETRIGGERP_H_TRIGGER/******為商品庫存統(tǒng)計表創(chuàng)建缺貨觸發(fā)器,數(shù)量小于1000時觸發(fā)********/AFTERDELETEORUPDATEONH_ALLFOREACHROWWHEN(HA_amount<1000)BEGINDBMS_OUTPUT.PUT_LINE('編號為:'||:NEW.ProductClass_ID||'的商品在'||:NEW.StoreHouse_ID||'號倉庫庫存總量小于1000');END;為了系統(tǒng)功能更加完善,可以增加其他觸發(fā)器,請讀者自行分析。
3810.2.8在Oracle數(shù)據(jù)庫中創(chuàng)建觸發(fā)器在進銷存系10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.1需求分析10.2.8在Oracle中創(chuàng)建觸發(fā)器3910.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)在Oracle數(shù)據(jù)庫中創(chuàng)建存儲過程或函數(shù)
在進銷存系統(tǒng)中有時需要統(tǒng)計某供應(yīng)商供應(yīng)的商品名稱列表,這時可以使用存儲過程。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數(shù)據(jù)庫中創(chuàng)建存儲過程或函數(shù)在10.2.9在Oracle數(shù)據(jù)庫中創(chuàng)建存儲過程或函數(shù)
SELECTProductClass_Name
intop2FROMProductClassWHEREProductClass_ID=p1;DBMS_OUTPUT.PUT_LINE(p2);ENDLOOP;CLOSEc1;END;為了系統(tǒng)功能更加完善,可以增加其他存儲過程或函數(shù),請讀者自行分析。
4110.2.9在Oracle數(shù)據(jù)庫中創(chuàng)建存儲過程或函數(shù)S10.3連接Oracle數(shù)據(jù)庫10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.1系統(tǒng)功能分析10.4小結(jié)第10章Oracle綜合實例
4210.3連接Oracle數(shù)據(jù)庫10.2系統(tǒng)數(shù)據(jù)庫設(shè)計110.3.1利用Java連接Oracle10.3連接Oracle數(shù)據(jù)庫10.3.2利用PowerbBilder連接Oracle4310.3.1利用Java連接Oracle10.3連接10.3.1Java連接Oracle
Java利用JDBC(JavaDatabaseConnectivity,Java數(shù)據(jù)庫連接)連接Oracle數(shù)據(jù)庫。假設(shè)使用Oracle安裝過程中創(chuàng)建的Oracle數(shù)據(jù)庫“DBSEPI”。JDBC是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一的訪問接口。JDBC由一組用Java語言編寫的類與接口組成,通過調(diào)用這些類和接口所提供的方法,用戶能夠以一致的方式連接多種不同的數(shù)據(jù)庫系統(tǒng)(如Access、Server2000、Oracle、Sybase等),進而使用標準的SQL語言來存取數(shù)據(jù)庫中的數(shù)據(jù),而不必再為每一種數(shù)據(jù)庫系統(tǒng)編寫不同的Java程序代主鍵。JDBC提供的主要功能如下:(1)同一個數(shù)據(jù)庫建立連接;(2)向數(shù)據(jù)庫發(fā)送SQL語句;(3)處理數(shù)據(jù)庫返回的結(jié)果。4410.3.1Java連接OracleJava利用JD1.設(shè)置數(shù)據(jù)源
打開操作系統(tǒng)的控制面板,雙擊“數(shù)據(jù)源(ODBC)”圖標,選擇“用戶DSN”選項卡,如圖10-3所示,畫面中顯示了已有的數(shù)據(jù)源名稱。
451.設(shè)置數(shù)據(jù)源打開操作系統(tǒng)的控制面板,雙擊“數(shù)據(jù)源(O1.設(shè)置數(shù)據(jù)源
單擊“添加”按鈕,出現(xiàn)建立新數(shù)據(jù)來源對話框,如圖10-4所示。
461.設(shè)置數(shù)據(jù)源單擊“添加”按鈕,出現(xiàn)建立新數(shù)據(jù)來源對話1.設(shè)置數(shù)據(jù)源
選中“OracleinOraHome92”作為新數(shù)據(jù)源的驅(qū)動程序,單擊“完成”按鈕,出現(xiàn)OracleODBC驅(qū)動器配置窗口,如圖10-5所示。
471.設(shè)置數(shù)據(jù)源選中“OracleinOraHome1.設(shè)置數(shù)據(jù)源
在“DataSourceName”編輯框輸入數(shù)據(jù)源的名稱,假設(shè)為
“dbspei”,在“TNSServerName”編輯框輸入Oracle數(shù)據(jù)庫的名稱,假設(shè)使用Oracle安裝過程中創(chuàng)建的數(shù)據(jù)庫“dbsepi”,在“User”編輯框輸入用戶名“usepi”,單擊“TestConnection”按鈕,出現(xiàn)OracleODBC驅(qū)動連接窗口,如圖10-6所示。
481.設(shè)置數(shù)據(jù)源在“DataSourceName”編1.設(shè)置數(shù)據(jù)源
在“ServerName”編輯框顯示數(shù)據(jù)庫的名稱“dbspei”,在“UseName”編輯框顯示用戶名“usepi”,在“Password”編輯框輸入密碼“usepi”,單擊“OK”按鈕,如果配置正確,則出現(xiàn)連接成功窗口,如圖10-7所示。
491.設(shè)置數(shù)據(jù)源在“ServerName”編輯框顯示數(shù)2.建立JDBC-ODBC橋接器
在和某一特定數(shù)據(jù)庫建立連接之前,必須首先加載一種可用的JDBC驅(qū)動程序。這需要使用java.sql包中的下列方法來加載JDBC驅(qū)動程序,一般的使用格式如下:Class.forName("DriverName");“DriverName”是要加載的JDBC驅(qū)動程序名稱。驅(qū)動程序名稱根據(jù)數(shù)據(jù)庫廠商提供的JDBC驅(qū)動程序的種類來確定。由于本例采用的是Oracle數(shù)據(jù)庫,所以加載Oracle數(shù)據(jù)庫驅(qū)動程序的方法為:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");502.建立JDBC-ODBC橋接器在和某一特定數(shù)據(jù)庫建立3.連接數(shù)據(jù)庫
創(chuàng)建和指定數(shù)據(jù)庫的連接需要使用DriverManager類的getConnection()方法,其一般的使用格式如下:Connectionconn=DriverManager.getConnection(URL,user,password);該方法返回的是一個Connection對象。這里的URL是一個字符串,代表了將要連接的數(shù)據(jù)源,即具體的數(shù)據(jù)庫位置。不同的JDBC驅(qū)動程序其URL是不同的。本例為:Connectionconn=DriverManager.getConnection("jdbc:odbc:dbsepi","usepi","usepi");
513.連接數(shù)據(jù)庫創(chuàng)建和指定數(shù)據(jù)庫的連接需要使用Drive4.向數(shù)據(jù)庫發(fā)送SQL語句
在與某個特定數(shù)據(jù)庫建立連接之后,這個連接會話就可以用于發(fā)送SQL語句。在發(fā)送SQL語句之前,必須創(chuàng)建一個Statement類的對象,該對象負責將SQL語句發(fā)送給數(shù)據(jù)庫。如果SQL語句運行后產(chǎn)生結(jié)果集,Statement對象會將結(jié)果集返回給一個ResultSet對象。例如:創(chuàng)建Statement對象是使用Connection接口的createStatement()方法來實現(xiàn)的:Statementsmt=conn.createStatement();Statement對象創(chuàng)建好之后,就可以使用該對象的executeQuery()方法來執(zhí)行數(shù)據(jù)庫查詢語句,executeQuery()方法返回一個ResultSet類的對象,它包含了SQL查詢語句執(zhí)行的結(jié)果。例如:ResultSetrs=smt.executeQuery("SELECT*FROMstudent");
524.向數(shù)據(jù)庫發(fā)送SQL語句在與某個特定數(shù)據(jù)庫建立連接之5.處理查詢結(jié)果
一個ResultSet對象包含了執(zhí)行某個SQL語句后滿足條件的所有的行,它還提供了對這些行的訪問,用戶可以通過一組get方法來訪問當前行的不同列。通常結(jié)果集的形式是一張帶有表頭和相應(yīng)數(shù)值的表,例如:
while(rs.next()){ out.print(""+rs.getString(1)); out.print(""+rs.getString(2)); out.print(""+rs.getString(3)+"<br>");
535.處理查詢結(jié)果一個ResultSet對象包含了執(zhí)行某6.關(guān)閉創(chuàng)建的各個對象
一個Statement對象在同一時間只能打開一個結(jié)果集,所以如果在同一個Statement對象中運行下一條SQL語句時,第一條SQL語句生成的ResultSet對象就被自動關(guān)閉了。當然也可以通過調(diào)用ResultSet接口的close()方法來手工關(guān)閉。關(guān)閉Statement對象和Connection對象可以分別使用各自的close()方法,例如:rs.close(); stmt.close(); conn.close();
546.關(guān)閉創(chuàng)建的各個對象一個Statement對象在同一10.3.2利用PowerbBilder連接Oracle10.3連接Oracle數(shù)據(jù)庫10.3.1利用Java連接Oracle5510.3.2利用PowerbBilder連接Oracle10.3.2PowerBuilder連接Oracle
PowerBuilder連接Oracle數(shù)據(jù)庫有兩種方法,一是使用專用接口,二是使用通用接口。假設(shè)使用Oracle安裝過程中創(chuàng)建的Oracle數(shù)據(jù)庫“DBSEPI”。1.通過專用接口連接數(shù)據(jù)庫PowerBuilder的專用接口都是為網(wǎng)絡(luò)上的大型數(shù)據(jù)庫提供的,如Sybase、Oracle、Informix、SQLServer等。因此,首先要調(diào)通網(wǎng)絡(luò),其次安裝數(shù)據(jù)庫和專用接口軟件,接下來配置數(shù)據(jù)庫的描述文件(Profile)。通過專用接口連接數(shù)據(jù)庫需要首先創(chuàng)建數(shù)據(jù)庫描述文件,然后利用數(shù)據(jù)庫描述文件即可連接數(shù)據(jù)庫了。Oracle數(shù)據(jù)庫是大型分布式數(shù)據(jù)庫,在PowerBuilder中通過專用接口“O90Oracle9.0.1”連接Oracle9數(shù)據(jù)庫。連接步驟共分為創(chuàng)建數(shù)據(jù)庫描述文件、連接數(shù)據(jù)庫兩步。
5610.3.2PowerBuilder連接OracleP10.3.2PowerBuilder連接Oracle
(1)創(chuàng)建數(shù)據(jù)庫描述文件首先進入數(shù)據(jù)庫描述文件配置窗口,如圖10-8所示。
5710.3.2PowerBuilder連接Oracle(10.3.2PowerBuilder連接Oracle
在數(shù)據(jù)庫描述文件窗口中選中“O90Oracle9.0.1”,單擊鼠標右鍵,在快捷菜單中選中“NewProfile”,出現(xiàn)數(shù)據(jù)庫描述文件配置窗口,選中“Connection”選項卡,如圖10-9所示。
5810.3.2PowerBuilder連接Oracle在10.3.2PowerBuilder連接Oracle
在“ProfileName”編輯框輸入用戶命名的數(shù)據(jù)庫描述文件名,假設(shè)為
“dbsepi”,在“Server”編輯框輸入數(shù)據(jù)庫名,假設(shè)使用Oracle安裝過程中創(chuàng)建的數(shù)據(jù)庫“dbsepi”,在“LoginID”編輯框輸入用戶名“usepi”,在“Password”編輯框輸入該用戶的密碼“usepi”,在“Connectas”下拉列表中選擇該用戶的級別“SYSDBA”,其他選項不做修改,單擊“OK”按鈕即可保存此數(shù)據(jù)庫描述文件,同時此數(shù)據(jù)庫描述文件“dbsepi”出現(xiàn)在數(shù)據(jù)庫畫板對象窗口中“O90Oracle9.0.1”的級聯(lián)列表中,如圖10-10所示。
5910.3.2PowerBuilder連接Oracle在10.3.2PowerBuilder連接Oracle
(2)連接數(shù)據(jù)庫在數(shù)據(jù)庫畫板中通過不同的數(shù)據(jù)庫描述文件連接不同的數(shù)據(jù)庫。選中要連接的數(shù)據(jù)庫描述文件“dbsepi”,單擊數(shù)據(jù)庫畫筆圖標或單擊鼠標右鍵,在快捷菜單中選中“Connect”即可連接指定的數(shù)據(jù)庫了。
連接成功后,數(shù)據(jù)庫描述文件“dbsepi”就顯示在“O90Oracle9.0.1”級聯(lián)列表中。
6010.3.2PowerBuilder連接Oracle(2.通過ODBC通用接口連接數(shù)據(jù)庫
PowerBuilder通過ODBC通用接口可以連接各種數(shù)據(jù)庫,如Access、Foxpro、Excel、Oracle、Syabse等。在PowerBuilder中通過通用接口ODBC連接Oracle數(shù)據(jù)庫的步驟共分為配置ODBC數(shù)據(jù)源、創(chuàng)建數(shù)據(jù)庫描述文件、連接數(shù)據(jù)庫三步。
612.通過ODBC通用接口連接數(shù)據(jù)庫PowerBuild2.通過ODBC通用接口連接數(shù)據(jù)庫
(1)配置ODBC數(shù)據(jù)源在數(shù)據(jù)庫畫板對象窗口中依次單擊“ODBODBC”→“Utilities”左邊的“+”號,使之展開,如圖10-11所示。
622.通過ODBC通用接口連接數(shù)據(jù)庫(1)配置ODBC數(shù)2.通過ODBC通用接口連接數(shù)據(jù)庫
選中“ODBCAdministrator”,雙擊鼠標左鍵,再參照圖10-3、10-4、10-5、10-6、10-7完成ODBC數(shù)據(jù)源的配置。
(2)創(chuàng)建數(shù)據(jù)庫描述文件在圖10-11所示的數(shù)據(jù)庫畫板對象窗口中選中“ODBODBC”,單擊鼠標右鍵,在快捷菜單中選中“NewProfile”,出現(xiàn)數(shù)據(jù)庫描述文件配置窗口,選中“Connection”選項卡,如圖10-12所示。
632.通過ODBC通用接口連接數(shù)據(jù)庫選中“ODBCAd2.通過ODBC通用接口連接數(shù)據(jù)庫
在“ProfileName”編輯框輸入數(shù)據(jù)庫描述文件名
“pb_oracle”,從“DataSource”下拉列表中選擇ODBC數(shù)據(jù)源“dbsepi”,在“UserID”編輯框輸入用戶名“usepi”,在“Password”編輯框輸入該用戶的密碼“usepi”,單擊“OK”按鈕即可完成數(shù)據(jù)庫描述文件的建立。數(shù)據(jù)庫描述文件創(chuàng)建成功后,該描述文件即出現(xiàn)在數(shù)據(jù)庫畫板對象窗口中“ODBODBC”的級聯(lián)列表中。(3)連接數(shù)據(jù)庫在數(shù)據(jù)庫畫板對象窗口中,選中要連接的數(shù)據(jù)庫描述文件“pb_oracle”,單擊數(shù)據(jù)庫畫筆圖標或單擊鼠標右鍵,在快捷菜單中選中“Connect”即可連接指定的數(shù)據(jù)庫。
642.通過ODBC通用接口連接數(shù)據(jù)庫在“Profile3.編寫應(yīng)用對象Open事件腳本
在PowerBuilder的應(yīng)用對象的OPEN事件中編寫如下腳本:SQLCA.DBMS="ODBC"SQLCA.AutoCommit=FalseSQLCA.DBPARM="CONNECTSTRING='DSN=pb_oracle;UID=usepi;PWD=usepi'"http://此處連接的數(shù)據(jù)源為“pb_oracle”connect;ifSQLCA.SQLCODE=-1thenmessagebox('提示信息','數(shù)據(jù)庫連接失??!')elsemessagebox('提示信息','數(shù)據(jù)庫連接成功!')endif
653.編寫應(yīng)用對象Open事件腳本在PowerBuild4.向數(shù)據(jù)庫發(fā)送SQL語句
PowerBuilder一般通過數(shù)據(jù)窗口對象與數(shù)據(jù)庫連接,顯示數(shù)據(jù)查詢、更新的結(jié)果,數(shù)據(jù)窗口對象是一可視化編輯數(shù)據(jù)的窗口,所以應(yīng)先創(chuàng)建一數(shù)據(jù)窗口對象(例如dw_1),利用dw_1.settransobject(SQLCA)語句連接數(shù)據(jù)庫,利用dw_1.retrieve()來獲取數(shù)據(jù)庫中的數(shù)據(jù),利用dw_1.insertrow()插入一行數(shù)據(jù),在dw_1中可以向空行中添加或修改原有數(shù)據(jù),利用dw_1.update()和COMMIT命令保存數(shù)據(jù),利用dw_1.deleterow()刪除一行數(shù)據(jù)。
664.向數(shù)據(jù)庫發(fā)送SQL語句PowerBuilder一般5.斷開數(shù)據(jù)庫,釋放資源
在PowerBuilder的應(yīng)用對象的CLOSE事件中編寫如下腳本:disconnect;//斷開與數(shù)據(jù)庫的連接關(guān)于具體編程已不屬于本教材的內(nèi)容,請讀者查閱其他相關(guān)參考資料。
675.斷開數(shù)據(jù)庫,釋放資源在PowerBuilder的應(yīng)10.4小結(jié)10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.3連接Oracle數(shù)據(jù)庫10.1系統(tǒng)功能分析第10章Oracle綜合實例
6810.4小結(jié)10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.3連接Or10.4小結(jié)
(1)數(shù)據(jù)庫設(shè)計包含需求分析、概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計、數(shù)據(jù)庫實施、數(shù)據(jù)庫運行與維護六步,其中前三步是數(shù)據(jù)庫設(shè)計成功與否的關(guān)鍵。(2)數(shù)據(jù)庫設(shè)計過程中需求分析形成應(yīng)用系統(tǒng)的數(shù)據(jù)字典,包含數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)項、處理要求等;概念結(jié)構(gòu)設(shè)計形成應(yīng)用系統(tǒng)的全局E-R圖;邏輯結(jié)構(gòu)設(shè)計形成由E-R圖根據(jù)轉(zhuǎn)換規(guī)則形成的數(shù)據(jù)庫的模式;在實際應(yīng)用設(shè)計過程中經(jīng)常需要根據(jù)實際情況為應(yīng)用系統(tǒng)添加視圖、序列、存儲過程、存儲函數(shù)或觸發(fā)器等數(shù)據(jù)庫對象,以使數(shù)據(jù)庫設(shè)計更加完善。(3)利用Java和PowerBuilder連接Oracle數(shù)據(jù)庫的方法。
6910.4小結(jié)(1)數(shù)據(jù)庫設(shè)計包含需求分析、概念結(jié)構(gòu)設(shè)計數(shù)據(jù)庫原理與應(yīng)用第10章Oracle綜合實例70數(shù)據(jù)庫原理與應(yīng)用第10章Oracle綜合實例1學習目標●掌握數(shù)據(jù)庫設(shè)計的基本步驟和方法?!裾莆绽肑ava和PowerBuilder連接Oracle數(shù)據(jù)庫的方法。71學習目標●掌握數(shù)據(jù)庫設(shè)計的基本步驟和方法。210.1系統(tǒng)功能分析10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.3連接Oracle數(shù)據(jù)庫10.4小結(jié)第10章Oracle綜合實例
7210.1系統(tǒng)功能分析10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.310.1系統(tǒng)功能分析
本章以進銷存系統(tǒng)為例來介紹數(shù)據(jù)庫設(shè)計的過程,系統(tǒng)功能分析是在匯總系統(tǒng)開發(fā)的總體任務(wù)的基礎(chǔ)上完成。本系統(tǒng)中的進銷存管理系統(tǒng)需要完成商品管理、倉庫管理、客戶管理、供應(yīng)商管理、庫存管理、商品銷售管理、商品供應(yīng)管理等多個功能,滿足企業(yè)高效率的需求,系統(tǒng)功能模塊如圖10-1所示。
進銷存系統(tǒng)商品管理模塊客戶管理模塊供應(yīng)商管理模塊倉庫管理模塊商品銷售模塊商品供應(yīng)模塊商品庫存模塊7310.1系統(tǒng)功能分析本章以進銷存系統(tǒng)為例來介紹數(shù)據(jù)庫設(shè)10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.1系統(tǒng)功能分析10.3連接Oracle數(shù)據(jù)庫10.4小結(jié)第10章Oracle綜合實例
7410.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.1系統(tǒng)功能分析10.310.2.1需求分析10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器7510.2.1需求分析10.2.2概念結(jié)構(gòu)設(shè)計需求分析
系統(tǒng)開發(fā)的目標是實現(xiàn)企業(yè)進銷存管理的系統(tǒng)化、規(guī)劃化和自動化,基本要求如下:(1)客戶管理:對整個銷售過程進行管理,對銷售對象進行統(tǒng)計。(2)供應(yīng)商管理:對整個供應(yīng)過程進行管理,對供應(yīng)對象進行統(tǒng)計。(3)倉庫管理:對倉庫信息進行管理。(4)商品管理:對系統(tǒng)銷售/供應(yīng)過程中的商品進行管理。(5)進/退貨管理:對整個供應(yīng)過程中發(fā)生的進貨/退貨進行跟蹤統(tǒng)計。(6)售/退貨管理:對整個銷售過程中發(fā)生的進貨/退貨進行跟蹤統(tǒng)計。(7)庫存管理:對商品入/出倉庫進行跟蹤統(tǒng)計。7610.2.1需求分析系統(tǒng)開發(fā)的目標是實現(xiàn)企業(yè)進銷存管理10.2.1需求分析
通過對企業(yè)進銷存管理的內(nèi)容和數(shù)據(jù)流程分析,系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)如表10-1所示。
數(shù)據(jù)結(jié)構(gòu)名含義組成客戶信息(Customer)對銷售客戶進行記錄、統(tǒng)計客戶編碼、客戶名稱、地址、電話、郵編供應(yīng)商信息(Supplier)對供應(yīng)商進行記錄、統(tǒng)計供應(yīng)商編碼、供應(yīng)商名稱、地址、電話、郵編、聯(lián)系人倉庫信息(StoreHouse)對倉庫進行記錄、統(tǒng)計倉庫編碼、地址、電話、成立時間商品信息(ProductClass)對商品進行記錄、統(tǒng)計商品編號、商品名稱、單價、規(guī)格7710.2.1需求分析通過對企業(yè)進銷存管理的內(nèi)容和數(shù)據(jù)流10.2.1需求分析
系統(tǒng)的數(shù)據(jù)項如表10-2~10-5所示。
數(shù)據(jù)項名含義類型長度約束Supplier_ID
供應(yīng)商編號INT
惟一標識Supplier_Name供應(yīng)商名稱VARCHAR2250非空Address地址VARCHAR2250非空Phone電話VARCHAR225
PostalCode郵編VARCHAR210
ConstactPerson聯(lián)系人VARCHAR220
7810.2.1需求分析系統(tǒng)的數(shù)據(jù)項如表10-2~10-510.2.1需求分析
數(shù)據(jù)項名含義類型長度約束Customer_ID
客戶編號INT
惟一標識Customer_Name客戶名稱VARCHAR2250非空Address地址VARCHAR2250非空Phone電話VARCHAR225
PostalCode郵編VARCHAR210
7910.2.1需求分析數(shù)據(jù)項名含義類型長度約束Custo10.2.1需求分析
數(shù)據(jù)項名含義類型長度約束StoreHouse_ID
倉庫編號INT
惟一標識Address地址VARCHAR2250非空Phone電話VARCHAR225
CreateDate成立時間DATE
8010.2.1需求分析數(shù)據(jù)項名含義類型長度約束Store10.2.1需求分析
數(shù)據(jù)項名含義類型長度小數(shù)位約束ProductClass_ID
商品編號INT
惟一標識ProductClass_Name商品名稱VARCHAR230
非空ProductSpec_ID商品規(guī)格VARCHAR230
非空Price
單價NUMBER52非空8110.2.1需求分析數(shù)據(jù)項名含義類型長度小數(shù)位約束Pr10.2.1需求分析
在實際應(yīng)用中,系統(tǒng)中存在著各種聯(lián)系:(1)一個倉庫可以存儲多種商品,一種商品只能存儲在一個倉庫,而且商品入庫或出庫時記錄是入庫還是出庫,還記錄時間、數(shù)量、經(jīng)手人;(2)一個供應(yīng)商可以供應(yīng)多種商品,一種商品可以由多個供應(yīng)商供應(yīng),而且供應(yīng)商供應(yīng)商品時記錄是進貨還是退貨,還記錄時間、變化數(shù)量、金額、經(jīng)手人;(3)一個客戶可以購買多種商品,一種商品可以由多個客戶購買,而且客戶購買或退商品時記錄是賣貨還是退貨,還記錄時間、變化數(shù)量、金額、經(jīng)手人。因此,倉庫與商品之間是一對多的聯(lián)系,客戶與商品之間是多對多的聯(lián)系,供應(yīng)商與商品之間是多對多的聯(lián)系。由于在一個商品同一天可能多次存入同一倉庫,因此增加入/出庫編號以標識每一次庫存操作;同理,由于一個客戶同一天可能購買多次同一商品,因此增加售/退編號以標識每一次銷售操作;一個供應(yīng)商同一天可能多次供應(yīng)同一商品,因此增加進/退編號以標識每一次供應(yīng)操作。8210.2.1需求分析在實際應(yīng)用中,系統(tǒng)中存在著各種聯(lián)系10.2.2概念結(jié)構(gòu)設(shè)計10.2.1需求分析10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器8310.2.2概念結(jié)構(gòu)設(shè)計10.2.1需求分析概念結(jié)構(gòu)設(shè)計
根據(jù)需求分析,進銷存管理系統(tǒng)的E-R圖如圖10-2所示。
8410.2.2概念結(jié)構(gòu)設(shè)計根據(jù)需求分析,進銷存管理系統(tǒng)的10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.2概念結(jié)構(gòu)設(shè)計10.2.1需求分析10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器8510.2.3邏輯結(jié)構(gòu)設(shè)計10.2.2概念結(jié)構(gòu)設(shè)計1010.2.3邏輯結(jié)構(gòu)設(shè)計
根據(jù)概念模型向邏輯模型轉(zhuǎn)換原則,進銷存管理系統(tǒng)的邏輯結(jié)構(gòu)為:(1)一個實體轉(zhuǎn)換成一個關(guān)系,所以應(yīng)有:供應(yīng)商表(供應(yīng)商編號、供應(yīng)商名稱、地址、電話、郵編、聯(lián)系人)??蛻舯恚蛻艟幪?、客戶名稱、地址、電話、郵編)。倉庫表(倉庫編號、地址、電話、成立時間)。商品表(商品編號、商品名稱、單價、規(guī)格)。(2)一對多的聯(lián)系,可以將一方的主鍵傳到多方,成為多方的非主屬性,還可以形成新的關(guān)系,雙方的主鍵和聯(lián)系本身的屬性作為新關(guān)系的屬性。8610.2.3邏輯結(jié)構(gòu)設(shè)計根據(jù)概念模型向邏輯模型轉(zhuǎn)換原則10.2.3邏輯結(jié)構(gòu)設(shè)計
由于倉庫與商品之間是一對多的聯(lián)系,而且聯(lián)系本身有屬性,所以可以形成新關(guān)系:商品庫存表(商品編號、倉庫編號、入/出編號、入/出標志、時間、數(shù)量、經(jīng)手人)由于在同一商品同一天可能多次存入同一倉庫,因此商品編號、倉庫編號和時間三者聯(lián)合也很難惟一標識一次出入庫行為,因此將入/出庫編號作為商品庫存表的主鍵,修改后的商品庫存表為:商品庫存表(商品編號、倉庫編號、入/出編號、入/出標志、時間、數(shù)量、經(jīng)手人)(3)多對多的聯(lián)系形成一個新的關(guān)系,多方的主鍵和聯(lián)系本身的屬性作為新關(guān)系的屬性,多方的主鍵聯(lián)合作主鍵。由于商品和供應(yīng)商、客戶與商品之間是多對多的聯(lián)系,所以形成新的關(guān)系:商品銷售表(商品編號、客戶編號、售/退編號、售/退標志、時間、變化數(shù)量、金額、經(jīng)手人)
8710.2.3邏輯結(jié)構(gòu)設(shè)計由于倉庫與商品之間是一對多的聯(lián)10.2.3邏輯結(jié)構(gòu)設(shè)計
商品供應(yīng)表(商品編號、供應(yīng)商編號、進/退編號、進/退標志、時間、變化數(shù)量、金額、經(jīng)手人)由于同一客戶同一天可能購買多次同一商品,因此商品編號、客戶編號和時間三者聯(lián)合也很難惟一標識一次銷售行為,而售/退編號是不可以重復的有規(guī)律的編號,因此將售/退編號作為商品銷售表的主鍵,修改后的商品銷售表為:商品銷售表(商品編號、客戶編號、售/退編號、售/退標志、時間、變化數(shù)量、金額、經(jīng)手人)由于同一供應(yīng)商同一天可能多次供應(yīng)同一商品,因此商品編號、供應(yīng)商編號和時間三者聯(lián)合也很難惟一標識一次供應(yīng)行為,而進/退編號是不可以重復的有規(guī)律的編號,因此將進/退編號作為商品供應(yīng)表的主鍵,修改后的商品供應(yīng)表為:商品供應(yīng)表(商品編號、供應(yīng)商編號、進/退編號、進/退標志、時間、變化數(shù)量、金額、經(jīng)手人)8810.2.3邏輯結(jié)構(gòu)設(shè)計商品供應(yīng)表(商品編號、供應(yīng)商編10.2.4在Oracle中創(chuàng)建表10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.1需求分析10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器8910.2.4在Oracle中創(chuàng)建表10.2.2概念結(jié)10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
CREATETABLECustomer
(Customer_ID
INT
PRIMARYKEY,Customer_Name
VARCHAR2(250)
NOTNULL,Address
VARCHAR2(250)
NOTNULL,Phone
VARCHAR2(25)
,
PostalCode
VARCHAR2(10)
);9110.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
CREATETABLEStoreHouse
(
StoreHouse_ID
INTPRIMARYKEY,
Address
VARCHAR2(250)
NOTNULL,
Phone
VARCHAR2(25),
CreateDate
DATE);
9210.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
CREATETABLEProductClass
(ProductClass_ID
INTPRIMARYKEY,
ProductClass_Name
VARCHAR2(30)
NOTNULL,
ProductSpec_ID
VARCHAR2(30)
NOTNULL,
Price
NUMBER(5,2)
NOT
NULL
);
9310.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
為了實時統(tǒng)計每種商品銷售情況,增加商品銷售統(tǒng)計表。CREATETABLEC_ALL
/*商品銷售統(tǒng)計表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
CA_amountNUMBER(6,2),
CA_sumNUMBER(10,2),PRIMARYKEY(ProductClass_ID)
);
9510.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表為了實時統(tǒng)計每10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
為了實時統(tǒng)計每種商品供應(yīng)情況,增加商品供應(yīng)統(tǒng)計表。CREATETABLES_ALL
/*商品供應(yīng)統(tǒng)計表*/(
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數(shù)據(jù)庫中創(chuàng)建表為了實時統(tǒng)計每10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
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數(shù)據(jù)庫中創(chuàng)建表CREATE10.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表
為了實時統(tǒng)計每種商品庫存情況,增加商品庫存統(tǒng)計表。CREATETABLEH_ALL
/*商品庫存統(tǒng)計表*/(
ProductClass_ID
INTREFERENCESProductClass(ProductClass_ID),
StoreHouse_ID
INT
REFERENCESStoreHouse(StoreHouse_ID),
HA_amountNUMBER(6,2),PRIMARYKEY(StoreHouse_ID));為了系統(tǒng)功能更加完善,可以增加其他統(tǒng)計表等,請讀者自行分析。9910.2.4在Oracle數(shù)據(jù)庫中創(chuàng)建表為了實時統(tǒng)計每10.2.5在Oracle中創(chuàng)建索引10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.1需求分析10.2.6在Oracle中創(chuàng)建視圖10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器10010.2.5在Oracle中創(chuàng)建索引10.2.2概念10.2.5在Oracle數(shù)據(jù)庫中創(chuàng)建索引
在進銷存系統(tǒng)中經(jīng)常需要查詢數(shù)據(jù),因此可以根據(jù)查詢要求在表中創(chuàng)建索引。例如,在商品名稱上創(chuàng)建索引。CREATEINDEXp_name_indexONProductCLass(ProductClass_name);為了系統(tǒng)功能更加完善,可以增加其他索引,請讀者自行分析。
10110.2.5在Oracle數(shù)據(jù)庫中創(chuàng)建索引在進銷存系統(tǒng)10.2.6在Oracle中創(chuàng)建視圖10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.1需求分析10.2.7在Oracle中創(chuàng)建序列10.2.9在Oracle中創(chuàng)建存儲過程或存儲函數(shù)10.2.8在Oracle中創(chuàng)建觸發(fā)器10210.2.6在Oracle中創(chuàng)建視圖10.2.2概念10.2.6在Oracle數(shù)據(jù)庫中創(chuàng)建視圖
為了提高系統(tǒng)的隱蔽性和查詢方便可以創(chuàng)建一些視圖。CREATEVIEWP_S
_VIEW/*商品供應(yīng)視圖*/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;為了系統(tǒng)功能更加完善,可以增加其他視圖,請讀者自行分析。
10310.2.6在Oracle數(shù)據(jù)庫中創(chuàng)建視圖為了提高系統(tǒng)10.2.7在Oracle中創(chuàng)建序列10.2.2概念結(jié)構(gòu)設(shè)計10.2.3邏輯結(jié)構(gòu)設(shè)計10.2.4在Oracle中創(chuàng)建表10.2系統(tǒng)數(shù)據(jù)庫設(shè)計10.2.5在Oracle中創(chuàng)建索引10.2.6在Oracle中創(chuàng)建視圖10.2.1需求
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基建科工程施工范本合同
- 三農(nóng)村人居環(huán)境整治實施方案
- 公務(wù)車輛定點維修合同
- 法人向公司借款合同
- 經(jīng)典房地產(chǎn)開發(fā)的合同
- 編程語言高級應(yīng)用作業(yè)指導書
- 養(yǎng)殖業(yè)專業(yè)作業(yè)指導書
- 企業(yè)智能核能技術(shù)與應(yīng)用作業(yè)指導書
- 軟件技術(shù)開發(fā)與測試作業(yè)指導書
- 高港區(qū)二手房買賣合同
- (新版)山東省物流工程師職稱考試參考試題庫-下(多選、判斷題)
- 貨運有限公司2024年春節(jié)后復工復產(chǎn)安全生產(chǎn)方案
- 食品安全員專業(yè)知識考試題庫(含答案)
- 和客戶簽回款協(xié)議書范本
- 2024年孝感中小學教師招聘真題
- 社交禮儀-儀態(tài)禮儀
- 2024暑期夏日露營潮趣互動音樂節(jié)(唱享潮夏旋律季)活動策劃方案
- 臨床成人ICU患者外周動脈導管管理要點
- 2024年長沙衛(wèi)生職業(yè)學院單招職業(yè)適應(yīng)性測試題庫及參考答案
- 死亡病例討論模板
- 《讓學生創(chuàng)造著長大》讀書心得
評論
0/150
提交評論