《2022年数据库方案设计书:网上购物系统 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库方案设计书:网上购物系统 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库系统概论课程设计网上购物系统的数据库设计2012/6/14 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 18 页一、 需求分析1.1 功能需求及数据需求分析1.1.1用户管理用户:只允许浏览商品信息,可以注册为普通用户会员:拥有浏览商品和购买商品的权限,其属性包括客户号(唯一)、客户名、E-Mail、密码、姓名、性别、邮政编码、地址(一个客户可有几个地址)、客户所属 VIP 级别、折扣优惠。1.1.2商品管理商品的增加。其中的属性包含商品号(唯一)、商品分类、生产厂商、每个厂商的实际存货量、规定的最低存货量和商品其它描述商品的
2、查询,在只要输入商品的任一属性即可1.1.3商品订购管理注册用户即会员注册后可以将相关商品放入购物车,最后购物结束之后形成生成订单,其中每个订单属性包含订单号、客户号、收货地址、订单日期、订单金额、订单明细(每个订单都有几个明细)内容为商品号、单价、订货数量。1.1.4配送单管理默认属性为客户注册时的基本信息,当然配送地址可由客户修改为合适的收货地址,支付方式也可根据提示由客户自定。1.1.5评论管理客户可以给商品发表评论,相关属性为评论号、客户号、商品号、客户邮箱、评论内容、评论时间。1.2 业务规则分析1、所用用户都有权限浏览商品信息,但只有注册用户才能订购商品2、每位注册用户的编号都是唯
3、一的。3、当普通客户总的订单金额达到10000元,即可升级为 VIP 客户。 VIP 客户一般分为三个等级,对他们的优惠策略是在普通客户的价格上同时享有折扣优惠。其中。三级会员,订单金额在10000,15000)元,享受折扣 9 折;二级会员,订单金额在 15000,25000)元,享受折扣 8.5折;一级会员,订单金额在25000及以上,享受折扣7.5折。4、每次商品的订单号都是唯一的。5、客户可以在前台页面查看订单状态,订单状态可以是“0”或“1”,“1”表示订单上的商品已发出,“0”表示订单上的商品未发出。订单的生成需用户确定之后才能生效。1.3 业务需求及处理流程网上购物系统主要业务包
4、括:商品信息的发布与查询,商品的订购,处理订单,商品的配送。系统处理流程:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 18 页系统流程图二、 概念结构设计2.1各子系统的局部E-R 如下:客户客户号密码姓名密码密码密码密码图 2.1.1:客户实体开始用户注册商家注册用户登录订单处理选择商品审核信息选购结束填写个人信息与支付通过提交订单订单生成生成订单编号订单有误结束精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 18 页VIP会员表会员等级会员折扣图 2.1.2:VIP 客户
5、商品商品号商品号商品号商品号商品号商品号商品号图 2.1.3:商品实体生产厂商厂商号厂商名电话地址图 2.1.4:生产厂商实体精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 18 页商品类别类别号类别名称图 2.1.5:商品分类地址地址号地址名称图 2.1.6:地址实体订单发货日期订单号客户号商品号订单金额单价订货数量订货日期收货地址图 2.1.7:订单明细发票发票号码订单号图 2.1.8:发票精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 18 页供应生产厂商商品商品号厂商号图
6、 2.1.9:供应关系商品分类商品类别商品类别号类别名称图 2.1.10:商品分类关系精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 18 页客户评论商品评论号客户号商品号客户邮箱评论内容评论时间图 2.1.11:客户评论关系2.2 视图的集成客户类型属于客户所在属于地址VIP会员订单评论供应分类生产厂商商品类别商品11mnnmn1mnnn1n三、 逻辑结构设计3.1 E-R 图向关系模型的转换由于概念设计的结果是ER 图,DBMS 一般采用关系模型,因此数据库的逻辑设计过程就是把 E-R 图转化为关系模式的过程。将该网上购物系统的总体
7、概念结构E-R图转换为关系模型:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 18 页客户(客户号、密码、姓名、性别、单位、电子信箱、身份证号)VIP 会员表(会员等级、会员折扣)商品(商品号、商品名称、类别号、商品描述、单位、规格、单价)生产厂商表(厂商号,生产厂商名、地址、电话)地址(地址号、地址名称)订单(订单号、客户号、商品号、收货地址、订货日期、订货数量、单价、订单金额、发货日期、订单状态)发票(发票号码、订单号)供应(商品号、厂商号)商品分类(商品类别号、类别名称)客户类型(客户号、客户类型)评论(评论号、客户号、商品号、
8、客户邮箱、评论内容、评论时间)客户地址表(客户号、客户地址)3.2数据模型的优化数据模数据模型的优化是为了提高数据库应用系统的性能,根据应用需要适当地修改、调整关系模式。将转化的关系模式进行优化,最终达到第三范式。由以上关系可看出,这个关系模型都已经达到第三范式,所以不需要进行优化。型的优化数据库的结构1. 创建客户表字段信息: 客户号customerNo 密码password 姓名customerName 类型号typeNo 性别sex 单位company 电子信箱email 身份证号ID VIP 等级VIP Create table customer (customerNo char(12
9、) primany key, password varchar(18) Not Null,customerName varchar(12)Not Null,typeNo char(8)Not Null,sex char(1)Check(sex In( M ,F) company varchar(20)Not Null,email varchar(50)Not Null,ID varchar(18) Not Null, VIP char(1) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 18 页) 2. 创建 VIP 会员表字段信息:
10、 会员等级VIP 会员折扣discount Create table VIP(VIP char(1)primany key, Discount float Not Null, ) 3. 创建商品表字段信息: 商品号productNo 商品名称productName 类别号typeNo 商品描述describe 单位uints 规格standard 单价price Create table product(ProductNo char(12)primany key,ProductName varchar(18)Not Null, typeNo char(12) Not Null, describ
11、e varchar(50) Not Null, units varchar(20) Not Null, standard char(8) Not Null, price numeric Not Null, ) 4. 创建生产厂商表字段信息: 厂商号producerNo 厂商名producerName 地址address 电话telephone Create table producer (producerNo char(12)primany key, producerName varchar(18) Not Null, address varchar(50) Not Null, telepho
12、ne varchar(12) Not Null ) 5. 创建商品类别表字段信息: 类别号protypeNo 类别名称protypeName 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 18 页Create table protype(protypeNo char(12) primany key, protypeName varchar(18) Not Null ) 6. 创建地址表字段信息:地址号addressNo 地址名称addressName Create table address( addressNo char(12) p
13、rimary key, address varchar(20) Not Null, ) 7. 创建订单明细表字段信息: 订单号orderNo 客户号customerNo 商品号productNo 收货地址address 订货日期orderdate 订货数量quantity 单价price 发票号码billNo 订单金额ordersum 发货日期Fhdate 订单状态orderstate Create table order( orderNo char(12) primany key, customerNo char(12) Not Null, productNo char(12) Not Nu
14、ll, address varchar(20) Not Null, orderdate datetime Not Null, quantity char(4) Not Null, price numeric Not Null, billNo varchar(12) primany key, Fhdate datetime Not Null, Orderstate char(8)Check ( orderstate IN(0,1),foreign key(customerNo) references customer(customerNo) foreign key(productNo) refe
15、rences product(productNo) ) 8. 创建发票表精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 18 页字段信息: 发票号码billNo 订单号orderNo Create table bill (billNo char(12)primany key,orderNo char(12)NOT NULL) foreign key(orderNo) references product(orderNoNo) ) 9. 创建供应表字段信息: 商品号productNo 厂商号producerNo Create table
16、 support(productNo char(12)primany key,producerNo char(12)primany key, foreign key(producerNo) references producer(producerNo) ,foreign key(productNo) references product(productNo) ) 10. 创建客户类型表:字段信息: 客户号customerNo 客户类型type Create table type(CustomerNo char(12) primany key, Type varchar(18) Not Null
17、 ) 11. 创建评论表字段信息: 评论号reviewNo 客户号customerNo 商品号productNo 客户邮箱email 评论内容reviewContent 评论时间reviewdate Create table review( reviewNo char(12) primany key, customerNo char(12) Not Null, produtNo char(12) Not Null, email varchar(50) Not Null, reviewContent varchar(100) Not Null, reviewdate datetime Not N
18、ull, foreign key(customerNo) references customer(customerNo), foreign key(productNo) references product(productNo) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 18 页) 12. 创建客户地址表字段信息:客户号customerNo 客户地址cusaddress Create table cusaddress( customerNo char(12) primany key, cusaddress varchar(100
19、) Not Null ) 12 创建客户消费情况表字段信息 客户号customerNo 消费金额money create table cost (customerNo varchar2(20 primary key), money number not null) 这里我们保证了实体完整性,参照完整性和用户自定义完整性。在各个基本表的定义中,我们使主码值均不为空,表orderitem 中 ORDER_ID 取值为表myorder中的主码值,而且我们还进行了用户自定义的完整性约束,使表中某些值取值不为空。四、数据库的实施4.1 数据库的载入4.1.1创建数据库 shoponline create
20、 database shoponline on (Name=shoponline ,Filename= f:shoponline.mdf, Size=2, Maxsize=20, Filegrowth=1) Log on (name=shoponlinelog,Filename= f;shoponlinelog.ldf, Size=2, Maxsize=5, Filegrowth=1) 4.1.2表的建立与数据的载入需要明确数据库需要建立几张表,以及每个表中所要包括的属性。在建立表的过程中。要对每个表进行字段属性的设置。(创建表过程见三、数据库的逻辑设计) 精选学习资料 - - - - - -
21、 - - - 名师归纳总结 - - - - - - -第 12 页,共 18 页4.1.3触发器的设计在修改商品价格的时候,新的商品价格不能超过原来价格的2 倍,否则修改不成功,依此设计一个触发器。触发器设计如下:/*创建触发器 T1,实现注册客户 VIP 自动升级 */ Create Trigger T1 ON customer For update As IF Update(ordersum)Begin Declare price As numeric Select price=ordersum From inserted If price=30000 Update customer se
22、t VIP=4Else If price=20000 Update customer set VIP=3Else If price=10000 Update customer set VIP=2Else If price=0 Update customer set VIP=1End /*创建一个触发器,只允许注册会员在网上提交订单*/ Create Trigger T2 on order For insert As If Not Exists (select * From inserted Where customerNo in(select customer.customerNo from
23、customer) Begin Raiserror(提交订单前请先注册! ,16,1) Rollback Transaction End /*创建一个触发器 T3,统计订单金额 */ /*创建一个更新触发器,及时更新订单*/ Create Trigger updatesaleitem On order For Update As If Update (quantity) Or Update (price) Begin Declare orderNo int,productNo char(12) Declare cur_order Cursor For 精选学习资料 - - - - - - -
24、- - 名师归纳总结 - - - - - - -第 13 页,共 18 页Select orderNo ,productNo From Deleted Open cur_order Begin Transaction Fetch cur_order into orderNo,productNo While (fetch_status=0) Begin Update order Set ordersum=ordersum-D.quantity*D.price+I.quantity*I.price From inserted I,deleted D Where order.orderNo=I.or
25、derNo And I.orderNo=D.orderNo And order.orderNo=orderNo And I.productNo=D.productNo And I.productNo=productNo Fetch cur_order into orderNo,productNo End Commit tean Close cur_order Deallocate cur_order End 4.2数据库的运行附录:源程序IF Not exists (select * from syslogins where name=u1)Exec sp_addlogin u1,u1 Go
26、IF Not exists (select * from sysdatabases where name=shoponline )Drop database shoponline Go create database shoponline on (Name= shoponline ,Filename=f:shoponline.mdf , Size=2, Maxsize=20, Filegrowth=1) Log on (name=shoponlinelog ,Filename=f;shoponlinelog.ldf,精选学习资料 - - - - - - - - - 名师归纳总结 - - - -
27、 - - -第 14 页,共 18 页 Size=2, Maxsize=5, Filegrowth=1) Use shoponline Go Exec sp_addlogin u1,u1 Go Create table customer (customerNo char(12) primany key, password varchar(18) Not Null,customerName varchar(12)Not Null,typeNo char(8)Not Null,sex char(1)Check(sex In(M ,F) company varchar(20)Not Null,ema
28、il varchar(50)Not Null,ID varchar(18) Not Null, VIP char(1) ) Create table VIP(VIP char(1)primany key, Discount float Not Null, ) Create table product(ProductNo char(12)primany key,ProductName varchar(18)Not Null, typeNo char(12) Not Null, describe varchar(50) Not Null, units varchar(20) Not Null, s
29、tandard char(8) Not Null, price numeric Not Null, ) Create table producer (producerNo char(12)primany key, producerName varchar(18) Not Null, address varchar(50) Not Null, telephone varchar(12) Not Null ) Create table protype (精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 18 页protypeNo char(
30、12) primany key, protypeName varchar(18) Not Null ) Creste table address( addressNo char(12) primany key, address varchar(20) Not Null, ) Create table order( orderNo char(12) primany key, customerNo char(12) Not Null, productNo char(12) Not Null, address varchar(20) Not Null, orderdate datetime Not
31、Null, quantity char(4) Not Null, price numeric Not Null, billNo varchar(12) primany key, Fhdate datetime Not Null, Orderstate char(8)Check(orderstate IN(0,1),foreign key(customerNo) references customer(customerNo) foreign key(productNo) references product(productNo) ) Create table bill(billNo char(1
32、2)primany key,orderNo char(12)primany key, foreign key(orderNo) references product(orderNoNo) ) Create table support(productNo char(12)primany key,producerNo char(12)primany key, foreign key(producerNo) references producer(producerNo),foreign key(productNo) references product(productNo) ) Create tab
33、le type(CustomerNo char(12) primany key, Type varchar(18) Not Null ) Create table review( 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 18 页reviewNo char(12) primany key, customerNo char(12) Not Null, produtNo char(12) Not Null, email varchar(50) Not Null, reviewContent varchar(100) Not Null
34、, reviewdate datetime Not Null, foreign key(customerNo) references customer(customerNo), foreign key(productNo) references product(productNo) ) Create table cusaddress( customerNo char(12) primany key, cusaddress varchar(100) Not Null ) /*创建触发器 T1,实现注册客户VIP 自动升级 */ Create Trigger T1 ON customer For
35、update As IF Update(ordersum)Begin Declare price As numeric Select price=ordersum From inserted If price=30000 Update customer set VIP=4Else If price=20000 Update customer set VIP=3Else If price=10000 Update customer set VIP=2Else If price=0 Update customer set VIP=1End /*创建一个触发器,只允许注册会员在网上提交订单*/ Cr
36、eate Trigger T2 on order For insert As If Not Exists (select * From inserted Where customerNo in(select customer.customerNo from customer) Begin Raiserror(提交订单前请先注册! ,16,1) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 18 页Rollback Transaction End /*创建一个更新触发器,及时更新订单*/ Create Trigger updatesa
37、leitem On order For Update As If Update (quantity) Or Update (price) Begin Declare orderNo int,productNo char(12) Declare cur_order Cursor For Select orderNo ,productNo From Deleted Open cur_order Begin Transaction Fetch cur_order into orderNo,productNo While (fetch_status=0) Begin Update order Set
38、ordersum=ordersum-D.quantity*D.price+I.quantity*I.price From inserted I,deleted D Where order.orderNo=I.orderNo And I.orderNo=D.orderNo And order.orderNo=orderNo And I.productNo=D.productNo And I.productNo=productNo Fetch cur_order into orderNo,productNo End Commit tean Close cur_order Deallocate cur_order End 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 18 页