如何在 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
我正在使用 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