我正在为社交网站在 MySQL 中设计一个消息/评论表。我有一个消息传递系统,其中参与的两个用户(只有两个且不超过两个)将具有单个/唯一线程。因此,每当一个用户向另一个用户发送消息时,它将检查两个用户是否具有唯一线程,如果没有,则它将为两个用户创建唯一线程。
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)中发表评论。所以我必须查询两三次消息。
问题:
- 上表是解决我的问题的正确方法还是需要更正?
- 还有其他更好的方法吗?
最佳答案
你真的不需要有 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 的回答,您应该使用一些缓存机制来提高性能。
关于mysql - 如何在 MySQL 中设计消息/评论表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6178888/