0

我有一个关于数据库表拆分的不寻常情况;我有一个名为“消息”的表,其中包含要通过电子邮件发送的消息的信息:

Message                              Status
--------------------------------     -------------
id | subject | body | status_id      status_id | caption
--------------------------------     ----------------------
1    random    bla    3              1           draft
2    second    hello  3              2           scheduled
15   subj      ok     1              3           archived

创建消息时,它的状态自动设置为draft,可以scheduled,最后,当发送给至少一个联系人时,它的状态是archived

我的老板建议应该将消息拆分为three tables命名

草稿,

预定和

存档。

实际上,几乎每次您message在 DB 中搜索 send 时(status is 'draft'),该表都会包含大量不需要的数据(状态为“已归档”的消息)。但是,如果我拆分表,每次更改消息的状态时,我都必须将其插入到相应的表中,并且delete从当前status表中插入。

由于我以前没有听说过这种做法,所以我征求意见。它对split表格有效吗?提前致谢

4

2 回答 2

1

您不需要为此拆分表。对于优化查询,您应该添加更多索引,特别是您可以在 status_id 列上使用索引。此外,我没有看到将状态放在单独的表格中的意义。如果您需要标题,您可以将其用作 status_id,否则您可以使用常规整数。

于 2015-04-28T08:12:24.303 回答
1

在我看来,这在处理您的消息时会产生不必要的开销。使用 status_id 过滤您的结果应该提供您在“草稿”状态下查找邮件所需的内容。只要您的表上有适当的索引,性能就不会成为问题。在某些时候,根据数量,您可能希望真正将这些消息存档到另一个表,但这纯粹是设计考虑。这取决于您是否需要在指定的时间内保留这些消息的记录。

于 2015-04-28T08:18:26.087 回答