SQL中的邮件表:拆分或不拆分

本文关键字:拆分 SQL | 更新日期: 2023-09-27 18:26:59

我有一个Mails表,它存储邮件(谁会想到…;))。

用一个微小的MailStatus,我决定它是SentMail、Draft还是ReceivedMail。

"现在我想知道拆分餐桌是否更合适,"说道

MailsSent

MailsDraft

MailsReceived

而不是MailStatus tinyint标志。

但这也意味着,当用户删除或移动邮件时,我需要移动行(插入一个表,删除另一个表),而不仅仅是切换int值。

你对此有什么看法?

SQL中的邮件表:拆分或不拆分

从代码的角度来看,处理枚举比处理不同类型要简单得多。

从数据库的角度来看,将这些非常相似的数据存储在不同的表中的原因是:

  • 性能问题
  • 大小问题(单个表过大)
  • db规范化问题(SentDateTime字段的空值等)

在大多数情况下,你永远不会遇到任何大小/性能问题,所以问题是你需要如何规范化你的数据。如果你真的不在乎这一点,不要让它变得更复杂:把它放在一个表中,并在表中使用enum(int)来区分状态

由于电子邮件可以分类到文件夹中,我建议您创建一个额外的表MailFolders来存储此类文件夹/电子邮件状态。

然后将Mail表中的外键用于MailFolders。您可以将其中一些文件夹指定为系统文件夹,将其他文件夹指定为用户文件夹(并包括userid外键)。

同样,这完全取决于您的应用程序设计和需求。

就我个人而言,我会保留标志并对其进行索引。这样,即使有一个巨大的表,你也可以足够快地从表中检索信息。只有当邮件从一个文件夹移动到另一个文件夹时,才能更改标志,这将减轻服务器和日志文件的压力。