我有一个存储邮件的表Mails
(谁会想到......;)。
使用tinyint MailStatus
我决定是SentMail,Draft还是ReceivedMail。
现在我想知道Table-Split是否会更合适,说:
MailsSent
MailsDraft
MailsReceived
而不是MailStatus tinyint-flag。
但这也意味着当用户删除或移动邮件时,我需要移动行(在一个表中插入,在另一个表中删除),而不是仅仅切换int值。
您对此有何看法?
答案 0 :(得分:2)
由于电子邮件可以归类为文件夹,我建议您创建一个存储此类文件夹/电子邮件状态的附加表MailFolders
。
然后在Mail
表中使用外键到MailFolders
。您可以将某些文件夹指定为系统文件夹,将其他文件夹指定为用户文件夹(并包含用户标识外键)。
同样,这完全取决于您的应用程序设计和要求。
答案 1 :(得分:2)
就个人而言,我会保留旗帜并将其编入索引。这样即使有一个巨大的表,你也可以足够快地从表中检索信息。如果邮件从一个文件夹移动到另一个文件夹,则只能更改标记,这样可以减轻服务器和日志文件的负担。
答案 2 :(得分:2)
从代码的角度来看,处理枚举比处理不同类型要简单得多。
从db的角度来看,在不同的表中存储这些非常相似的数据的原因是:
在大多数情况下,您永远不会遇到任何尺寸/性能问题,因此问题是您需要数据的标准化程度。如果你真的不关心它,那就不要让它变得更复杂:将它留在一个表中并使用表中的枚举(int)来区分状态。