首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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张表之间没有设置任何表间约束。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论