如何设计一个实现下列目标的论坛数据库?

waterflier 2003-08-11 02:15:33
1)帖子具有唯一的id,只需要这个id不需要知道帖子属于哪个板块就可以访问
2)一个帖子可以具有非常多的回复
3)可以方便的查找都某个人的所有主贴和所有参与的帖子
4)板块很多,但是选择某个板块依旧可以快速的显示该板块最新的帖子
5)可以按标题或内容查找贴子,并且可以指定在哪几个版块内查找

由于估计有200人同时在线,1-2w注册用户,所以效率也很成问题~
大家一起讨论!
...全文
35 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsww 2004-01-04
  • 打赏
  • 举报
回复
我是只用了帖子一张表

-------努力学习 不断实践 虚心讨教--------
FoxLinn 2004-01-04
  • 打赏
  • 举报
回复
按时间区分,建立新表,以提高查询速度和效率
raymond323 2004-01-04
  • 打赏
  • 举报
回复
up
waterflier 2003-08-13
  • 打赏
  • 举报
回复
真的没有其他的设计么.....
waterflier 2003-08-11
  • 打赏
  • 举报
回复
同样具有回复搜索主题的问题啊
thp 2003-08-11
  • 打赏
  • 举报
回复
这种数据库的设计太简单不过了,就三四个表而已
saucer 2003-08-11
  • 打赏
  • 举报
回复
>>>>一个帖子可以具有非常多的回复

is 回复 flat or hierarchical?

>>>>由于估计有200人同时在线,1-2w注册用户,所以效率也很成问题~

what kind of database? what kind of server environment?

here is a typical table design for sql server

1. users table
userid int identity
username nvarchar(20)
password nvarchar(20)
....

2. boards table
boardid int identity
boardname nvarchar(30)

3. posts table
postid int identity
parentpid int (0 for initial topic, postid for followups or replies)
boardid int (boardid from boards table)
userid int (userid from users table)
topic nvarchar(100)
content nvarchar(8000) (if more space needed, use ntext/image type)
posttime datetime


1)帖子具有唯一的id,只需要这个id不需要知道帖子属于哪个板块就可以访问

select * from posts where postid = 123

2)一个帖子可以具有非常多的回复

select * from posts where postid = 123 or parentpid = 123

3)可以方便的查找都某个人的所有主贴和所有参与的帖子

select * from posts where userid = 1 and parentpid = 0 (所有主贴)

select * from posts where userid = 1 and parentpid <> 0 (所有参与帖子)


4)板块很多,但是选择某个板块依旧可以快速的显示该板块最新的帖子

select top 30 * from posts where boardid = 1 order by posttime desc

5)可以按标题或内容查找贴子,并且可以指定在哪几个版块内查找

select * from posts where topic like '%hello%'
select * from posts where content like '%hello%'

select * from posts where topic like '%hello%' where boardid = 2
select * from posts where topic like '%hello%' where boardid in (1,2,3)

consider to use full-text search if for performance issues, you don't want to use LIKE



cvinx 2003-08-11
  • 打赏
  • 举报
回复
可以象动网论坛那样,贴子到一定数量的时候可以建一个新表来存储贴子
waterflier 2003-08-11
  • 打赏
  • 举报
回复
刚刚打了一大堆,居然没发上来!
我最早写论坛的时候就是用的这种方法阿,这种方法有缺点,posts table太大了!到了后期,posts table会超过100w条记录,这个时候,列一个帖子需要在全表搜索他的回复。而且如果各个版块的发贴时间不是很平均的话,或导致某些版块列前30贴的时间也很久。不过这种方法唯一的好处就是搜索的时候不需要跨表搜索。

后来考虑把posts table分开,回复和主贴采用不同的表,在主贴表中添加一个字段,列举所有属于该表的回复。这种方法也不高明。。。。不知道有没有更加优美的方法~
不知道像csdn,mop这种的大论坛是如何设计的啊。 

还有楼上的,凡事不要想的太简单

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