大牛请进..问个关于 网易 评论 的问题 200分奉上

http://comment.news.163.com/news_guonei4_bbs/5U5VVMOP0001124J.html

这个是网易的评论..

我现在想问的是大牛们是如何处理...如何设计数据库..

一种是直接将引用的数据直接存进数据库....这种优点是方便处理..性能也高.就是评论内容字段会有点大.

另一种是在数据库中新建一个字段 Parentid 来显示...当parentid=null 的时候是没用引用任何内容..

当parentid !=null的时候.查找上一级ID..然后一直递归..直接ParentID=null..

 

如果是你们设计的话..你们会如何设计 ...

 

 

顺便再放上一个问题...请问一下

SQL 2005 "with as " 如何操作......自己找了一些资料.不太明白..

我现在有字段   employeeID, ManagerID.   ManagerID是employeeID的外键

我如何用 with as 语句得到  employeeID=1的所有上级.直到ManagerID=null..大概就是个递归的概念

 

慕姐4208626
浏览 607回答 5
5回答

红颜莎娜

在没有想到更好的办法前,还是直接写入数据库吧~使用Parentid没有索引就会查的很慢了,建立索引的话也是硬盘开销。牺牲硬盘的成本比牺牲速度的成本要便宜。 另外,如果用Parentid,那么引用的帖子如果修改或者删除了怎么办?引用者说的话就无法知道其原意了。 ————— 想了想,如果不用第一种方法。想到一个效率更高些的方法: 每个非引用贴的ID为整数x10000(假设最多9999个回复的情况下),如12345 0000 引用帖的ID为原帖ID+1 即 12345 0001 ,12345 0002 等等 这样,假如要得到ID为2220010的帖的所有引用时,只需要where id>=2220000 and id<= 2220010 就可以了。应该比递归快很多(ID为聚集索引)   (这样取出的顺序就和原来不一样了,不过可以 order by postTime,还可以加一些逻辑,保证对多个post引用一个post的时候只按最大的ID取一次)   (另外,假如有这么一种情况,一个论坛有很多分区,每个分区又可以有子分区,子分区还可以“无限”有子分区。 在这种情况下,也尽量不要用parentId即递归,而是考虑使用位域(flags))

慕仙森

我想评论内容按照大小分为存储在数据库中和存储在文件中,大评论数据库中只存标志,标志指向内容所在的文件,在显示时异步加载数据库和文件中的评论。 递归这东西应该用到,不然怎么遍历评论的评论呢?   with as 就是个结果集别名, with test as (select * from test) select * from test where a=1; 你那个应该写成 employeeID 所在表为employee,ManagerID所在表为Manager select * from employee as e,ManagerID as m where e.employeeID=1 and ManagerID<>null

慕慕森

可能是我没说清楚..employeeID,ManagerID都在employee表中...其实是Sql2005自带的数据库AdventureWorks 中的HumanRecoures.Employee表

拉风的咖菲猫

恩.很不错的思路...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server