复选阶段
1. 项目经验材料
1.1 项目概况介绍:Web20概念类的网络图片收藏夹(同类网站:http://flickr.com/)
具有以下几个功能:
(1)用户的管理:包括与现有认证系统的连接
(2)图片管理:对图片可以添加Tag,备考等,最新登录图片的排行榜,人气图片排行榜等等。
(3)Tag云图(Tag Cloud)
其中Tag属于Web2.0的一个流行特性,就像目录,但是与目录不同,它强调用户的参与,用户可以根据自己的兴趣,主观判断对一个图片添加特定Tag(标签)。随着系统中的Tag数量的增加,简单的通过云图可以了解到最近流行什么。这也是我们数据库设计的重点。
1.2 项目开发环境:Mysql5,Java1.5(JSP,JSTL)
1.3 数据库设计:
整个数据库分为3个实体对象:用户,图片,标签(Tag)。对于用户而言,因为要和现存的认证系统相连,所以尽可能少的在本系统中保留用户信息,只是维护用户的帐户信息。图片实体要保存名称,登录的日期,图片发生的日期,对这个图片所添加的所有标签,备考等信息。Tag实体如下定义:
图片表: 图片ID 图片信息 |
图片Tag关联: 图片ID TagID |
Tag表: TagID TagName |
这样的设计,符合规范化设计,结构清晰。对于数据的检索,不会超过5个数据库表(这个是经验值),对数据库的性能影响不会很大。
在项目过程中,也考虑过选用其他的方案,比如:
图片表: 图片ID 图片信息 |
图片Tag关联: 图片ID TagName |
没有采用这个方案的理由有:图片Tag关联会产生很大数据冗余,这是因为TagName会出现重复,而且它所占的字节数也可能很大(本系统设定为Varchar(64));对于Tag的统计而言,相比TagName,应用TagID(数值形)作为检索条件,速度更快。
1.4 参考资料:
http://www.klogs.org/archives/2004/11/ecaoeioeaeieeoe.html
http://blog.zkdu.com/index.php/archives/73
http://blog.timetide.net/archives/2005/01/
http://www.csdl.ac.cn/lis/index.php/%E6%9D%8E%E5%BF%A0%E9%9C%9E
2. 应用创新谈
2.1:跨数据库系统的设计考虑,比如定义字段时,字段类型尽可能的在以后可能的数据库平台上通用(比如:Oracle,Mysql)
2.2:数据库(特别时表和字段)的命名规约要在设计之前确定好。比如:
表名采用复数:users,categories
字段名的单词之间采用下划线分割:post_content
2.3:在进行复杂的检索的时候,关联的表的件数不能超过5个,超过的话,会引起数据库性能的急剧下降。