我正在MySQL中为社交网站设计一个消息/评论表。我有一个消息传递系统,其中参与的两个用户(只有两个而不是更多)将拥有单个/唯一的线程。因此,每当用户向另一个用户发送消息时,它将检查两个用户是否都具有唯一的线程IF,然后它将为两个用户创建唯一的线程。
create table comment_threads (
thread_id int (PK),
user_id_1 int,
user_id_2 int,
created datetime
);
create table comments (
comment_id int (PK),
thread_id int (FK),
comment text,
created datetime
);
每当用户每次向另一个用户发送消息时,我都必须检查参与用户是否都有先前的线程,所以我必须查询数据库(QUERY 1)。如果没有任何线程在comment_thread(QUERY 2)中创建线程,那么再次。然后再次在评论表(QUERY 3)中发表评论。所以我必须查询两到三次消息。
问题:
答案 0 :(得分:1)
答案 1 :(得分:1)
你真的不需要2张桌子...... 1桌应该没问题:
create table comments (
comment_id int (PK),
parent_id int,
user_id_1 int,
user_id_2 int,
comment text,
created datetime
);
对于新线程,将parent_id设置为0.对于将来的注释,可以将parent_id设置为第一个注释的ID。
通过这种方式,您还可以进行多级线程对话,并且可以轻松完成“我发布的评论”之类的内容。
根据Itay的回答,您应该使用一些缓存机制来提高性能。