Php 在mysql中链接表的一种更有效的方法
在我的网站上,有一个区域,用户可以在其中编写消息并向任意数量的其他用户发送消息。只有消息作者指定的用户才能查看该消息。因此我制作了两个表格:Php 在mysql中链接表的一种更有效的方法,php,mysql,Php,Mysql,在我的网站上,有一个区域,用户可以在其中编写消息并向任意数量的其他用户发送消息。只有消息作者指定的用户才能查看该消息。因此我制作了两个表格:Message\u Author和Message\u Receivers,并给它们一个公共列messageID。对于发布的每一条消息,都会在message\uuuauthor $db->query(" INSERT INTO Message_Author VALUES('$message_id',$_SE
Message\u Author
和Message\u Receivers
,并给它们一个公共列messageID
。对于发布的每一条消息,都会在message\uuuauthor
$db->query("
INSERT INTO Message_Author
VALUES('$message_id',$_SESSION[email],$message)
");
并输入到消息接收器中:
foreach($receiversUserNameArray as &$value){
$db->query("
INSERT INTO Message_Receivers
VALUES('$message_id',$value)
");
}
因此,现在消息作者指定的每个用户都可以查看具有该消息id的消息。问题是用户是否希望“发送到所有”联系人。这可能是数百个用户名,每个用户名都有自己的行,占用大量数据库空间。那么,有没有更好的方法在这两个表之间链接messageID,而不为每个接收者生成一行呢?使用messageuser表是正确的方法,但最好同时为消息和用户使用数字id。理想情况下,布局应如下所示:
User: UserID, UserName, UserEmail, ...
Message: MessageID, Message
Message_Author: UserID, MessageID
Message_Receivers: UserID, MessageID
将消息作者和消息接收者放在一起可能也是值得的,但最终在SQL中,整个想法是每个数据有一行-在您的例子中,您试图连接一条消息和一个用户,因此每个连接有一行是非常合乎逻辑的。使用数字ID还可以确保这些连接不会占用太多空间。您将无法在那里保存内存 我假设插入的
$message\u id
和$value
都是INT
刚刚引用了另一个表中的id。因此,如果一条消息对数百名用户可见,那么在message\u Receivers
-表中,该消息将有数百行,但替代方案是什么?我只能想象,您可以将消息链接到组而不是单个用户(假设用户将多次向同一组人发送消息,这实际上可以节省一些内存,但还需要实现另一个表来容纳这些组)
因此,简而言之,不您已经用正确的方法进行了操作,而且我也不会太担心数据的增长,如果两列都是
INT
,那么一行中每列将4字节,因此,每行8个字节乘以几百个字节,这还不接近兆字节。我将对其进行设置,以便您的Messages表具有3个必需的列:Message ID、Author ID、,接收者ID。接收者ID中的空值可以默认为与用户匹配的作者ID的所有联系人。这当然是一个好的建议,我会考虑使用它。谢谢,我也会将Message和MessageAuthor合并在一起,因为这是一对一的关系,一般来说不是这样,但在这种情况下可能是这样的-消息可能是代表一个组编写的,也可能是由像这里这样的人编辑的。这就是为什么我宁愿将MessageAuthor和MessageReceivers合并到MessageRelation中,并添加类似RelationType字段的内容。