我的数据库中有一个表用于消息。问题是每个收件人的每封邮件都有一行,即使他们收到相同的邮件。见下文:
| ID | RECIP_ID | MESSAGE |
| 1 | 366 | "URGENT REMINDER..." |
| 2 | 367 | "URGENT REMINDER..." |
| 3 | 368 | "URGENT REMINDER..." |
因此,正如您所希望的那样,它是针对每个收件人保存的相同邮件。我确信这是非常低效的。最好的方法是什么?我想记录每个recip_id已发送的消息。
答案 0 :(得分:1)
简而言之,我建议to normalize你的桌子。为了有效地存储数据,它要求您至少使用3个表:
选择 示例,它会在您上面的格式化时获取数据:
SELECT
`r`.*,
`m`.*
FROM
`Messages` as `m`
INNER JOIN `RecipientMessages` as `rm`
ON `m`.`Id` = `rm`.`MessageId`
INNER JOIN `Recipients` as `r`
ON `rm`.`RecipientId` = `r`.`Id`
插入 示例,它可以让您了解如何编写数据:
START TRANSACTION;
INSERT INTO `Messages`
(`Id`, `Content`, `TimeStamp`)
VALUES
(NULL, 'URGENT REMINDER...', NOW());
INSERT INTO `RecipientMessages`
(`MessageId`, `RecipientId`)
VALUES
(LAST_INSERT_ID(), 366),
(LAST_INSERT_ID(), 367),
(LAST_INSERT_ID(), 368);
COMMIT;