2011-02-28 144 views
0

我正在开发一个像SO(完全不同的主题)的系统,回复和评论与我们每天在StackOverflow上看到的系统相似。评论系统数据库设计

我的问题是,我正在用Stored PROC加载问题,用另一个Stored PROC加载答复,现在我正在添加评论系统。我是否需要为每个关于主题的回复一一提取评论?

这意味着如果我的页面大小设置为20个回复,我将执行22个数据库操作,这比我想象的要多。

我不认为我需要增加我的数据库为图这个问题,但仍然在这里,它是:

Questions 
----------- 
QUESTION_ID 
USER_ID 
QUESTION_TEXT 
DATE 

REPLIES 
----------- 
REPLY_ID 
QUESTION_ID 
USER_ID 
REPLY_TEXT 
DATE 

COMMENTS 
------------ 
REPLY_ID (fk replies) 
USER_ID 
TEXT 
DATE 
+1

从SO可能是不同的主题,但你知道有StackExchange家族的许多主题网站?只是确保你知道,然后你对大狗; – 2011-02-28 19:16:14

回答

2

你应该一次得到你所有的评论。

然后用DataView从结果中筛选出每个回复并绑定到DataView。你也可以使用linq到实体,并在每个绑定上过滤出新的集合。下面是一个基本的伪代码示例:

  1. 获取所有评论所有答复问题
  2. 绑定回复
  3. 落实OnDataBinding的答复控制将显示在评论
  4. OnDataBinding添加使用相同的回复过滤到注释的结果集ID
  5. 将过滤的注释列表绑定到显示控件以获得注释

这应该工作,我已经实现了类似类型的数据结构相同的情况。

+0

这就是我所需要的,如果我面临任何问题,我会回来。希望你能在30分钟内到达:) – Pabuc 2011-02-28 19:49:31

+0

我无法从代码隐藏中访问嵌套的中继器。有任何想法吗? – Pabuc 2011-02-28 20:33:01

+0

@Pabuc实现嵌套中继器的'OnDataBinding'。在这种情况下,你将在哪里进行过滤。您不必搜索它。 – Kelsey 2011-02-28 21:13:26

1

Pabuc,

为了您最初的问题,使用何不让所有的结果针对给定问题/答复的单个查询?

select reply_text, user_id 
    from REPLIES 
    order by DATE asc 

另外,正如您所指出的那样,除了微小的差异之外,问题和答案与帖子的属性几乎相同。

难道像下面的模型更有意义吗?问题和答案都是“帖子”,唯一的区别是答案的问题是父母,问题没有父母。

Create table post -- question/reply (
    post_id number, 
    parent_post_id number, -- will be null if it is the question, will have the question id 
          -- if it is a reply to a question 
    post_text varchar2(4000), 
    user_id number, 
     post_date date); 

-self referential foreign key 
Alter table post 
    add constraint foreign key (parent_post_id) references post(post_id); 

- 对所有帖子的评论(问题/回复)。

create table comments(
    comment_id number, 
    post_id number, 
    comment_txt varchar2(140), 
    comment_user_id number, 
    comment_date date 
); 

alter table comments add constraint fk_comments_post 
    foreign key (post_id) references post(post_id). 

- 对于一个给定的问题(后)的ID,你可以得到所有的答复和岗位使用...

select replies.*, 
     comments.* 
    from posts replies, 
     comments 
    where replies.parent_id = :Question_id --input 
    and comments.post_id = replies.post_id 

您可能必须通过子句添加以获得满意的结果基于点,updated_timestamp或任何其他属性根据需要。

+0

谢谢你的帖子。我在单个查询中获取答复时没有问题。我坚持评论。如何在单个查询中获取每个回复的回复和评论? – Pabuc 2011-02-28 19:35:46

+0

Pabuc - 使用示例查询更新了上面的内容。 – 2011-02-28 19:51:59