网上购物系统

1.系统需求分析

网上购物系统分前台功能和后台功能两大部分。前台主要供用户浏览和购买商品,后台主要供管理员使用,管理员可以对商品信息、订单信息及网站的新闻、公告进行管理。

1.1前台功能分析

网上购物系统前台的用户共分两类:一类是注册用户(正式用户),这类用户有基本的信息,可以对自己的信息进行查看与修改,可以随时实现网上购物。当用户在网站所购商品总金额达一定数量,可以根据所购商品总金额数量不同自动升级成为不同等级的VIP会员,并享受不同折扣优惠;另一类用户是游客(未注册用户),他们只能查看、浏览网站信息,可以把商品加入购物车或收藏夹,但不能实现购买。

游客:可以查看商品信息、浏览网站信息,可以把商品加入购物车或收藏夹,但不能实现购买。经过注册可以成为注册用户。

注册用户:

登录后对可以对个人信息进行查看和修改。

商品信息浏览、商品查找、商品评论和建议。

注册用户不仅可以对网站商品进行浏览和查找外,还可以对商品进行评论、向管理员发送消息提出自己的建议。

选购商品加入购物车或收藏夹、对购物车或收藏夹信息进行管理。

用户注册后,登陆到电子商务网站中,可以进入购物流程。用户在浏览商品后,可将满意商品放入购物车或收藏夹,购物车内可以随意增加、删除商品,修改商品数量,并同时统计购物车内商品总额。用户可对购物车的商品进行修改或删除,或对收藏夹中商品进行删除。

结帐、确认订单、订单状态查询、历史订单查询。

用户确认购物车内信息无误,即可生成订单。在生成订单时,必须填写一张配送单。配送单默认为用户注册时的基本信息,当然配送地址可由用户修改为合适的收货地址,支付方式也可根据提示由用户自定。下单后,用户可以在前台页面查看订单状态,订单状态可以是“末处理”,“已发货”,“已付款”。

5、发表及回复留言。

为了加强注册用户之间的交流,网站还提供了论坛功能,注册用户可以在某一个论坛版块中发贴,也可以回复别人的贴子。

1.2后台功能分析

网上购物系统后台主要是供管理员使用的,管理员可对商品的一级分类信息、二级分类信息、商品信息进行添加、删除、查询及修改;对用户订单进行处理;管理用户在论坛中发表的留言,删除不健康及不利于网站的留言;回复用户发送的消息;对网站的新闻、公告进行管理。

管理员也可以具有不同的权限分为超级管理员和普通管理员,普通管理员具有以上权限,超级管理员除了可以具有以上所有功能外,还可以添加、删除普通管理员。

2.数据库设计

2.1数据库概念结构设计

对网上购物系统进行分析之后,抽象出有关的数据,按照现实世界的事物能作为属性对待的,尽量作为属性对待的原则。作为“属性”,不能再具有需要描述的性质,“属性”必须是不可分的数据项,不能包含其它的属性;“属性”不能与其它实体具有联系,E-R图中所表示的联系是实体与实体的联系。依照以上准则,可以确定哪些为实体,哪些为属性,每个实体具有哪些属性,实体之间存在何种联系。经分析之后,该系统中包含的实体以及实体之间的联系如下所示:

实体:一级分类、二级分类、商品、用户、订单、订单明细、送货地址、论坛版块、留言、VIP用户等级、管理员、新闻、公告。

(注:因为订单中包含若干订单明细,根据“属性”是不可分的数据项,所以要反“订单明细”上升为实体。同样的道理,一个用户对应多个送货地址,所以“送货地址”也要上升为实体。另外,因为用户等级要与优惠政策挂钩,所以用户等级也要定义为实体,即VIP等级。)

实体间存在的联系:

一级分类和二级分类之间存在一对多的子类联系

二级分类与商品之间存在一对多的分类联系

商品与注册用户之间存在三个多对多的联系:收藏、选购和评论

用户与订单之间存在一对多的下单联系

