我打算为我的用户制作一个PM系统,整体看起来很容易,但是我看到教程制作PM系统的方式有一个问题。
在我计划工作的方式中,会有像user_from,user_to这样的行,然后消息 - user_from将是发送者,并且将在他的发送消息中看到消息,user_to将是接收者并将看到收件箱中的邮件。但是,如果用户想要从其发送的文件夹中删除邮件,但其他用户不想将其从收件箱中删除,该怎么办?
有没有简单的方法呢?
将消息放在会话中也很好,比如Gmail和Facebook,但这可能很难编码(任何教程都很受欢迎)?
答案 0 :(得分:5)
使用所谓的软删除。这意味着当记录被“删除”时,它实际上从未从数据库中删除,而是将一个标志设置为delete,允许您从用户界面中删除它,同时在需要时仍可访问数据。因此,对于这种情况,您可以创建另外两个名为user_to_delete和user_from_delete的列。当其中任何一个设置为true时,您将知道不在相应用户的收件箱/发件箱中显示该消息。古德勒克。
答案 1 :(得分:4)
您可以通过几种方式解决问题,但我可能会在表格中添加几个标记(from_deleted,to_deleted):
答案 2 :(得分:3)
我建议采用以下数据库设计:
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在消息表中添加消息)以便这样做即使其中一个接收者从他/她的收件箱中删除了一条消息(在这种情况下删除了收件箱表中的行),也会保留信息。
对于发件箱,不需要“读取”标志,并注意只使用主题ID。
答案 3 :(得分:2)
是的,有一种简单的方法可以做到这一点!还有两列,分别为sender_deleted
和receiver_deleted
。如果其中一个“删除”了该消息,那么您更新了值为1的列。显示消息时,选择确保值不同于1的消息。等等...
答案 4 :(得分:2)
另一种方法是添加两列,以确定所有者或收件人是否已请求删除(隐藏)该邮件。
owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1 1 2 Sent Hi 1 0
答案 5 :(得分: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。按时间戳查询。
答案 6 :(得分:1)
您可以添加user_from_deleted& user_to_deleted行并仅在未删除时显示消息。
要在会话中显示消息,您可以添加parent_id并显示具有相同parent_id的所有消息
答案 7 :(得分:1)
PM系统比一个表稍微复杂一点。如果你PM不止一个人怎么办? 在这种情况下,您需要多个表。一个用于用户,消息等...您可以使用主键和外键将它们链接起来。
尝试查找关系数据库。 这应该让你开始: http://www.databasejournal.com/sqletc/article.php/1469521/Introduction-to-Relational-Databases.htm