实验7数据库设计.docx
《实验7数据库设计.docx》由会员分享,可在线阅读,更多相关《实验7数据库设计.docx(20页珍藏版)》请在冰豆网上搜索。
实验7数据库设计
实验7数据库设计(6学时)
⒈实验目的与要求
了解数据库设计的重要性和数据库设计在信息系统开发和建设中的核心地位。
掌握数据库设计方法和步骤。
⒉实验任务
在某个RDBMS产品上,选择合适的应用系统开发工具为某个部门或单位开发一个数据库应用系统。
通过实践,掌握本章介绍的数据库设计方法,同时培养团队合作精神。
要求5~6位同学组成一个开发小组,每位同学承担不同角色(例如:
项目管理员、DBA、系统分析员、系统设计员、系统开发员、系统测试员)。
具体要求:
给出数据库设计各个阶段的详细设计报告;写出系统的主要功能和使用说明;提交运行的系统;写出收获和体会,包括已解决和尚未解决的问题,进一步完善的设想与建议;每个小组进行20分钟的报告和答辩,讲解设计方案,演示系统运行,汇报分工与合作情况。
网上书店数据库设计
一、 设计意义
伴随着信息化的发展,计算机走进了千家万户,人们的交流变得方便,方便了网民的生活!
此外,伴随着卓越、当当、淘宝等网络购物平台的兴起,网络购物也被网民认可,首先,网上书店方便了网民的生活,更加便捷地、足不出户便可买到心仪的书籍;其次,网上购书减少了许多中间销售代理,因此价格会比较低,对广大网民的好处是非常明显的;再者,网上书店是信息化购物,基本上所有操作都是通过计算机程序自动完成的,因此大大降低了劳力的消耗;最后,电子商务与出版发行业的结合使发展网上书店及研究网上书店具有双重意义,充分结合互联网销售的特点探索图书发行的新渠道和新模式,是对电子商务科学的充实和补充,更是对出版发行业发行渠道和市场的开拓和创新。
数据库对于一个系统的意义是相当重要的,它关系到整个项目的整体流程,整个网站的后期维护便捷与否,从长远利益来看,数据库的设计是至关重要的。
二、 需求分析
2.1系统功能分析
本实验将设计出一个网上书店数据库,其要求简要如下:
(1)系统用户由两类组成:
管理员和客户。
(2)管理员负责后台管理:
①图书信息的维护(增、删、改),图书要进行分类管理;
②客户信息的维护;
③订单的确认和删除。
(3)读者可以查询图书的基本信息,可以维护自己的信息,可以进行网上订书,可以查询订单处理的情况。
2.2数据需求
系统共有七个实体:
客户、管理员、图书类型、图书、订单、详细订单、图书评价。
(1)会员的属性:
自动编号CustomerId、客户名、客户密码、真实姓名、性别、客户电话、E-mail、地址、注册时间
(2)管理员的属性:
自动编号AdminId、管理员名称、管理员邮箱、密码
(3)图书类型的属性:
自动编号BookTypeId、类别名称
(4)图书的属性:
自动编号BookId、图书名称、图书类型、出版社、出版日期、图书作者、图书定价、图书简介、图书库存量、图书成交量
(5)订单的属性:
自动编号OrderId、客户编号、下单日期、总订购数量、送货方式、支付方式、收货人姓名、收货地址、收货人联系方式、总卖出价
(6)详细订单属性:
自动编号Id、详细订单OrderDetailId、订单号OrderId、图书编号、订购数量、发货状态、收货状态、卖出总价
(7)图书评价的属性:
自动编号CommentId、图书编号、评论客户编号、评论客户名、评论时间、评论内容、审核标志
详细订单是针对每个商品进行下单,通过详细订单不仅可以产看商品信息而且可以看出每个商品的收发货状态,订单包括多个详细订单
此外,由以往的购物经验可知,一般买书的时候都会有一个临时购物车,客户可以把自己想买的书本放入购物车,但是购物车中的商品只是放入了购物车还没有下单
(8)临时购物车:
客户编号、图书编号、订购数量、总价,是否付款
实体间的联系:
通过以上分析可知,实体之间的联系有:
客户与客户评论之间是一对多关系(1:
n)
书籍类别与书籍之间是一对多关系(1:
n)
用户与订单之间是一对多关系(1:
n)
订单与详细订单之间是一对多关系(1:
n)
客户与订单之间是一对多关系(1:
n)
三、E-R图
3.1实体图
图3-1图书类别信息
图3-2管理员信息
图3-3图书信息
图3-4客户信息
图3-5购物车临时订购信息
图3-6订单信息
图3-7订单详细信息
图3-8图书评论信息
3.2实体关系E-R图
图3-9网上书店顶层E-R图
四、 逻辑结构
4.1 逻辑转换
根据3.2节中的E-R图可以将系统中的概念模型转换为具体的表(即关系)结构,共分为8个关系,详细信息如下所示:
客户(会员)(客户编号,客户名,客户密码,真实姓名,性别,客户电话,E-mail,地址,注册时间)
管理员(管理员编号,管理员名称,管理员邮箱,密码)
图书类型(图书类型编号,类别名称)
图书(图书编号,图书名称,图书类型,出版社,出版日期,图书作者,图书定价,图书简介,图书库存量,图书成交量)
购物车零时订购信息(客户编号,图书编号,订购数量,总价,是否付款)
订单(订单号,客户编号,下单日期,总订购数量,送货方式,支付方式,收货人姓名,收货地址,收货人联系方式,总卖出价)
详细订单(详细订单编号,订单号,图书编号,订购数量,发货状态,收货状态,卖出总价)
图书评价(图书评价编号,图书编号,评论客户编号,评论客户名,评论时间、评论内容,审核标志)
4.2 细化表结构
为方便,根据上述文字描述,用英文简写为表和列取名,确定列的数据类型及必要的约束规则,给出如下所示数据库表的基本结构及说明:
(1) 客户信息表tb_customerinfo
列名
说明
数据类型
约束
CustomerId
客户编号
int
主码(自增字段)
CustomerName
客户名称
varchar(20)
主码notnull
CustomerPwd
客户密码
varchar(20)
notnull
Customertruename
真实姓名
varchar(20)
notnull
CustomerSex
性别
varchar
(2)
notnull,取“男”或“女”
CustomerTel
客户电话
varchar(20)
notnull
CustomerEmail
E-mail
varchar(20)
notnull
CustomerAddr
地址
varchar(20)
notnull
CustomerRegTime
注册时间
datetime
notnull
表1客户信息表
(2) 图书类型信息表tb_booktypeinfo
列名
说明
数据类型
约束
BookTypeId
图书类型编号
int
主码(自增字段)
BookTypeName
类别名称
varchar(50)
notnull
表2图书类型信息表
(3) 图书信息表tb_bookinfo
列名
说明
数据类型
约束
BookId
图书编号
int
主码(自增字段)
BookTypeId
图书类型
int
notnull,引用tb_booktypeinfo的外码
BookName
图书名
varchar(20)
notnull
BookPress
出版社
varchar(20)
notnull
BookPubDate
出版日期
datetime
notnull
BookAuthor
图书作者
varchar(10)
notnull
BookPrice
图书定价
money
notnull
BookOutline
图书简介
varchar(200)
notnull
BookDealmount
成交量
int
notnull
BookStoremount
图书库存量
int
notnull
表3图书信息表
(4) 管理员信息表tb_manager
列名
说明
数据类型
约束
AdminId
管理员编号
int
主码(自增字段)
AdminName
管理员名称
varchar(10)
notnull
AdminPwd
密码
varchar(20)
notnull
表4管理员信息表
(5) 购物车临时订购信息tb_shopbook
列名
说明
数据类型
约束
CustomerId
客户编号
int
主码(自增字段)
BookId
图书编号
int
主码,引用tb_bookinfo的外码
ordermount
订购数量
int
notnull
price
总价
money
notnull
ispay
是否付款
varchar(10)
notnull,默认为未付款,取“未付款”或“已付款”
表5购物车临时订购信息表
(6) 订单信息表tb_order
列名
说明
数据类型
约束
OrderId
订单编号
varchar(20)
主码
CustomerId
客户编号
int
notnull,引用tb_customerinfo的外码
Orderdate
下单日期
datetime
notnull
Ordermount
总订购数量
int
notnull
postmethod
送货方式
varchar(100)
notnull
paymethod
支付方式
varchar(100)
notnull
recevername
收货人姓名
varchar(10)
notnull
receveraddr
收货地址
varchar(20)
notnull
recevertel
收货人电话号码
varchar(10)
notnull
totalprice
总卖出价
money
notnull
表6订单信息表
(7) 订单详细信息表tb_orderdetail
列名
说明
数据类型
约束
OrderDetailId
详细订单编号
int
主码
OrderId
订单号
varchar(20)
notnull,引用tb_order的外码
BookId
图书编号
int
notnull
ordermount
订购数量
int
notnull
poststatus
发货状态
varchar(10)
notnull,默认为未发货,取“未发货”或“已发货”
Recevstatus
收货状态
varchar(10)
notnull,默认为未收货,取“未收货”或“已收货”
sigletotalprice
卖出总价
money
notnull
表7订单详细信息表
(8) 图书评价信息表tb_comment
列名
说明
数据类型
约束
CommentId
图书评价编号
int
主码(自增字段)
BookId
图书编号
int
notnull,引用tb_bookinfo的外码
CustomerId
评论客户编号
int
notnull,引用tb_customerinfo的外码
Customername
评论客户名
varchar(20)
notnull
Commentdate
评论时间
datetime
notnull
Commentcontent
评论内容
varchar(100)
notnull
Commentflag
审核标志
varchar(10)
notnull
表8图书评价信息表
五、 数据库实施
本章节主要包含创建表、添加数据和创建必要的触发器、存储过程等内容。
5.1创建约束条件
外键关联关系:
(1)为图书信息表添加图书分类表的外键关联关系
altertabletb_bookinfo
addconstraintFK_TB_BOOKI_REFERENCE_TB_BOOKTforeignkey(BookTypeId)referencestb_booktypeinfo(BookTypeId)
()为图书评论表添加图书表的外键关联关系
altertabletb_comment
addconstraintFK_TB_COMME_REFERENCE_TB_BOOKIforeignkey(BookId)
referencestb_bookinfo(BookId)
()为图书评论表添加客户表的外键关联关系
altertabletb_comment
addconstraintFK_TB_COMME_REFERENCE_TB_CUSTOforeignkey(CustomerId)
referencestb_customerinfo(CustomerId)
()为订单表添加用户的外键关联关系
altertabletb_order
addconstraintFK_TB_ORDER_REFERENCE_TB_CUSTOforeignkey(CustomerId)
referencestb_customerinfo(CustomerId)
()为详细订单表添加订单的外键关联关系
altertabletb_orderdetail
addconstraintFK_TB_ORDER_REFERENCE_TB_ORDERforeignkey(OrderId)
referencestb_order(OrderId)
()添加详细订单表与书本指尖的外键关联关系
altertabletb_orderdetail
addconstraintFK_TB_ORDER_REFERENCE_TB_BOOKIforeignkey(BookId)
referencestb_bookinfo(BookId)
()购物车与书本制作间的外键关联关系
altertabletb_shopbook
addconstraintFK_TB_SHOPB_REFERENCE_TB_BOOKIforeignkey(BookId)
referencestb_bookinfo(BookId)
()购物车与用户的外键关系
altertabletb_shopbook
addconstraintFK_TB_SHOPB_REFERENCE_TB_CUSTOforeignkey(CustomerId)referencestb_customerinfo(CustomerId)
createtabletb_reply(
ReplyIdintnotnull,
CustomerIdintnotnull,
ReplyTypevarchar(20)notnull,
Replytitlevarchar(20)notnull,
Replycontentvarchar(100)notnull,
Customernamevarchar(20)notnull,
Commentdatedatetimenotnull,
CustomerIPvarchar(10)notnull,
constraintPK_TB_REPLYprimarykey(ReplyId)
)
5.2添加数据(注意添加的先后次序)
对于存在外键关联关系的表,注意添加数据的时候要先添加被关联的表的信息
5.3创建视图(需要经常进行的操作)
1定义一个视图查看根据客户的姓名查询其购物车的信息
createviewshopping_car
as
selectCustomerName,BookName,ordermount,pricefromtb_shopbook,tb_customerinfo
wheretb_bookinfo.BookId=tb_shopbook.BookIdand
tb_shopbook.CustomerId=tb_customerinfo.CustomerId
2定义一个视图客户可以根据其姓名查询所买到的图书的详细信息
createviewbook_info
as
selectCustomerName,BookName,BookTypeId,BookPress,BookPubDate,BookAuthor,BookPrice,BookOutlinefromtb_bookinfo,tb_customerinfo
wheretb_customerinfo.CustomerId=tb_orderdetail.CustomerIdand
BookId=(selectBookIdfromtb_orderdetailwhereRecevstatus='已收货')insertintotb_manager(AdminName,AdminPwd,AdminFlag)values(’admin’,’admin’,1)
insertintotb_customerinfot(CustomerName,CustomerPwd,Customertruename,CustomerSex,CustomerTel,CustomerEmail,CustomerAddr,CustomerRegTime,CustomerQues,CustomerAnswer,CustomerLogTime,CustomerLastLogT)values(‘toy’,’toy’,’李明’,’男’,’’,’*********’,’常熟理工’,’1’,’’,’’,’2010-12-2211:
00:
11:
111’,’2010-12-2211:
00:
11:
111’)
insertintotb_booktypeinfo(BookTypeName)values(’科技类’)
insertintotb_bookinfovalues(‘’,’1’,’php编程宝典’,’清华大学出版社’,’2010-2-1’,’16k’,’第二版’,’云峰’,’’,’978-7-900-2131-8’,’56.00’,’100’,’合法哈客户卡的合法’,’发的发’,’发的发’,’57.00’,’56.50’,’12’,’34’,’0.87’,’C:
//1.jpg’,’90’,’2010-1-11:
1:
1:
111’,’精品包装’)
insertintotb_ordervalues(‘’,’’,’1’,’2010-12-2212:
00:
11:
111’,’2’,’’,’申通快递’,’建行’,’’,’李明’,’常熟理工’,’’,’’,’180’)
insertintotb_orderdetailvalues(‘’,’01’,’’,’1’,’2’,’’,’’,’云峰’,’’,’180’)
insertintotb_parametervalues(‘风云网上书店’,’热熔器额外人’,’的发爱的’,’南京十字路口’,’’,’080-21312’,’@copyrightljfl’,C:
//logo.jpg’,’’,’建行、工行’,’发的发放’,’合法哈客户卡的合法’,’发的发’,’发的发’,’7.00’,’8:
00-12:
00’,’f得法’,’发的说法’,’0.87’,’的法定’)
5.4 创建必要触发器
(1) 定义一个触发器,其基本功能是在tb_bookinfo表中修改库存数量时,检查数量是否小于0,如果是提示库存不足,库存为空。
其具体代码如下所示:
createtriggertrig1
ontb_bookinfo
forupdate
as
ifupdate(BookStoremount)
begin
declare@mountint
select@mount=BookStoremountfrominserted
if(@mount<0)
begin
print'库存不足,库存为空'
rollback
end
end
(2) 定义一个触发器,其基本功能是在填写订单和详细订单的时候相应的总价被计算处理填入相应的位置。
其具体代码如下所示:
createtriggertrig2
ontb_orderdetail
forinsert,update
as
begin
declare@mountint,@pricemoney,@siglepricemoney,@totalpricemoney
set@mount=(selectordermountfrominserted)
set@totalprice=(selecttotalpricefromtb_order,insertedwheretb_order.orderid=inserted.orderid)
set@price=(selectbookpricefromtb_bookinfo,insertedwheretb_bookinfo.bookid=inserted.bookid)
set@sigleprice=@mount*@price
updatetb_orderdetailsetsigletotalprice=@siglepricewhereorderdetailid=(selectorderdetailidfrominserted)
updatetb_ordersettotalprice=(@totalprice+@sigleprice)whereorderid=(selectorderidfrominserted)
end
createtriggertrig2
ontb_orderdetail
forinsert,update
as
begin
declare@mountint,@pricemoney,@siglepricemoney,@totalpricemoney
set@mount=(selectordermountfrominserted)
set@totalprice=(selecttotalpricefromtb_order,insertedwheretb_order.orderid=inserted.orderid)
set@price=(selectbookpricefromtb_bookinfo,insertedwheretb_bookinfo.bookid=inserted.bookid)
set@sigleprice=@mount*@price
update