【正文】
.事實上顧客也可以提出這樣的要求。(5)刪除需求項(delete_OfferToBuy_iterm) DELETE OfferToBuy WHERE(PartlD=PartlD AND CustomerlD=CustomerID);(6)修改需求項(叩date_OfferToBuy_item) UPDATE OfferToBuy SET(Price=Price,Quantity=Quantity WHERE(PartlD=PartID AND CustomeriD=CustomerID) 9.交易員 針對需求分析中提出的問題,我們提出了“協(xié)議書”的解決方案,方案的說明如下: (1)每個交易在達成以前都作為協(xié)議書保存在數(shù)據(jù)庫中,協(xié)議書具有和交易一樣的完備信息,可以在條件成熟的情況下轉(zhuǎn)為一個達成的交易; (2)協(xié)議書只有在供應(yīng)商和顧客都簽字的情況下才有效;有效的協(xié)議書由交易員簽發(fā),協(xié)議書一經(jīng)簽發(fā),就生效,表明一個交易的達成,數(shù)據(jù)庫中的數(shù)據(jù)將同時予以修改; (3)協(xié)議書可以由供應(yīng)商、顧客或者交易員中的任意一個人提出申請。 根據(jù)以上分析,對數(shù)據(jù)庫的模型作一些修改,增加協(xié)議書表,其關(guān)系模式如下: Agreement(CustomerlD,ProviderID,PartID,Price,Quantity,CustomerSign,ProviderSign) 對應(yīng)的SQL描述為:CREATE TABLE Agreement( Customerm smallint, ProviderlD smallint, PartlD smallint,Price int,Quantity int,CustomerSign int,ProviderSign int, 事務(wù)的描述如下:CREATE PROC PASS_AGREEMENT providerID int,customerid int, partlD intASDECLARE TransName VARCHAR(20)SELECT TransName=39。BEGIN TRANSACTION TransNameDEClARE price INT,qUANTITY intSELECT price=price,quantity=quantity FROM AgreementWHERE prIVIderID=providerID AND customerID=customerID AND PanID=partID1NSERT INTO Business(ProviderID,CustomerID,PartID,Price,Quantity)VALues(providerid,customerID,PartID,price,quantity)UPDATE Supply SET quantity=quantityquantityWHERE ProviderID=prividerID AND partID=partIDIF (SELECT quantity FROM Supply WHERE Proiderid=provider AND partID=PartID)0 ROLLBACK TRANSACTlON TranSNameDELETE FROM Supply WHERE quantity=0UPDATE OfferToBuy SET quantity=quanttityquantityWHERE CustomerID=customerid AND partlD=partIDIF(SELECT quandtity FROM OfferToBuy WHERE CustomerID=CustomerID AND partID=partlD)0 ROLLBACK TRANSACTION TransNameDELETE FROM OfferToBuy WHERE quantity=0COMMIT TRANSACTION TransName 為了使用方便,這里定義了一個存貯過程;功能是完成從Agreementt的一個元組到Business的一個元組的轉(zhuǎn)化工作。 另外交易員,或者說交易所必須承擔(dān)的一項任務(wù)是更新零件列表。并沒有給予他們修改零件列表的權(quán)利,所以他們必須根據(jù)數(shù)據(jù)庫中已有的項更新自己的供求信息。 由于本實驗在模型設(shè)計上使用了Microsoft TransactSQL的語法,因此以上的數(shù)據(jù)庫操作都是在SQLSERVER2000上測試通過的。black39。stick39。3039。of steel39。stick39。以后相應(yīng)操作要保持前后一致就可以丁。l39。123439。北京39。nothing39。l39。cusl39。北京39。666666639。顯示剛插入的顧客id: select id from Customer where name id 1 (1 row(S)affected)4)插入供應(yīng)商供應(yīng)信息: insert into Supply(PartID,ProviderlD,Price,Quantity) values(1,1,20,100);5)插入顧客需求信息: insert into OfferToBuy(PartlD,CustomerID,Priee,Quantity) values(1,1,20,50);6)插入?yún)f(xié)議信息: insert into Agreement(CustomerID,ProviderID,PartlD,Price,Quantity,CustomerSign,ProviderSign) values(1,1,1,20,30,1,1);(2)執(zhí)行交易操作設(shè)計: 1)執(zhí)行交易存儲過程PASS_AGREEMENT,參數(shù)為:1,1,1:PASS_AGREEMENT 1,1,1。)2)結(jié)果:顯示交易后供應(yīng)信息和需求信息: select Quantity from Supply where PartlD=1 and ProviderlD=1。在Agreement表中指出ID為1的供應(yīng)商和ID為1的顧客要交易30個ID為1的零件。4)再次執(zhí)行交易操作:delete from Busine