如何在MySQL中存储警报消息

如何在MySQL中存储警报消息,mysql,Mysql,我计划创建一个Facebook风格的警报系统,我想知道存储警报的最佳方式是什么。我应该用什么样的桌子 我是这么想的: CREATE TABLE `alerts`( id INT NOT NULL PRIMARY KEY status enum('active','inactive','deleted') DEFAULT active, user_id INT NOT NULL, message VARCHAR 255 NOT NULL, ); 如果没有更多的

我计划创建一个Facebook风格的警报系统,我想知道存储警报的最佳方式是什么。我应该用什么样的桌子

我是这么想的:

   CREATE TABLE `alerts`(
   id INT NOT NULL PRIMARY KEY
   status enum('active','inactive','deleted') DEFAULT active,
   user_id INT NOT NULL,
   message VARCHAR 255 NOT NULL,
   );

如果没有更多的细节,我想我们最多只能说:好的,那就行了

您的表模式没有根本缺陷。请确保在(用户id)上或更可能在
(用户id,状态)
上包含索引(因为大多数时候您可能只查询活动警报),并在
用户id
表中包含外键


你可以考虑制作<代码>消息<代码> A<代码>文本< /代码>字段,除非你特别想将其限制为255个字符。

侧注:你确信向用户撒谎是否删除他们的警报是个好主意?你认为这个警告表可能包含多少行?如果将来您需要修改或添加该枚举的状态,会发生什么情况?@Chrisitan:我不想实际“删除”警报的原因是因为我听说它会扰乱MySQL索引,影响性能。我不确定这是真的,但我始终可以遍历并删除“status='deleted'”行,然后重新为表编制索引。@F00让我猜一下,该表将包含100000行。如果我需要修改枚举状态,我只需要修改表。那么你是说数据库应该是InnoDB类型,因为这是唯一支持外键的表类型吗?是的。除非您使用的是全文索引,否则所有表都应该是InnoDB,以便您可以定义适当的外键。