各实体间的关系如下:Item、LineItem和CartItem都是一对一的关系,订单和购物车的每一种商品是对应Item的不同包装形式,而Order与LineItem、Cart和CartItem都是一对多的关系,订单和购物车中都可以有多个商品。Item与Product、Product与Category都是多对一关系,一个类别下会有多个产品,一个产品下会有多个不同型号的商品条目。一个用户可以有多个订单,因此Order与Account之间的关系是多对一的关系。 订单中除了包括所购买的产品的信息,还应包括下订单的客户,订单的发货地址或收款地址,信用卡的详细信息以及订单状态,订单状态可以帮助商品客户和管理员了解彼此关于订单的处理情况。
5.2 网上购物系统的实体类图
根据以上分析得到的网上购物系统实体之间的关系,将该系统中的实体转化为实体类图如下:
MemberCategory-cardID-Name-Descn+getcardID() : int+setcardID()+getName() : char+setName()1*-结束3-结束4-结束-1结束21*-userID-passWord-E-mail-userName-Status-listOption+getuserId() : int+setuserID()+getuserName() : char+setuserName()+getStatus() : bool+setStatus()Order-orderID-userID-orderDate-shipAddr-shipCity-shipState-shipZip-shipCountry-totalPrice-creditCard-creditType+getorderID() : int+setorderID()+getuserID() : int+setuserID()+gettotalPrice() : double+settotalPrice()Product-productID-cartID-Name-Descn+getProductID() : int+setProductID()+getcategoryID() : int+setcategoryID()*1Item-itemID-listPrice-unitCost-supplier-Status-Quantity+getitemID() : int+setitemID()+getlistPrice() : double+setlistPrice()+getStatus() : bool+setStatus()-结束65ListItem-itemID-orderID-lineNumber-Quantity-unitPrice+getitemID() : int+setitemID()+getorderID() : int+setorderID()+getQuantity() : int+setQuantity()-结束10-结束91*-结束-7结束811
5.3 网上购物系统的业务类图
根据系统中对实体相关的操作,得到系统业务类图如下:
对于用户、商品类别、商品系列、商品条目,订单等进行简单操作,如添加、删除、修改等。
MemberOrder*-结束9**-结束10-结束11-结束12*AccountImpl+getAccount(String username)() : AccountImpl+getAccount(String username,String passwd)() : AccountImpl+insertAccount(Account account)() : bool+updateAccount(Account account)() : bool+getUsernameList()() : AccountImpl-结束71-结束8*OrderImpl+getOrder(int orderID)() : OrderImpl+insertOder(Order order)() : bool+updateAccount(Order order)() : bool+getOrderID(int orderID)() : int1*-结束6-结束5ItemItem-结束13-结束14**+getItemI(String itemName)() : Item+insertItem(Item item)() : bool+updateItem(Item item)() : bool+deleteItem(Item item)() : bool*-结束21-结束1Product-结束15Product-结束16+getProducr(String proID)() : Product+InsertProduct(Product pro)() : bool*+updateProduct(Product pro)() : bool*+deleteProduct(Product pro)() : bool*-结束4-结束31Category+InsertCatrgory(Categort cart)() : bool+DeleteCategory(Cartgory cart)() : bool+getCategory(Category cartname)() : Category+updateCategory(Category cart)() : bool-结束17-结束18**Category
第六章 网上购物系统数据库模型设计
注册用户(Member)、商品类别(Category)、商品系列(Product)、商品(Item)、订单中的商品(LineItem)和订单(Order)等对象都需要持久化,因为他们一般不会更改。所以他们在数据库中必须有对应的表。而代表购物车的Cart和代表购物车中的商品的CartItem类对象都不需要持久化,因为购物车Cart和购物车里的商品CartItem都是随着用户退出系统自动消亡,他们存在于内存中,生命也仅限于HTTP Session范围内,因此这两个模型并不存在对应的数据模型,并且每个注册用户相应的有一个用户账户Account。
根据以上数据模型设计原则,网上购物系统的数据表基本结构和香精的数据模型设计如下:
1. 注册用户表(Member)与注册用户数据模型
注册用户表存放网上购物系统的组侧用户信息,包括用户的用户名、密码、姓名、联系方式等信息。 序号 字段名 1 2 3 4 userId 类型 integer 长度 主键 是否为空 描述 80 是 否 否 否 否 否 否 是 用户ID 用户名 密码 电子邮件 userName varchar 80 passWord varchar 80 E-mail varchar 80 4 5 status varchar 2 否 否 否 是 状态 列表选择 listOption varchar 80
2. 用户账号表(Account)与用户账户数据模型
用户账户表用来保存注册用户的信用卡的信息。包括用户ID、密码、地址等。 序号 字段名 1 2 3 4 5 6 7 8 9 10 userId E-mail name status Addr city state zip phone 类型 长度 主键 是否允许为空 描述 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 用户ID 密码 电子邮件 用户名 状态 地址1 城市 省份 邮编 联系电话 integer 80 varchar 80 varchar 255 varchar 2 varchar 80 varchar 255 varchar 20 varchar 20 varchar 80 passWord varchar 80
3.商品类别表(Category)与商品类别数据模型
商品类别记录了网上购物系统的商品分类的相关信息,以便对商品的信息进行分类显示。为了能使用户找到所需的商品信息,对所示商品按照品牌进行分类管理。 序号 字段名 类型 1 2 3 cartId name descn integer 长度 主键 是否允许为空 描述 20 是 否 否 否 否 是 商品类别ID 商品类别名称 描述 varchar 80 varchar 255
4.商品条目表(Item)与商品条目数据模型
商品条目表包括条目的ID、产品的ID、单价、供货商、状态等,其字段设置为: 序号 字段名 1 2 3 4 5 itemId listPrice unitCost supplier 类型 integer 长度 主键 是否允许为空 描述 20 是 否 否 否 否 否 否 否 否 是 商品条目ID 产品ID 单价 进货价格 供货商 productId varchar 20 varchar 20 varchar 20 varchar 255 5.商品系列表(Product)与商品系列数据模型
商品系列表记录了商品的ID、商品类别、商品的名称以及相应的描述信息。 序号 字段名 1 2 3 4 cartId name descn 类型 长度 主键 是否允许为空 描述 20 是 否 否 否 否 否 否 是 商品系列ID 商品类别 商品名称 描述 productId integer varchar 20 varchar 20 varchar 255
6.商品条目中的供应商表(Supplier)和供应商数据类型 商品条目包括供应商ID、名称、状态、电话等。 序号 字段名 类型 1 2 3 4 5 6 7 suppId name Addr city state zip phone integer 长度 主键 是否允许为空 描述 20 是 否 否 否 否 否 否 否 否 是 是 是 是 是 供货商ID 供货商名 地址 城市 省份 邮编 电话 varchar 80 varchar 80 varchar 255 varchar 20 varchar 80 varchar 80 7.存货清单表(Inventory)与存货清单数据模型 因为每个商品都有库存数量,而库存数量通常是与仓库信息系统相连的,所以必须建立一个单独的表即存货清单表 序号 字段名 类型 1 2 itemId qty integer 长度 主键 是否允许为空 描述 20 是 否 否 否 商品ID 商品数量 varchar 20 8.订单表(Order)与订单数据类型
订单表包括条目ID,产品ID,单价,进货价格,状态;地址等信息。一个用户可以拥有多个订单,其中的字段属性userId描述了订单所属的用户,一个订单中,可以根据商品条目的不同,有不同的订单。 序号 字段名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 orderId userId orderDate shipaddr shipsCity shipState shipZip courier totalPrice billToname creditCard payMethod cardType 类型 integer Date 长度 主键 是否允许为空 描述 20 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 订单ID 订单的用户 订单日期 送货地址 送货城市 送货省份 送货邮编 送货方式 总价格 账单接收人 货物接收人 信用卡号 支付方式 信用卡类型 varchar 80 varchar 80 varchar 80 varchar 80 varchar 20 varchar 80 decimal 10 varchar 80 varchar 80 varchar 20 varchar 80 shipToname varchar 80 9.订单条目表(LineItem)与订单条目数据类型 订单和订单条目之间是一对多的关系,LineItem表中的orderId字段描述了订单条目所属的订单。订单条目表包括订单条目的ID号,关联订单ID,商品在订单中的序号,数量,价格。 序号 字段名 1 2 orderId 类型 integer 长度 主键 是否允许为空 描述 20 20 是 是 否 否 订单条目ID 关联订单 lineitemId integer 3 4 5 6 lineNum itemId qty unitPrice integer integer 80 255 否 否 否 否 否 否 否 否 序号 关联商品 数量 单价 varchar 20 decimal 20
10.订单状态表(OrderStatus)与订单状态数据模型 一个订单中的每一个订单条目都有一个相应的状态,如缺货还是发货,在这里单独列出一个订单状态表。orderId和linenum字段共同决定了一个条目,所以该表的主键为lineitemId和orderId. 序号 字段名 1 2 3 4 orderId lineNum status 类型 长度 主键 是否允许为空 描述 是 否 否 否 否 否 是 否 关联订单 序号 时间 状态 integer 20 integer 80 varchar 2 timeStamp Date