如何在 SQL 行中为每个用户存储未知数量的值

How to go about storing unknown number of values for each user in a SQL Row

我正在使用 SQL table 来存储我的所有用户及其相关信息。每个用户有时都可以收到另一个用户发送给他们的消息,而我无法弄清楚如何存储这些消息,并将它们与正确的接收用户联系起来。

我想制作一个新的 table 消息,其中包含所有用户的所有消息,每次用户登录时,它都会查询并显示与该用户有关的所有消息。但是,我不确定这是否是解决此问题的最佳方法,或者在收到数千或数十万条消息后它是否会变得很慢。

这种方法可行吗,或者有更好的方法来实现吗?

用户和消息之间存在 1-N 关系,因此我建议使用单独的 table 来存储消息,这将通过外键约束引用发送者和接收者的 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.*, m.title, m.content, 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