线程对话的数据库设计

时间:2009-07-13 03:30:38

标签: database-design

我有一个看起来像这样的场景:

  1. 用户A是注册用户。
  2. 用户B只是访客(未注册)。
  3. 用户B需要向用户A发送消息(无需注册)。
  4. 用户A需要回复用户B.
  5. 重复步骤3& 4无限期。
  6. 所以基本上我已经实现了这个简单的表结构:

    id
    id_message (= 0 on first contact or = id on replies) 
    from
    to
    message
    date_created
    

    我们的想法是,id_message等于0的每条消息都会将其放在公共URL上,这样双方都可以访问它并查看线程会话。对于用户A,我只需要存储他的用户ID。对于用户B,由于他没有注册,我需要存储他的姓名,电话/手机号码和电子邮件地址(当然是序列化的)。每次发布新消息时,另一方都会收到有关更新的警告电子邮件。

    但是我发现这种方法存在一些问题:

    • 用户B详细信息的序列化似乎并不“正确”。
    • 每次需要回复时,用户B需要输入相同的详细信息。
    • 我现在想不出任何其他事情,但我确信这种方法还有其他问题。

    基本上,我正在寻找的是一个完全陌生人与注册用户进行对话的最佳解决方案,同时保持双方的易用性。你们有什么想法,我应该采用这种方法吗?有没有其他聪明的替代品来解决类似的问题?

2 个答案:

答案 0 :(得分:1)

最简单的答案往往是最好的。让用户注册。

但您可以拥有两种用户:基本用户和高级用户。基本用户在注册方面不需要太多 - 您甚至可以允许他们的电子邮件地址是可选的。高级用户必须包含所有细节,他们才能使用所有功能。

通过这种方式,您拥有一对真实的注册用户,他们可以相互通信,同时对新的基本用户具有很低的准入门槛。

答案 1 :(得分:1)

您可以使用URL中的有效随机值(类似于会话ID),以便用户B必须拥有/知道此URL才能返回到对话。当然,您可能希望通过电子邮件(?)将此URL发送给用户B,因此他仍然需要向您提供一些联系信息。如果你只是给了他一个链接或者告诉他给页面添加书签,就很容易“丢失”对话并且无法继续进行。