2016-01-26 82 views
1

我正在考虑如何实现数据库架构专用一对一用户消息(使用Laravel)。所有线程都只是一对一的,所以没有群组消息或多个参与者。最好的例子是约会网站,每个用户的消息线程由接收者代表。一对一的用户消息传递数据库架构

起初,我做了最简单的一个表格方法。像这样:

id,sender_id,recipient_id,body 

这工作正常。然而,主要问题在于,当其他用户保留消息时,用户不能删除对话。

另一种方法是有三个表:消息,线程,参与者。 这与多人参与者一样,我仅限于两人。然后,如果用户删除一个线程,我可以简单地将他从此线程的参与者中删除。

现在,这是一个这种方法的问题。假设用户A向用户B发送消息,然后用户A删除线程(从线程参与者中删除)。用户B得到保留消息(他是参与者)。如果现在用户A再次向用户B发送消息会怎么样?这实际上会创建一个新线程,因为此线程会丢失旧线程。但消息实际上需要转到旧线程,因为两个用户之间总是只有一个线程。

我有点失落如何实现这一点。对于,只有一对一用户之间的消息传递,同时允许删除线程,你会建议什么数据库模式?

提前致谢!

回答

2

我的建议是保留单表的方法,并考虑删除一个用户的线程作为一种操作,而不是实际删除数据,隐藏此时应用程序中该用户的消息。

这可以通过这种方式修改您的表来实现:

id, sender_id, recipient_id, hidden_to_sender, hiddent_to_recipient, body 

,这样,当用户删除一个线程,它的所有消息都标记为隐藏他(只有他) 。当他向另一个人发送一条新消息时,它只是简单地添加到前一个线程中,并且隐藏设置为两个partecipant均为false。

您也可以考虑进行优化,以便当用户删除与另一个用户的对话时,如果所有消息都标记为隐藏给其他用户,则可以将其擦除,而不是将其标记为隐藏第一个用户。

+0

听起来不错。这使得实现更简单! – tarokut