Gmail为发件人和收件人存储单个邮件副本?

时间:2017-05-29 13:02:18

标签: sql mongodb database-design

如果我从Gmail向其他Gmail用户发送邮件,是否会为每个用户存储单个副本或多个邮件副本?

如果发件人删除了他的电子邮件,它会保存单一副本吗?

我正在为这种应用程序创建数据库架构。

2 个答案:

答案 0 :(得分:2)

  

如果我从Gmail向其他Gmail用户发送邮件,是否会为每个用户存储单个副本或多个邮件副本?

我们不知道。这没关系。

  

如果发件人删除了他的电子邮件怎么办?

您不能指望电子邮件会从收件人的收件箱中消失,因为发件人已将其删除。这不是电子邮件的工作方式。

对于通用消息传递应用程序,如果没有其他域(您控制所有消息),则可以根据需要实现此类行为。但是,您的应用程序的某些功能要求可能会使其变得非常困难。例如,对于一对一的消息传递,您可以遵循Sunil的回答。但是,如果邮件有5个收件人怎么办?你在消息表上放了多少个标志列?如果邮件有200个收件人怎么办?常识规定,每个收件人必须至少复制某些信息,因此屏蔽了发件人的活动(删除等等)。

答案 1 :(得分:1)

Gmail是如何做到的?谁知道?谁在乎?问题是什么符合您的要求。

如果要构建某种消息系统,其中所有消息都存在于单个数据库中,那么只需拥有每条消息的一个副本就可以了。您有一个或多个单独的表来将每条消息链接到相关用户。就像你有一个包含消息文本的“消息”表,一个包含每个用户信息的“用户”表,以及一个将用户链接到消息的“用户消息”表,其中包含用户ID,消息ID,字段到确定这是发件人还是接收者,也许是其他数据。如果用户从其邮箱中删除邮件,则删除用户邮件记录。也许当删除给定邮件的最后一条用户消息记录时,您可以删除该消息。

如果有理由保留历史记录,则可能无法真正删除记录,而是将其标记为已删除。