问题描述
我正在使用SQL表存储我的所有用户及其相关信息。每个用户有时可能会有另一个用户发送给他们的消息,而我在弄清楚如何存储这些消息以及将它们与正确的接收用户连接方面遇到困难。
我想过要创建一个名为messages的新表,其中包含所有用户的所有消息,并且每次用户登录时,它将查询并显示与该用户有关的所有消息。但是,我不确定这是否是解决此问题的最佳方法,或者不确定在处理成千上万条消息后它是否会变得很慢。
此方法是否可行,或者有更好的方法来实现此目的?
解决方法
您在用户和消息之间具有1-N关系,因此我建议使用一个单独的表来存储消息,该表将通过外键约束引用发送方和接收方的ID。
DDL看起来像:
create table users (
user_id int primary key auto_increment,name varchar(50),...
);
create table messages (
message_id int primary key auto_increment,sender_id int references users(user_id),receiver_id int references users(user_id),title varchar(200),content varchar(1000),...
);
现在,您要获取ead用户及其收到的所有消息的详细信息,可以join
,如下所示:
select u.*,m.title,m.content,m.sender_id
from users u
inner join messages m on m.reciever_id = u.user_id
您还可以通过user
上的另一个联接来获取有关发件人的信息,如下所示:
select u.*,s.name sender_name
from users u
inner join messages m on m.reciever_id = u.user_id
inner join users s on s.user_id = m.reciever_id