网上购物系统数据库设计.ppt
网上购物系统数据库的设计,现在要求你为网上购物系统设计一个数据库,背景如下: 网上购物系统前台的客户共分两类:一类是注册客户(正式客户),这类客户有基本的信息,可以对自己的进行信息的查看与修改,可以随时实现网上购物。当客户在网站所购商品总金额达一定数量,可以根据量值不同自动升级成为不同等级的VIP会员,并享受不同折扣优惠;另一类客户是游客(未注册客户),他只能查看、浏览网站信息。 游客:可以查看商品信息、浏览网站信息,经过注册可以成为注册客户。 注册客户: 注册、客户信息查看和修改。 客户登录、确认客户信息,显示客户信息。 商品信息浏览、购物车管理、商品查找、商品评论和建议。 结帐、确认订单、订单状态查询、历史订单查询。,用户注册后,登陆到电子商务网站中,可以进入购物流程(或在结帐之前注册并登陆系统)。 客户在浏览商品后,可将满意商品放入购物车,购物车内可以随意增加、删除商品,修改商品数量,并同时统计购物车内商品总额。 商品结帐前,必须填写一张配送单。配送单默认为客户注册时的基本信息,当然配送地址可由客户修改为合适的收货地址,支付方式也可根据提示由客户自定。 客户确认购物车内信息无误,即可生成订单。 客户可以在前台页面查看订单状态,订单状态可以是“0”或“1”,“1”表示订单上的商品已发出, “0”表示订单上的商品未发出。 注册客户分为普通客户和VIP客户。当普通客户总的订单金额达到10000元,即可升级为VIP客户。VIP客户一般分为三个等级,对他们的优惠策略是在普通客户的价格上同时享有折扣优惠。其中。三级会员,订单金额在10000,15000)元,享受折扣9折;二级会员,订单金额在15000,25000)元,享受折扣8.5折;一级会员,订单金额在25000及以上,享受折扣7.5折。,每种商品包含商品号(唯一)、商品分类、生产厂商、每个厂商的实际存货量、规定的最低存货量和商品其它描述。 每个客户包括客户号(唯一)、客户名、E-Mail、密码、姓名、性别、邮政编码、地址(一个客户可有几个地址)、客户所属VIP级别、折扣优惠。 每个订单包含订单号、客户号、收货地址、订单日期、订单金额、订单明细(每个订单都有几个明细)内容为商品号、单价、订货数量。 由于处理上的要求,每一订货细则中还应有一个订单处理状态。 客户可以给商品发表评论,主要有评论号、客户号、商品号、客户邮箱、评论内容、评论时间。,请你设计一个数据库,并确定要满足的各种约束,使得其中: 保存了所需的所有信息 支持商品管理的各种应用 尽可能地优化:减少冗余、提高查询速度 画实体-联系图 将实体-联系图转换为关系表,实体-联系图,寻找实体集: 客户 VIP会员 商品 生产厂商 商品类别 地址 寻找实体集之间的联系: 客户和商品之间的多对多联系:订单、评论 客户和VIP会员之间的多对一联系: VIP会员等级 生产厂商和商品之间的多对多联系:供应 商品和商品类别之间的多对一联系:商品类别 客户和地址之间的一对多联系:客户地址,确定实体的属性: 客户:客户号、密码、姓名、性别、单位、电子信箱、身份证号 VIP会员表:会员等级、会员折扣 商品:商品号、商品名称、类别号、商品描述、单位、规格、单价、其他? 生产厂商表:厂商号,生产厂商名、地址、电话 商品类别:类别号、类别名称 地址:地址号、地址名称 确定联系的属性: 订单:订单号、客户号、商品号、收货地址、订货日期、订货数量、单价、发票号码、订单金额、发货日期,供应:商品号、厂商号 商品分类:商品类别号、类别名称 客户类型:客户号、客户类型 评论:评论号、客户号、商品号、客户邮箱、评论内容、评论时间。 客户地址表:客户号、客户地址,检查是否包含了所有必需的信息?,如何确定客户类型? 商品类型分为手机、小灵通,表示为商品的一个属性还是商品和商品类别的联系? 商家能提供订单商品的所有数量吗? 商家如何保证日常销售? 不同VIP等级享有不同的折扣,具体方案如何? 客户如何判断订购商品是否发出? 订单上的订单金额是如何取得其值?,客户分为普通客户和VIP会员 客户类型:类型号、类型名称 客户和客户类型间存在多对一的联系 商品分为手机、小灵通 表示为商品的一个属性还是商品和商品类别的联系? 商品分类:类别号、类别名称 商品和商品类别之间存在多对一的联系 商家能提供订单商品的所有数量吗? 给供应表增加属性:实际存货量 若订单上商品数量超过实际库存则取实际库存值或取消订单。 商家如何保证日常销售? 给供应表增加属性:最低存货量 若供应表的实际存货量低于最低存货量,应及时补货,不同VIP等级享有不同的折扣,具体方案如何? 给客户添加一个属性:vip等级,根据等级分别享有10折(即普通客户)、9折、8.5折、7.5折优惠。 客户如何判断订购商品是否发出? 给订单添加一个属性:订单状态。 订单状态可以是“0”或“1”,“1”表示订单上的商品已发出, “0”表示订单上的商品未发出。 若订单不能在规定日期送达,客户可退单或做其它处理。 订单上的订单金额是如何取得其值? 在一个订单上可能有多种商品,因此,订单金额是一个计算列,不能有客户输入一个值,管理员可以设置触发器来完成统计功能。,小结,实体: 客户:客户号、密码、姓名、类型号、性别、单位、电子信箱、身份证号、 VIP等级 VIP会员表:会员等级、会员折扣 商品:商品号、商品名称、类别号、商品描述、单位、规格、单价、其他? 生产厂商表:厂商号,生产厂商名、地址、电话 商品类别:类别号、类别名称 地址:地址号、地址名称 客户类型:类型号、类型,小结(2),实体间的联系:,商品,客户,商品类别,VIP会员,分类,n,1,订单,m,n,属于,n,1,供应,生产厂商,m,评论,n,n,m,地址,所在,n,1,商品,m,n,属于,客户类型,1,1,检查是否支持各种应用,能否及时更新客户累计的订购金额? 需要创建一个触发器,当客户更新订购信息时能及时而自动地统计客户的订购金额 如何使客户在完成一定的订购金额或数量后自动VIP客户? 普通客户变成VIP客户主要看客户累计完成的订购金额或数量,如果是达到一定要求,也必须由触发器便自动将客户升级为不同的VIP客户。 需要在客户实体中增加一个属性:VIP等级 如何判断订单商品已经发送? 为了方便查看所购商品是否已发出,可以在订单中增加属性:订单状态,实体联系图转换为关系表,实体转化为单独的一张表 客户:客户号、密码、姓名、性别、单位、电子信箱、身份证号、 VIP等级 VIP会员表:会员等级、会员折扣 商品:商品号、商品名称、类别号、商品描述、单位、规格、单价 生产厂商表:厂商号,生产厂商名、地址、电话 商品类别:类别号、类别名称 地址:地址号、地址名称 客户类型:类型号、类型,多对多联系转换为一张单独的关系表 订单:订单号、客户号、商品号、收货地址、订货日期、订货数量、单价、订单状态、发票号码、订单金额、发货日期 评论:评论号、客户号、商品号、客户邮箱、评论内容、评论时间。 供应:商品号、厂商号、最低存货量、实际存货量 其他一对多的联系通过在多表中添加属性来实现: 客户:客户号、姓名、密码、客户类型、性别、单位、电子信箱、身份证号、 VIP等级 商品:商品号、商品名称、类别号、商品描述、单位、规格、单价,优 化,为了减少客户表中的冗余,将客户表分解为: 客户表:客户号、姓名、密码、性别、单位、电子信箱、身份证号、 VIP等级 单位表:单位号、单位名称、联系电话 客户地址表:客户号、客户地址 为了减少系统开销,将客户类型表删除,其主要信息转换成客户表的客户类型属性;客户类型有两种:普通和VIP,若为普通,则在VIP等级中取值0。 地址表也删除,其主要信息放在客户地址表中。 为了减少订单的冗余,将订单表分解为: 订单总表:订单号、客户号、收货地址、订货日期、订单状态、发票号码、订单金额、发货日期 订单明细表:订单号、商品号、订货数量、单价、订货日期 分解前后该表分别属于第几范式?,确定完整性约束,确定实体完整性约束 各表主键是什么?(略) 参照完整性约束 各表外键是什么? (略) 用户自定义完整性约束 数据类型约束 数据长度、精度约束 取值范围约束,客户表中密码至少6位,并不能与客户号同名。 性别只能取M或F 电子信箱的格式应为“xxxxxx.xxx”格式。 订单表中订单号共12位,前8位是订货日期,后4位是流水号,格式为“200707010001”。 订货时间要早于出货时间。 发票号码必须唯一。 订单状态取值为“0”,“1”。 订单金额必须是明细表中同一订单所有商品总价格之和(触发器完成)。 其他:如默认值、空值等等 还有其他约束吗?,进一步的思考,在这种数据库模式下,能否检测得到某一客户所购商品数量是否超过实际存量?可以如何改进? 如何实现商品销售排行榜? 如何确认畅销商品、滞销商品? 这些关系表达到了第几范式?,