问题描述
|
我正计划为我的用户制作一个PM系统,总体看来这很容易,但是从我看过的教程制作PM系统的方式来看,存在一个问题。
按照我计划的方式,将有几行,如user_from,user_to,然后消息-user_from将是发送方,并将在其发送消息中看到该消息,user_to将成为接收方,并将看到该消息。他的收件箱。但是,如果一个用户想要从其发送的文件夹中删除邮件,而另一个用户却不想从其收件箱中删除该邮件怎么办?
有什么简单的方法吗?
在Gmail和Facebook之类的对话中传递消息也可能很好,但这可能很难编写代码(感谢任何教程)?
解决方法
您可以通过几种方法解决该问题,但是我可能会在表中添加几个标志(from_deleted,to_deleted):
而不是删除消息,而是将适当的标志更新为1。
列出邮件时,请过滤掉已标记的邮件。
您可以设置脚本,以便在标记后,如果两个字段都被标记,则实际上可以删除该行。
, 使用所谓的软删除。这意味着当一个记录被“删除”时,它实际上不会从数据库中删除,而是设置了一个删除标记,它允许您从用户界面中删除它,同时仍可以在需要时访问数据。因此,对于这种情况,您可以再创建两个名为user_to_delete和user_from_delete的列。当这些选项中的任何一个设置为true时,您将知道不在相应用户的收件箱/发件箱中显示该消息。祝好运。
, 我建议以下数据库设计:
MESSAGES
+----------+------------------+---------------------------+
| id | subject_id | body |
+----------+------------------+---------------------------+
SUBJECTS
+----------+-------------+--------------+-----------------+
| id | title | author | receivers |
+----------+-------------+--------------+-----------------+
INBOX
+----------+---------------+--------------+---------------+
| id | user_id | msg_id | read |
+----------+---------------+--------------+---------------+
OUTBOX
+----------+---------------+------------------------------+
| id | user_id | subject_id |
+----------+---------------+------------------------------+
发送消息时,在收件箱表中为所有收件人创建一个新行,在发件箱表中为发件人创建一个新行。在消息表中,插入一行,其中包含主题ID和消息正文。在主题表中,插入一行标题,作者和所有收件人(如果发件人启动了新主题或转发了完整的对话或单个消息,或者使用现有的主题ID将消息添加到消息表中),即使接收者之一从他/她的收件箱中删除了一条消息,信息也会保留(在这种情况下,删除收件箱表中的行)。
对于发件箱,不需要\'read \'标志,请注意,仅使用主题ID。
, 另一种方法是添加两列,这些列将确定所有者或收件人是否已请求删除(隐藏)邮件。
owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1 1 2 Sent Hi 1 0
, 是的,有一种简单的方法!还有另外两列,分别是sender_deleted
和receiver_deleted
。如果其中之一“删除”该消息,则您将列更新为例如1。显示消息时,请选择确保值不等于1的消息。等等。
, 您只需创建2行,然后添加一列。例:
owner_id | user_from | user_to | mailbox_folder | Message
1 1 2 Sent Hi
2 1 2 Inbox Hi
其他列:唯一的行ID,时间戳,主题行等。
然后,将根据owner_id列构建您的邮箱,并且每个用户都有自己的副本,可以根据自己的意愿移动/删除。
要添加对话,您可以添加一列或另一个表。如果是新邮件,请获取新的会话ID,否则请使用相同的ID。按时间戳查询。
, 您可以添加user_from_deleted和user_to_deleted行,并仅在未删除消息时显示消息。
要在对话中显示消息,您可以添加一个parent_id并显示所有具有相同parent_id的消息
, PM系统比一张桌子要复杂一些。如果您的PM多于一个人怎么办?
在这种情况下,您需要多个表。一个用于用户,消息等。您可以使用主键和外键将它们链接起来。
尝试查找关系数据库。
这应该使您开始:
http://www.databasejournal.com/sqletc/article.php/1469521/Introduction-to-Relational-Databases.htm