0

在我的网站上,有一个区域,用户可以在其中编写消息并向任意数量的其他用户发送消息。该消息仅对消息作者指定的用户可见。所以我制作了 2 个表:Message_Authormessage_Receivers给它们一个公共列messageID。对于发布的每条消息,都会插入一个条目Message_ Author

$db->query("
            INSERT INTO Message_Author
            VALUES('$message_id',$_SESSION[email],$message)
           ");   

并进入 Message_Receivers:

foreach($receiversUserNameArray as &$value){

   $db->query("
               INSERT INTO Message_Receivers
               VALUES('$message_id',$value)
              ");
}

因此,现在消息作者指定的每个用户都可以查看具有该消息 ID 的消息。问题是如果用户想要“发送给所有”联系人。这可能是数百个用户名,每个用户名都有自己的行占用大量数据库空间。那么有没有更好的方法来链接这两个表之间的 messageID 而不为每个接收者创建一行?

4

2 回答 2

1

使用 message<>user 表是执行此操作的正确方法,但对消息和用户使用数字 ID 可能会更好。理想情况下,布局应如下所示:

User: UserID, UserName, UserEmail, ...
Message: MessageID, Message
Message_Author: UserID, MessageID
Message_Receivers: UserID, MessageID

将 Message_Author 和 Message_Receivers 一起滚动也可能是值得的,但最终在 SQL 中,整个想法是每个数据有一行 - 在您的情况下,您正在尝试连接消息和用户,因此每个连接一行是非常合乎逻辑的. 使用数字 ID 还可以确保这些连接不会占用太多空间。

于 2013-10-16T13:30:36.747 回答
1

您将无法在那里保存内存。

我假设插入的$message_id$value两者都INT只是引用另一个表中的 ID。因此,如果一条消息对数百名用户可见,是的,该消息在您的 -table 中将有数百行Message_Receivers,但还有什么替代方法?我只能想象您可以将消息链接到组而不是单个用户(假设用户会多次向同一组人发送消息,这实际上可以节省一些内存,但也需要您实现另一个表来保存这些组)。

所以简而言之,,你已经以正确的方式做,我不会太害怕数据增长,如果两列都是一行INT中每列4 个字节,所以每行8个字节乘以几个数百个甚至还没有接近兆字节。

于 2013-10-16T13:31:00.510 回答