论述题 11.  一个简单的论坛系统中数据库扮演着非常重要的角色,假设数据库需要存储如下的一些数据:用户名、email、主页、电话、联系地址、发帖标题、发帖内容、回复标题及回复内容。每天论坛访问量400万左右,更新帖子10万左右。请给出数据库表结构设计,并结合范式简要说明设计思路。
【正确答案】1)在论坛系统中,最重要的对象就是用户与帖子。显然,可以给用户单独设计一张表,由于帖子对象比较特殊,每个帖子都会有回复帖,而回复帖也会有回复帖,如此递归。由于论坛中会有大量的帖子,因此,对帖子表的设计是非常重要的。为了提高查询效率,在设计的时候可以把主题帖与回复帖分开为两张表;对于回复帖的回复帖,可以考虑在回复帖的表中增加一个额外的字段(回复帖子的id)。
   2)E-R图设计:通过以上分析可知,这个简单的论坛系统主要有3个实体:用户t user、主题帖t_mainPost及回复帖t_replayPost。它们之间有如下关系:
   ①一个用户可以发0个或多个主题帖,因此,t_user与t_mainPost的关系为一对多的关系。
   ②一个用户可以有0个或多个回复帖,因此,t_user与t_replayPost的关系为一对多的关系。
   ③一个主题帖可以有0个或多个回复帖,因此,t_mainPost与t_replayPost的关系也是一对多的关系。
   通过以上分析,下面给出数据库设计的E-R图,如图所示。
   
【答案解析】