订单与送货地址之间存在多对一的对应2联系

用户与送货地址之间存在一对多的对应1联系

订单与订单明细之间存在1对多的包含1联系

订单明细与商品之间存在多对1的包含2联系

论坛版块与留言之间存在一对多的归属联系

用户与留言之间存在一对多的发贴联系和多对多的回复联系

用户与VIP等级之间存在多对一的属于联系

用户与管理员之间存在多对多的消息联系

实体的属性:

一级分类:一级分类号,一级分类名

二级分类:二级分类号,二级分类名,一级分类号

商品:商品号,商品名称,所属分类,颜色,大小,商品描述,单价,库存量,已售出量,其他

用户:用户号,用户名,密码,真实姓名,性别,出生年月,邮箱,电话,单位,城市,地址,注册时间,积分,用户等级,安全问题,安全答案

(注:积分属性用来记录该用户的总订单金额,一元为一分;为了让忘记密码的用户可以从邮箱中找回密码,设置安全问题,安全答案两个属性)

VIP用户等级:用户等级,用户折扣,积分下限,积分上限

(注:用户等级分为四等,根据等级分别享有10折(即普通客户)、9折、8.5折、7.5折优惠。)

订单:订单号,用户号,订货时间,收货人,收货人电话,送货方式,送货地址,邮编,订单总金额,发货时间,订单状态

订单明细:订单明细号,订单号,商品号,数量,单价,折扣价

送货地址:用户号,地址,邮编,电话。

论坛版块:版块号,版块名称,版主

留言:留言号,用户号,标题,内容,时间,回复数量,查看数量,最后回复人,是否置顶,是否精华,所属版块。

管理员:管理员ID,密码,权限

新闻:新闻号,标题,内容,时间

公告:公告号,标题,内容,时间

加了下划线的属性组为实体的码。

联系的属性:

选购:用户号,商品号,数量,单价,折扣价,选购时间

收藏:用户号,商品号,收藏时间

评论:用户号,商品号,标题,评论内容,评论时间

消息:消息发送者,消息接收者,内容,时间,状态

回复:用户号,留言号,主题,内容,回复时间

系统E-R如下图所示:

mysql数据库电商购物项目实战_mysql数据库电商购物项目实战

2.2数据库逻辑结构设计

2.2.1关系模型的设计

根据系统E-R图,把实体与实体之间的联系转换成关系模型,E-R图中的每个实体转换成一个关系模型,实体之间一对多的联系合并到多方实体对应的关系模型中,把一方的码与联系的属性纳入到多方实体对应的关系模型中,为实体之间多对多的联系创建一个新的关系模型,它包含双方的码以及联系的属性。具有相同码的关系模型有些情况下可以考虑把它们合并。在转换过程中应该按照关系规范化的理论,对关系模型进行优化,减少冗余和数据操作异常,提高查询速度,在性能与范式之间作出权衡,一般所设计出的关系数据库达到3NF就基本符合要求。按照以上原则,我们可以把系统E-R图中实体及实体之间的联系转换成关系模型,如下所示:

一级分类(一级分类号,一级分类名)

二级分类(二级分类号,二级分类名,一级分类号) //已经包含了一级分类与二级分类之间的一对多联系

商品(商品号,商品名称,所属分类,颜色,大小,商品描述,单价,库存量,已售出量,其他) //已经包含了二级分类与商品之间的一对多联系

用户(用户号,用户名,密码,真实姓名,性别,出生年月,邮箱,电话,单位,城市,地址,注册时间,积分,用户等级,安全问题,安全答案) //已经包含了VIP用户等级与用户之间的一对多联系

VIP用户等级(用户等级,用户折扣,积分下限,积分上限)

订单(订单号,用户号,订货时间,收货人,收货人电话,送货方式,送货地址,邮编,订单总金额,发货时间,订单状态) //已经包含了用户与订单之间、送货地址与订单之间的一对多联系

