我正在开发一个像SO这样的系统(完全不同的主题),回复和评论与我们每天在StackOverflow上看到的系统相似。
我的问题是,我正在使用存储的PROC加载问题,使用另一个存储的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
答案 0 :(得分:2)
您应该立即收到所有评论。
然后使用每个回复的过滤器从结果中创建DataView
并绑定到DataView
。您还可以将linq用于实体,并在每个绑定上过滤掉新的集合。这是一个基本的伪代码示例:
OnDataBinding
OnDataBinding
中为具有相同回复ID的评论的结果集添加过滤器这应该可行,我已经为类似类型的数据结构实现了相同的场景。
答案 1 :(得分: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
您可能必须添加order by子句以根据需要获取结果,updated_timestamp或任何其他属性。