Database 通过电子邮件邀请用户

Database 通过电子邮件邀请用户,database,schema,Database,Schema,我有一个应用程序,允许用户将任务分配给系统中还没有的人 一旦我进入“与某人分享”_user@example.com“,该用户将收到一封电子邮件,我将不得不注意到,我与该用户的友谊尚未建立 我的友谊表设置如下: 用户id:整数,朋友id:整数,状态:字符串 场景:添加朋友 Steve的用户id=2,fred的用户id=6 当友谊开始时,我会在friendships表中添加两行: (用户id、朋友id、状态) (2、6、请求) (6、2、待定) 这涵盖了双方的友谊 我的问题是,处理未注册用户的友谊的

我有一个应用程序,允许用户将任务分配给系统中还没有的人

一旦我进入“与某人分享”_user@example.com“,该用户将收到一封电子邮件,我将不得不注意到,我与该用户的友谊尚未建立

我的友谊表设置如下:

用户id:整数,朋友id:整数,状态:字符串

场景:添加朋友 Steve的用户id=2,fred的用户id=6 当友谊开始时,我会在friendships表中添加两行: (用户id、朋友id、状态) (2、6、请求) (6、2、待定)

这涵盖了双方的友谊

我的问题是,处理未注册用户的友谊的好方法是什么

到目前为止,我的做法是将一封电子邮件置于状态(我觉得这不对),并向受邀用户发送一个带有令牌的链接。当用户单击该链接时。他们正在将url中的令牌传递到注册页面。如果在注册时,我的控制器看到该令牌,我将在friendships表中搜索friendships.status=“invested”_user@email.com“并更新该记录以指向新创建的用户id

这让我觉得很肮脏(存储电子邮件地址并搜索它们)

我刚刚提出的另一个解决办法是建立友谊的一面 (用户id=3,朋友id=null,状态=“已邀请”)

并发送带有查询字符串的邀请

有了它,我可以通过电子邮件找到john的id,找到用户_id=john.id和status=“invite”的友谊,并用我新创建的用户_id更新: (user\u id=john.id,friend\u id=invested.id,status=“accepted”)

然后创建友谊的另一半: (user\u id=36,friend\u id=john.id,status=“已接受”)

没有混乱的令牌发送或嵌入到url中(只是通过电子邮件作为查询字符串邀请)

如果一个用户有多个邀请,这并不重要,因为任何状态为“invite”的记录都可以使用,因为我们还不知道被邀请用户的id


有什么想法或更好的做法吗?

我同意您的第一个解决方案不是最好的。很久很久以前,我们就学到了在数据库字段上不具有创造性的教训。它们只能用于一个目的,也只能用于一个目的。(换句话说,不要在状态字段中存储电子邮件。存储状态并仅存储状态。)

第二个解决方案似乎有效

引入一个新实体怎么样?您将拥有用户和待定用户。两个不同的表,但它们之间仍然可以有映射

在某个时刻,如果挂起的用户注册,他们可以成为“真实”用户并迁移到users表中


这是一个很好的自然分段,我想这会使查询更直观一点,而且会从URL中删除通过电子邮件邀请的内容。

这是一个有趣的解决方案。谢谢你的洞察力。