多个消息接收者(数据库字段)

时间:2011-04-14 03:45:53

标签: mysql database-design multiple-instances

我想让用户互相发送消息, 目前这是当前架构

CREATE TABLE IF NOT EXISTS `inbox` (
  `id` int(11) NOT NULL auto_increment,
  `id_usuario` int(11) NOT NULL,
  `id_to` int(11) NOT NULL,
  `mensaje` varchar(250) collate utf8_spanish_ci NOT NULL,
  `texto` text collate utf8_spanish_ci NOT NULL,
  `fecha` date NOT NULL,
  `visto` int(1) NOT NULL,
  `adjunto` int(1) NOT NULL,
  `item` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

对于这个问题,我认为这只是相关的:

  • id_usuario - 来自用户(发件人)的唯一ID
  • id_to - 来自用户的唯一ID(reciver)
  • id - 唯一邮件ID

我想知道,

如果我将'id_to'类型从整数(只有一个ID)更改为varchar,以便:

  • id_usuario - 用户(reciver)分隔的多个唯一ID逗号

    并存储多个reciver,如(多个ID):'333,444,555'

我能够:

  • 显示每个收到的消息?

仍在查明查询,它会是这样的: "select * from inbox where sesionid IN (idto)" ??

  • 显示发件人每个收件人的邮件? 还在弄清楚查询,它会是"select id_to from inbox where id = '254'" 然后由','??
  • 爆炸

或者,

我应该改变我的方案吗?

2 个答案:

答案 0 :(得分:3)

您可以通过创建另一个存储收件人的表来更好地完成此操作,其中每一行都列出了邮件ID和收件人ID。同一消息ID的多行代表同一消息的多个收件人。

使用这种结构,您可以使用JOIN语句对收件人运行查询。

答案 1 :(得分:2)

由于不需要知道项目的大小,因此通常不鼓励在一列中存储多个ID,因为每个ID都需要处理能力。

我建议创建一个名为“MessageReceivers”的表或类似的东西。它将包含messageID和接收消息的人的userID。您将为每个收件人创建一行。

然后使用索引,您可以通过简单的连接快速获取该用户的所有消息。