我有一个自由网页应用程序,可让用户注册活动。在我的数据库中,我有一个t_events_applicants表,其列为t_events_applications.user_id,其外键约束链接到t_users.user_id列。因此,这意味着只有在我的Web应用程序中注册的用户才能注册我的Web应用程序的事件。
我的客户现在希望允许非注册用户(我的t_user表中没有条目的用户)注册事件。这些非注册用户只需提供他们的姓名和电子邮件地址即可注册活动。
我应该创建一个包含列名和电子邮件的t_temporary_user表,然后删除t_events_applicants.user_id fk约束吗?或者我应该将未注册的用户添加到t_user表,然后添加一个名为t_user.type的列,其中类型可以是“已注册”还是“未注册”?
我如何决定采用哪种方法?
很多时候,我对这两种方法都犹豫不决。我问自己,“如果稍后一个临时用户被允许成为一个完全注册的用户怎么办呢?那么也许我应该只有一个t_user表。但是我也不太喜欢存储很多临时用户在t_user。“
答案 0 :(得分:2)
这基本上不是一个角色吗?
创建一个users表,为他们提供许多角色(多对多user_roles) 在角色表中,您将添加一个角色,允许在您网站的其余部分注册各种权限的事件和角色 通过这种方式,可以轻松地将仅限事件的用户提升为正式用户(添加正确的角色),以后可以添加其他内容(其他事件,特殊订阅等)。 很可能你已经有了这样的系统..
答案 1 :(得分:0)
我会选择第二种方法:将它们添加到同一个表中,但使用Type列。如果您创建两个用户表,则必须始终检查两者以查找用户等。使用两个表,您将如何从用户获得他们创建的内容的约束?保持简单,他们是一个用户,只是一个不同的类型。
如果您在用户(或其他某些)表中有CreateDate或LastLogin日期,则可以在一定时间后删除临时用户。
答案 2 :(得分:0)
考虑到新的系统要求,听起来注册用户与非注册用户之间的差别很小。我会把它们放在一张桌子里。将站点注册信息保存在单独的表中。您甚至不需要组合表中的类型列,因为您可以确定用户是否通过JOIN注册到站点注册表。