网上购物数据库设计文档格式.docx
《网上购物数据库设计文档格式.docx》由会员分享,可在线阅读,更多相关《网上购物数据库设计文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
数据类型
是否为空
备注
UserID
客户ID
BigInt
Notnull
主键
UserName
客户名
Varchar(30)
RealName
客户真实姓名
UserPassword
客户密码
Email
客户邮箱
Phone
联系电话
ID
身份证号
Question
密码问题
Null
Result
答案
RegTime
注册时间
Datetime
GradeID
会员等级
AddressID
地址
Int
表1:
客户表字段信息
商品表数据字典:
GoodsID
商品号
GName
商品名称
GPrice
商品价格
Smallmoney
GTypeID
商品类别
GIntro
商品描述
Varchar(200)
GImage
商品图片路径
Varchar(100)
GCount
商品计数
GSail
商品销量
GWeight
商品重量
GDateTime
上架日期
GSize
商品规格
表2:
商品表字段信息
商品类别表数据字典:
TypeID
商品类别号
TypeName
类别描述
Varchar(50)
表3:
商品类别表字段信息
商家表数据字典:
ProducerID
商家号
ProName
商家名
ProAddress
商家地址
ProPhone
商家电话
表4:
商家表字段信息
订单表数据字典:
SubID
订单号
客户号
RAddress
送货地址
SpDate
订购日期
SpCount
订购数量
单价
ReceiptID
发票号
SpPrice
订单金额
Money
SendDate
发货时间
Payment
付款方式
Varchar(20)
SendType
运送方式
SendPrice
邮费
State
订单状态
表5:
订单表字段信息
购物车表数据字典:
CarID
购物车ID
Varchar(10)
商品ID
OrderTime
订购时间
OrderCount
GoodsPrice
UserCheck
用户确认
OrderPrice
购物总额
表6:
购物车表字段信息
会员等级表数据字典:
会员等级ID
GradeType
等级分类
表7:
会员等级表字段信息
评论表数据字典:
CommentID
评论ID
Content1
内容
Title
标题
商家ID
CommentTime
评论时间
表8:
评论表字段信息
供应表数据字典:
SupplyID
供应ID
RealStock
实际存货
MinStock
最低存货
表9:
供应表字段信息
发票表数据字典:
发票ID
表10:
发票表字段信息
地址表数据字典:
地址ID
Address
表11:
三、数据库概念结构设计
3.1E-R模型图的设计
(1)寻找实体集
客户VIP会员商品商家商品类别地址
(2)寻找实体间联系
客户与商品之间多对多联系:
订单,评论
1>
客户与VIP会员之间多对一联系:
属于
2>
会员等级与订单细节一对多:
参照1
3>
订单细节与商品多对一:
参照2
4>
订单细节预订单多对一:
组成
客户与商品之间一对多联系:
购物车
客户与购物车一对一:
拥有
购物车与商品一对多:
存放
购物车与订单细节一对多:
结算
商家与商品之间多对多联系:
供应
商品与商品类别之间多对一联系:
分类
客户与地址之间一对多联系:
所在
(3)确定实体的属性
客户:
客户ID客户名客户真实姓名客户密码客户邮箱联系电话
身份证号密码问题答案注册时间会员等级ID
VIP会员:
会员等级ID等级分类
商品:
商品号商品名称商品价格商品类别商品描述
商品图片路径商品计数商品销量商品重量上架日期商品规格
商家:
商家号商家名商家地址商家电话
地址:
地址号地址名称
商品类别:
商品类别号类别描述
(3)确定联系的属性
订单:
订单号客户号商品号送货地址订购日期订购数量单价
发票号订单金额发货时间付款方式运送方式邮费订单状态
购物车:
购物车ID客户ID商品ID订购时间订购数量单价
供应:
供应ID实际存货最低存货商品ID商家ID
分类:
商品号商品分类
客户类型属于:
客户号客户类型
评论:
评论ID内容标题客户ID商家ID评论时间
客户地址所在:
客户号客户地址
(4)画出E-R图
图2:
客户与商品实体间的详细联系E-R图
图3:
网络购物系统E-R图
四、数据库逻辑结构设计
4.1E-R模型图转化为关系表
(1)实体转化为单独的一张表
(2)多对多联系转化为单独的一张关系表
购物车订单评论供应
(3)其他一对多的联系通过在多的一方增加属性来实现
客户表与会员等级:
在客户表中增加会员等级ID
商品与商品类型:
在商品中增加类型号
4.2描述基本表的关系
E-R图转化为关系模型,关系的码用下划线标出。
此为客户实体对应的关系模式:
客户(客户号,密码,会员等级号,…)
此为VIP会员实体对应的关系模式:
VIP会员(会员等级号,等级类型)
此为商品实体对应的关系模式:
商品(商品号,描述,商品分类,商品名,…)
此为商家实体对应的关系模式:
商家(商家号,商家名,商家电话,…)
此为商品类别实体对应的关系模式:
商品类别(商品类别号,商品类别)
此为联系“购物车”所对应的关系模式:
购物车(购物车号,客户号,商品号,…)
此为联系“订单”所对应的关系模式:
订单(订单号,客户号,商品号,…)
此为联系“评论”所对应的关系模式:
评论(评论号,内容,客户号,…)
此为联系“供应”所对应的关系模式:
供应(供应号,实际存货,最少存货,…)
4.3所有关系表达到BCNF范式
4.4定义视图
(1)订单表中只关联客户、商品的ID,而最终客户核对的应该是包含客户
真实姓名在内的客户必要信息以及包含商品名称的商品信息,分别建立两个
视图:
参照商品的订单细节
createviewView_goods
as
select*fromtb_goods
whereGoodsID='
201201'
参照客户信息的订单细节
createviewView_user
select*fromtb_user
whereUserID='
201'
4.5定义索引
在经常查询的列上(主键)建立聚簇索引
如:
在商品信息表上建立索引
createclusterindexIndex_GoodsID
on
tb_goods(GoodsID)
4.6定义触发器
(1)注册客户自动升级VIP
--创建触发器tr_grade,实现注册客户VIP自动升级
CreateTriggertr_gradeONtb_sub
Forupdate
As
IFUpdate(SpPrice)
Begin
Declare@pricemoney
Select@price=SpPriceFrominserted
If@price>
=30000
Updatetb_usersetGradeID=4
Else
If@price>
=20000
Updatetb_usersetGradeID=3
Else
If@price>
=10000
Updatetb_usersetGradeID=2
Else
If@price>
=0
Updatetb_usersetGradeID=1
End
(2)更新订单,订单金额是商品价格总和
--创建一个更新触发器,及时更新订单
CreateTriggertr_updateOntb_subForUpdateAs
IfUpdate(SpCount)OrUpdate(GPrice)
Begin
Declare@orderNoBigint,@productNoBigint
Declarecur_orderCursorFor
SelectSubID,GoodsIDFromDeleted
Opencur_order
BeginTransaction
Fetchcur_orderinto@orderNo,@productNo
While(@@fetch_status=0)
Begin
Updatetb_sub
Settb_sub.SpPrice=tb_sub.SpPrice-D.SpCount*D.GPrice+I.SpCount*I.GPrice
FrominsertedI,deletedD
Wheretb_sub.subID=I.subIDAndI.subID=D.subID
Andtb_sub.subID=@orderNoAndI.GoodsID=D.GoodsID
AndI.GoodsID=@productNo
Fetchcur_orderinto@orderNo,@productNo
Committran
Closecur_order
Deallocatecur_order
End
(3)更新购物车,选中商品更新商品总额
--更新购物车,选中商品更新商品总额
CreateTriggertr_carOntb_carForUpdateAs
IfUpdate(OrderCount)OrUpdate(GoodsPrice)
Declare@CarIDBigint,@GoodsIDBigint
Declarecur_carCursorFor
SelectCarID,GoodsIDFromDeleted
Opencur_car
Fetchcur_carinto@CarID,@GoodsID
Updatetb_car
Settb_car.OrderPrice=tb_car.OrderPrice-D.OrderCount*D.GoodsPrice+I.OrderCount*I.GoodsPrice
Wheretb_car.CarID=I.CarIDAndI.CarID=D.CarID
Andtb_car.CarID=@CarIDAndI.GoodsID=D.GoodsID
AndI.GoodsID=@GoodsID
Fetchcur_carinto@CarID,@GoodsID
Closecur_car
Deallocatecur_car
(4)创建触发器只允许注册会员在网上下订单
--创建一个触发器tr_sub,只允许注册会员在网上提交订单
CreateTriggertr_subontb_sub
Forinsert
IfNotExists
(select*Frominserted
WhereUserIDin(selecttb_user.UserIDfromtb_user))
Begin
Raiserror('
提交订单前请先注册!
'
16,1)
RollbackTransaction
4.7定义约束
(1)确定实体完整性约束
主键约束
(2)参照完整性约束
--为tb_user表添加参照性约束
altertabletb_user
withnocheck
addconstraintfk_userforeignkey(GradeID)
referencestb_grade(GradeID)
--为tb_goods表添加参照性约束
altertabletb_goods
addconstraintfk_goodsforeignkey(GTypeID)
referencestb_type(TypeID)
--为tb_address增加外键约束
altertabletb_address
addconstraintfk_addressforeignkey(UserID)
referencestb_user(UserID)
(3)用户自定义完整性约束
客户表密码不能少于6位,且不能与客户号相同
Altertabletb_user
AddconstraintCk_pass
Check(6<
=len(Userpassword)andUserpassword<
>
UserID)
电子信箱格式为***********格式
AddconstraintCk_email
Check(Emaillike'
%@qq.%'
)
订单号共12位,前8位是订货日期,后4位是流水号,格式为“201312
150001”
订货时间早于发货时间
altertabletb_sub
addconstraintck_subcheck(SpDate<
SendDate)
5>
发票号码唯一
altertabletb_receipt
addconstraintun_receiptunique(ReceiptID)
6>
订单状态取值为“0”或“1”
addconstraintck_statecheck(Statein(0,1))
7>
身份证号必须为16或者18位
AddconstraintCk_id
Check(IDin(16,18))
8>
……
五、结束语
一个软件最重要的不是前台页面,而是软件的生存期,即实用性的长远,而后者则主要取决于后台的维护。
维护离不开对数据库的操作,所以数据库设计在软件开发过程中是基础也是非常重要的一个环节。
对于开发者而言,好的数据库设计,可以避免功能需求的重大缺陷,如:
访问数据库,查询的冗杂繁琐。
数据库更新操作的错误异常等。
通过这次设计,更让我深刻感受到,打好基础的重要性,当然也对数据库的了解加深一步。
尽管整个数据库设计做下来,非常的艰辛,但从中学到的知识远比辛苦更加珍贵。
本次的设计也有很多不足之处,数据表之间的关联,关系表的范式,以及一些有待解决的问题也随之而来。
供应关系中,购买数大于世纪存货梁,应通知商家及时补货,这个流程还没有完善,等等。
我会带着这些问题,在以后的设计中注意改善。
六、参考文献
[1]王珊,萨师煊.数据库系统概论[M].北京:
高等教育出版社,2006.5