数据库-零件交易中心管理系统报告

数据库-零件交易中心管理系统报告

2021-10-11 00:46:16 浏览次数:

江西农业大学软件学院数据库原理课程设计6教学实验指导书2011.1零件交易中心管理系统实验报告(实验目的)通过完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步了解 和掌握本书中所讲解的内容。(实验简述)零件交易中心管理系统主要提供顾客和供应商之间完成零件交易的功能,其中包括供应商信息、顾客信息以及零件信息。此系统可以让供应商增加、删除和修改所提供的零件产品,还可以让顾客增加、删除和修改所需求的零件。交易员可以利用顾客提出的需求信息和供应商提出的供应信息来提出交易的建议,由供应商和顾客进行确认后即完成这笔交易。课程设计全过程1需求分析(实际详细调查)2数据库设计(SQL Server 2000 设计)概念(模型)设计(实际到概念)逻辑设计(逻辑推导)物理设计(理论到实现)SQL编程、调试(测试验证)(实践反复检验)3应用程序编程、调试、测试(用人机交互前台开发工具 VB.NET开发windows和Web 应用程序)需求分析(详细地调查分析系统对象、功能、性能等需求)l供应商供应商的操作流程图如图 A1所示。图A1供应商操作分类表2.顾客顾客的地位和供应商几乎是对称的,所以功能分类上也很相似.顾客的操作流程图如图A2所示。修改个人信息删除需求项图A2顾客操作分类表3.交易员交易员的工作就是提出交易和完成交易。这里需要仔细考虑的问题是一个交易如何产生,并如何达成,可以用图 A3来说明这个问题.我们在处理交易的时候可能面临如下问题1 一个交易只能在交易双方都同意的情况下才可以进行,达成某个交易的基础;所以数据库中的供求信息只能作为2交易的双方可能不同时使用这个系统,因此需要系统提供一个双方交换信息的方式;3系统需要提供一种方便系统 交易员向用户提出建议来促成交易的途径,并在保证数据库数据完整性的情况下达成交易。供应商提出交 易顾客提出交易 申请交易员提出交易 建议交 员协议书草案供应商以及顾客签字1正式签字交易员签发完成父易图A.3交易员操作图概念模型设计从实践概括抽象出理论模型日R数据库需要表述的信息有以下几种 零件信息(2)供应商信息(3)顾客信息(4)供应商集和零件集之间的联系(供应)图A.4供应商和零件之间的联系顾客集和零件集之间的联系(求购)(供应)E/R模型图A.5顾客和零件之间的联系 (求购)E/R模型(6)交易(三元联系)可以用E/R模型表述该模型的设计,E/R图如图A7所示。19图A.7全局E/R模型逻辑设计从理论日R模型到理论关系,K型的整理转换通过E/R模型到关系模型的转化,可以得到如下关系模式1零件实体集转换为2供应商实体集转换为3顾客实体集转换为4供应联系转换为一* 关系Part ID,Color ,Name Weight ,Intro 关系 Provider 旦,NameAddtess ,Tel ,Intro 关系 CustomerJD,Name Addtess ,Tel*,关系 Supply PartlD ,ProviderlD ,Price ,Quantity5求购联系转换为关系 OferToBuy CustomerlD ,PartID ,Price ,Quantity6交易联系转换为关系 Business CustomerlD ,ProviderlD ,PartID ,Price ,Quantity每个关系模式的 主键码都用下划线 标出。同时,对于从联系导出的关系Supply供应,OfferToBuy求购和Business交易,使用与之相联系的实体集的主健码作为自己的键码,必须符合外键码约束。对于Customer顾客,Provider供应商和Part零件之间,不存在直接的约束,所以 可以存在没有供应商供应同时也没有顾客求购的零件。物理设计从理论关系模型到实现 实施数据库建立物理文件的安排和建立索引1 为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是各表中建立索引的表项partID2ProviderID3CustomerID4SupplyPartID ,ProviderID 5OfferTOBuyCustomerID ,PartID6BusinessCustomerlD ,ProviderID ,PartID2用SQL实现设计实现该设计的环境为 Windows 2000 PerfessinalMSSQLServer 2000.01 建立 Part 表CREATE TABLEPart ID smallint IDENTITY1,1 PRIMARY KEY CLUSTERE,DColor varchar20,Name varchar20 NOT NULL,Weight int DEFAULT 0,Intro text2 建立 Provider 表CREATE TABLE ProviderID smallint IDENTITY1,1 PRIMARY KEY CLUSTERED,Name varchar20 NOT NULL,password varchar8 NOT NULL,Address varchar30,Tel varchar20,Intro text3 建立 Customer 表CREATE TABLE Customer ID Smallint IDENTITY1,1PRIMARY KEY CLUSTERED,Namevarchar20 NOT NULL,Address varchar30,TeL Varchar20 4 建立 Supply 表CREATE TABLE SupplyPartID Smallint,ProviderID smallint,Price int,QUantity int,CONSTRAINT PK_SUPPLY PRIMARY KEY CLUSTEREDPartID,ProviderID,CONSTRAINT FK_SUPPLY_PARTID FOREIGN KEYPartID REFERENCESPartID,CONSTRAINTFK_SUPPLY_PROVIDERFIDOREIGNKEYProviderID REFERENCESProviderID5 建立 OfferToBuy 表CREATE TABLE OfferToBuyCustomerID smallint,PartID Smallint,Price int,Quantity int,CONSTRAINTPK_OFFERTOBUY PRIMARYKEYCLUSTEREDCustomerID,PartID,CONSTRAINT FK_OFFERTOBUY_CUSTOMERID FOREIGN KEYCustomerID REFERENCES CustomerID,CONSTRAINT FK_OFFERTOBUY FOREIGN KEYPartID REFERENCES PartID6 建立 Business 表CREATE TABLE BusinessCustomerID smallint,ProviderID smallint,PartID Smallint,Price int,Quantity int,CONSTRAINT PK_BUSINEssPRIMARY KEYClUSTEREDCuscomerID,ProviderID,PartID,CONSTRAINT FK_BUSINESS_CUSTOMERID FOREIGN KEYCustomerID REFERENCES CustomerID,CONSTRAINT FK_BUSINESS_PROVIDERlD FOREIGN KEYProviderID REFERENCES ProviderID,CONSTRAINT FK_BUSINESS_PARTID FOREIGN KEYPartID REFERENCES PartID7 供应商操作1 注册 registerINSERT INTO ProviderName ,password ,Address ,TeI ,IntroVALUESNam,e password ,Address ,Tel ,Intro在登记操作后,供应商得到一个唯一的 ID ,可以根据这个ID 采查询和修改供应商的数据。2 注销 unregisterDELETE Provider WHEREIDID ;3 修改个人馆息updateUPdate Provider SetNameName,AddressAddress ,TelTel ,IntroIntroWHEREID ID;4 增加供应项add_supply_itemINSERT INTO SupplyPartID ,Providerid ,Price ,QuantityVALUESPartID ,ProvderlD ,Price ; Quantily ;5 删除供应项delete_supply_itemDELETE SupPlyWHEREPartlDPartID AND ProvideIDProviderlD;6 修改供应项update_supply_itemUPDATESupplySETPricePrice ,QuantityQuantity WHEREPartlDPartID AND ProviderIDProviderID很明显,系统并没有提供面向供应商修改零件信息的接口,所以供应商提供的零件必 须已经在零件表中存在;可以这祥假设,交易所的管理员负责更新零件信息,而供应商可以 向交易所申请增加某种零件的信息.事实上顾客也可以提出这样的要求。

  8.顾客操作1注册register INSERT INTO CustomerName ,Address ,TelVALUESName ,Address ,Tel;在登记操作后,顾客彳到一个唯一的ID,可以根据这个ID来查询和修改顾客的数据.2注销unregisterDELETE CustomerWHEREIDID;修改个人信息updateUPDATE Customer SetNameName ,AddressAddress ,TelTel WHERE1DID;4增加需求项add_OfferToBuy_item INSERT INTO OferToBuyPartID,CustomeriD ,Price ,Quantity VALUESPartID ,CustomerID ,Price ,Quantity5删除需求项delete_OfferToBuy_itermDELETE OfferToBuyWHEREPartlDPartlD AND CustomerlDCustomerID ;6修改需求项叩 date_OferToBuy_item UPDATE OfferToBuy SETPricePrice ,QuantityQuantity WHEREPartlDPartID AND CustomeriDCustomerID9 .交易员针对需求分析中提出的问题,我们提出了 “协议书”的解决方案,方案的说明如下1 每个交易在达成以前都作为协议书保存在数据库中,协议书具有和交易一样的完备信息,可以在条件成熟的情况下转为一个达成的交易;2 协议书只有在供应商和顾客都签字的情况下才有效;有效的协议书由交易员签发,协议书一经签发,就生效,表明一个交易的达成,数据库中的数据将同时予以修改;3 协议书可以由供应商、顾客或者交易员中的任意一个人提出申请。当协议书在双方没有都签字前,协议的双方或者交易员都可以删除这个协议书;但是,当协议书签字完毕后,协议书就不得删除修改,只能由交易员进行处理;4 协议书有可能在转成交易的过程中失败,因为在交易达成以前,数据库中的数据有可能因为其他交易而变化,一个协议书可能失效,这是允许的。根据以上分析,对数据库的模型作一些修改,增加协议书表,其关系模式如下AgreementCustomerlD,ProviderID ,PartID ,Price ,Quantity ,CustomerSign ,ProviderSign对应的SQL描述为CREATE TABLE Agreement Customerm smallint ,ProviderlD smallint ,PartlD smallint ,Price int,Quantity int ,CustomerSign int ,ProviderSign int ,CONSTRAINT PK_AGREEMENTPRIMARY KEYCLUSTEREDCustomerID,ProviderID ,PartID ,CONSTRAINT FK_AGREEMENT_CUSTOMERID FOREIGNKEYCustomerIDREFERENCESCustomerID ,CONSTRAINT FK_ AGREEMENT_PROVlDERID FOREIGNKEYProviderIDREFERENCESProviderID ,CONSTRAINT FK_AGREEMENT_PARTID FOREIGN KEYPartIDREFERENCES PartID与上述其他操作相比,对交易的操作对数据完整性要求比较高,其中需要注意的地方是;要防止同一用户 供应商,顾客 的数据因两个交易而同时修改;需要同时对供应数据库Supply 、需求数据库OfferToBuy 、交易数据库Business和协议数据库Agreement 作出修改,而且需要保持这些修改的原子性;很显然,这些要求正是对于一个事务transaction 的要求,所以可以用一个事务来完成签发一个协议的操作。事务的描述如下CREATE PROC PASS_AGREEMENTproviderID int ,customerid int ,partlD intASDECLARE TransName VARCHAR20SELECT TransNamePass_AgreementBEGIN TRANSACTION TransNameDEClARE price INT ,qUANTITY intSELECT priceprice ,quantityquantity FROM AgreementWHERE prIVIderIDproviderID AND customerIDcustomerIDAND PanIDpartID1NSERT INTO BusinessProviderID ,CustomerID ,PartID ,Price ,QuantityVALuesproviderid ,customerID,PartID ,price,quantityUPDATE Supply SET quantityquantity-quantityWHERE ProviderIDprividerID AND partIDpartIDIF SELECT quantity FROM SupplyWHERE Proideridprovider AND partIDPartID0ROLLBACK TRANSACTlON TranSNameDELETE FROM Supply WHERE quantity0UPDATE OfferToBuy SET quantityquanttity-quantityWHERE CustomerIDcustomerid AND partlDpartIDIF(SELECT quandtity FROM OfferToBuyWHERE CustomerIDCustomerID AND partIDpartlD)0ROLLBACK TRANSACTION TransNameDELETE FROM OfferToBuy WHERE quantity0COMMIT TRANSACTION TransName为了使用方便,这里定义了一个存贮过程;功能是完成从Agreementt 的一个元组到Business 的一个元组的转化工作。

  这里考虑到了删除空的 Suppiy 和 OfferTOBUY 项,更加重要的是,这里考虑到了非法的 Agreement 的情况,在一段时间后,由于供应商或者顾客修改数据,Agreement 可能就非法,这时就需要把这个事务废除,所以,这里检查了 Supply 表和 OfferToBuy 表中的数据,确保数据仍然正确。另外交易员,或者说交易所必须承担的一项任务是更新零件列表。这里在考虑顾客和供应商的时候并没有给予他们修改零件列表的权利,所以他们必须根据数据库中已有的项更新自己的供求信息。由于这个数据库实际上更加偏重于模型化,而不是一个实际环境中的数据库,所以在实现应用模型的时候我们还需要对这个数据库的模型作一些修改。由于本实验在模型设计上使用了 Microsoft Transact-SQL 的语法,因此以上的数据库操作都是在SQLSERVER20Q0测试通过的。

  实验数据示例测试阶段(1.实验方案设计2.测试,查找错误校正错误,检查是否符合用户的功能性能要求 )1 实验方案设计( 1)输入数据设计1 )插入零件信息;insert into Part(Color,Name,Weight ,Intro)values(black ,stick ,30 ,of steel);显示刚插人的零件id select id from Part where namestick;id1(1 row(s)affected)( 不同的实验,id 值可能不同。以后相应操作要保持前后一致就可以丁。

  )2)插入供应商信息insert into Provider(Name,password ,Address ,Tel ,Intro)values(coml ,1234 ,北京 ,6543210,nothing);显示刚插入的供应商id select id from Provider where namecomlid--11 rows affected3插入顾客信息insert into CustomerName ,Address ,Telvaluescusl ,北京 ,6666666显示刚插入的顾客id select id from Customer where name id --11 rowSaffected4插入供应商供应信息insert into SupplyPartID,ProviderlD ,Price ,Quantityvalues1 ,1,20,100 ;5插入顾客需求信息insert into OfferToBuyPartlD,CustomerID ,Priee ,Quantityvalues1 ,1 ,20,50 ;Quantity ,6插入协议信息insert into AgreementCustomerID,ProviderID ,PartlD ,Price ,CustomerSign ,ProviderSignvalues1 ,1 ,1 ,20,30,1 ,1 ; 2 执行交易操作设计1 执行交易存储过程PASS_AGREEMENT为1,1,1PASS_AGREEMENT,11 ,1; 后面的三个参数分别对应前面选择出的供应商ID 、顾客 ID 和零件 ID 。

  2 结果 显示交易后供应信息和需求信息select Quantity from Supply where PartlD 1 and ProviderlD1;Quantity 701 rows affectedselect Quantity from OfferToBuy where PartlDl and CustomerID Quantity201 rows affected3 分析结果 首先,保存在Supply表中1D为1的零件供应量为100(参见Supply表的Insert语句),保存在 OferToBuy 表中ID为1的零件需求量为 50(参见OFFERToBu表白Insert 语句)。在 Agreement 表中指出 ID 为 1 的供应商和ID 为 1 的顾客要交易 30 个 ID 为 1 的零件。当执行存储过程PASS_AGREEMEN,Supply和OferToBuy表中相应的数量都减少了30,交易成功。4)再次执行交易操作delete from Business ;附录交易系统的另一种 SQL语言(数据表建立)/* Microsoft SQL Server - Scripting*//* Server 7523TEACHER*//* Database 商品交易系统*//* Creation Date 02-10-18 94643*/CREATE TABLE dbo.customer id smallint IDENTITY 1,1 NOT NULL ,name varchar 20 NOT NULL ,address varchar 30 NULL ,Intro text NULL GOALTER TABLE dbo.customer WITH NOCHECK ADD CONSTRAINT PK_customer PRIMARY KEY CLUSTERED id ON PRIMARYGOCREATE TABLE dbo.part id smallint IDENTITY 1,1 NOT NULL ,color varchar 20 NULL ,name varchar 20 NOT NULL ,weight int NULL ,Intro text NULL GOALTER TABLE dbo.part WITH NOCHECK ADD CONSTRAINT PK_part PRIMARY KEY CLUSTERED id ON PRIMARYGOCREATE TABLE dbo.provider id smallint IDENTITY 1,1 NOT NULL ,name varchar 20 NOT NULL ,password varchar 8 NOT NULL ,address varchar 30 NULL ,Tel varchar 20 NULL ,Intro text NULL GOALTER TABLE dbo.provider WITH NOCHECK ADD CONSTRAINT PK_provider PRIMARY KEY CLUSTERED id ON PRIMARYGOCREATE TABLE dbo.supply partid smallint NOT NULL ,providerid smallint NOT NULL ,price smallint NULL ,quantity int NULL GOCREATE TABLE dbo.bussiness customerID smallint NOT NULL ,partid smallint NOT NULL ,providerid smallint NOT NULL ,price smallint NULL ,quantity int NULL GOCREATE TABLE dbo.offertobuy customerID smallint NOT NULL ,partid smallint NOT NULL ,price smallint NULL ,quantity int NULL ALTER TABLE dbo.bussiness WITH NOCHECK ADD CONSTRAINT PK_bussiness PRIMARY KEY CLUSTERED customerID,partid,providerid ON PRIMARYGOALTER TABLE dbo.offertobuy WITH NOCHECK ADDCONSTRAINT PK_offertobuy PRIMARY KEY CLUSTEREDcustomerID,partid ON PRIMARYGOALTER TABLE dbo.supply WITH NOCHECK ADDCONSTRAINT PK_supply PRIMARY KEY CLUSTERED partid,providerid ON PRIMARYGOALTER TABLE dbo.bussiness ADDCONSTRAINT FK_bussiness_customer FOREIGN KEY customerID REFERENCES dbo.customer id,CONSTRAINT FK_bussiness_part FOREIGN KEYpartid REFERENCES dbo.part id,CONSTRAINT FK_bussiness_provider FOREIGN KEYproviderid REFERENCES dbo.provider idGOALTER TABLE dbo.offertobuy ADDCONSTRAINT FK_offertobuy_customer FOREIGN KEY customerID REFERENCES dbo.customer id,CONSTRAINT FK_offertobuy_part FOREIGN KEYpartid REFERENCES dbo.part idGOALTER TABLE dbo.supply ADDCONSTRAINT FK_supply_part FOREIGN KEYpartid REFERENCES dbo.part id,CONSTRAINT FK_supply_provider FOREIGN KEY partid REFERENCES dbo.provider idGOFORALTER TABLE dbo.part WITH NOCHECK ADDweightCONSTRAINT DF__part__weight__1FCDBCEBDEFAULT 0GOCREATE TABLE dbo.agreement customerID smallint NOT NULL ,partid smallint NOT NULL ,providerid smallint NOT NULL ,price smallint NULL ,quantity int NULL ,customersign int NULL ,providersign int NULL GOALTER TABLE dbo.agreement WITH NOCHECK ADD CONSTRAINT PK_agreement PRIMARY KEY CLUSTERED customerID,partid,providerid ON PRIMARY GOALTER TABLE dbo.agreement ADDCONSTRAINT FK_agreement_customer FOREIGN KEY customerID REFERENCES dbo.customer id,CONSTRAINT FK_agreement_part FOREIGN KEYpartid REFERENCES dbo.part id,CONSTRAINT FK_agreement_provider FOREIGN KEYproviderid REFERENCES dbo.provider idGO

最新文章
热门文章
相关推荐