15.3 总体设计
了解了系统的基本功能和操作以后,接下来分析一下系统的总体设计方案,以便对整个系统的基础构造有一个大致的了解。
15.3.1 业务实体设计
DigitalStore应用中的业务实体包括用户(User)、商品(Product)、购物车(Cart)、订单(Order)、购物车中的商品(Item)。下面将详细介绍这些实体模型的含义。
User:代表一个用户实体。主要属性包括用户标识、用户名、密码、真实姓名、电子邮件、联系电话等。
Product:代表一个商品实体。主要属性包括商品标识、名称、介绍、图片路径及所属的商品类别等。
Order:代表一个订单实体。主要属性包括订单标识、所属的用户标识、商品集合和相关的统计数据。
OrderProduct:代表订单中的一条商品记录,主要属性包括记录标识和对应的商品信息。
Cart:代表购物车实体。主要属性包括商品集合以及相关的统计数据。
Item:代表购物车中的一个商品实体。主要属性包括对应的商品信息。
图15-24为DigitalStore应用域模型的业务实体关系示意图。

图15-24 DigitalStore应用域的业务实体关系示意图
15.3.2 主键生成策略
应用系统对主键的要求一般有两个:
必须保证唯一性;
主键本身无意义,即与应用逻辑无关。
主键生成策略要保证唯一性和无意义,最简单的方法是使用一个单调递增的正整数,同时要注意解决事务管理问题,即当多条记录同时试图写入时不会造成冲突。
如果应用比较庞大,需要的主键数可能是个“准天文数字”,建议使用这样的策略:主键=N位随机数+系统时间(毫秒级)+K位随机字符串。这样产生的主键可以保证唯一性和无意义,并且有数量庞大的主键空间。如果需要的话,系统时间区间还可以设置记录的时间顺序。
本系统采用一种简单的主键获取方法:新建一张primarykey表,用来存储表的新主键值。在插入一条新数据之前,先从主键表读出对应表的新主键的值赋予该条记录,然后主键表里的新主键的值加1,再执行记录插入,将这些操作封装为一个事务。
对于规模不大的应用,该方法生成的主键简单明了,得到的是个单调递增的正整数,相当于模拟了数据库的主键自增功能。
15.3.3 数据模型设计
User、Product、Order和OrderProduct 4个实体需要持久化,它们在数据库中有对应的表。图15-25为DigitalStore的关系数据模型。包括上述4个业务实体的持久化和主键表。

图15-25 DigitalStore的关系数据模型
|
|
实际上,为了最大限度地简化应用,本书的数据库中5张表之间没有设置任何表间约束。 |