订单明细(订单明细号,订单号,商品号,数量,单价,折扣价,订货时间)//已经包含了订单与订单明细之间、商品与订单明细之间的一对多联系

送货地址(用户号,地址,邮编,电话)

论坛版块(版块号,版块名称,版主)

留言(留言号,用户号,标题,内容,时间,回复数量,查看数量,最后回复人,是否置顶,是否精华,所属版块)//已经包含了论坛版块与留言之间的一对多联系

管理员(管理员ID,密码,权限)

新闻(新闻号,标题,内容,时间)

公告(公告号,标题,内容,时间)

收藏夹(用户号,商品号,收藏时间) // 对应收藏联系

购物车(用户号,商品号,数量,折扣价,选购时间) //对应选购联系

评论(用户号,商品号,标题,评论内容,评论时间) //对应评论联系

消息(消息发送者,消息接收者,内容,时间,状态) //对应消息联系

回复(用户号,留言号,主题,内容,回复时间)//对应回复联系

各关系模型中加下划线的属性组为码。为了方便起见,也可为某些表添加一个具有唯一标识的属性作为码,如:

回复(回复ID,用户号,留言号,主题,内容,回复时间)//添加回复ID作为码

消息(消息ID,消息发送者,消息接者,内容,时间,状态)//添加消息ID作为码

评论(评论ID,用户号,商品号,标题,评论内容,评论时间)//添加评论ID作为码

购物车(购物车ID,用户号,商品号,数量,折扣价,选购时间)//添加购物车ID作为码

收藏夹(收藏ID,用户号,商品号,收藏时间)//添加收藏ID作为码

2.2.2约束的说明

在SQL Server2000中或2005中创建网上购物系统的数据库NetShop,建立各个表及有关的完整性约束,建议在SQL Server中创建的表名及表中的字段名都使用英文,且做到见名知意。

对约束的要求:

(1)实体完整性约束:为各个表创建主键约束,以实现实体完整性约束。

(2)参照完整性约束:为各个表创建外键约束或创建触发器来实现参照完整性约束。

(3)用户自定义完整性约束: 根据本系统对数据的要求,为表中的某些列实现以下自定义完整性约束。有的可以通过在定义表时指定数据类型,长度来实现,有的通过核查约束来实现,有的通过默认值、是否允许空值来实现,有的通过触发器来实现。

数据类型约束

数据长度、精度约束

取值范围约束

用户表中密码至少6位,并不能与用户号同名。

性别只能取‘男’或‘女’

订单表中订单号共12位,前8位是订货日期,后4位是流水号,格式为“200707010001”。

订货时间要早于发货时间。

订单状态取值为“末处理”,“已发货”,“已付款”。

订单金额必须是明细表中同一订单所有商品总价格之和(触发器完成)。

其他:如默认值、空值等等

还有其他约束吗?

2.2.3检查是否支持复杂应用

1、当用户订购某一商品时,要根据订货数量与商品库存量比较的结果选择是否能够正常订购,或不能,提示有关信息,若能,还应即时修改商品的库存量与已售出量。

可以创建一个触发器,当用户添加订购信息时能做出相应处理。

2、如何使用户在完成一定的订购金额或数量后自动VIP用户?

普通用户变成VIP用户主要看用户累计完成的订购金额或数量,如果是达到一定要求,也必须由触发器便自动将用户升级为不同的VIP用户。

3、订单上的订单金额是如何取得其值?

在一个订单上可能有多种商品,因此,订单金额是一个计算列,不能让用户输入,可以设置触发器来完成统计功能。

查看某个用户的所有订单。

可以创建一个带一个输入参数的存储过程来实现。

查看某张订单中的订单明细。

可以创建一个带一个输入参数的存储过程来实现。

进一步的思考

如何实现商品销售排行榜?

如何确认畅销商品、滞销商品?

这些关系表达到了第几范式?

2.3数据库物理结构设计

在经常查询,但更新较少的列上建立索引以提高查询速度。