是否应该将用户划分为两个表?



我正在为RestApi开发一个Spring Boot应用程序,我想这个问题与Spring Boot无关,但是,我想指出这一点。总之,我有一个注册用户的应用程序。注册过程如下:

  1. 提供邮箱和密码
  2. 验证您的邮件
  3. 填写剩余部分(用户名、全名、性别等)

我有一个名为app_user的表。表中emailpasswordusernamegender等为非空属性。

问题如下:在第一步中,用户只提供emailpassword。我需要将这些信息保存到表中。但是,由于username,gender等也是必需属性。当我试图保存它们时,会得到一个异常。保存这些信息后,我要求电子邮件验证,然后我需要剩下的部分。

我通过将app_user表分成两部分找到了解决方案。第一个表,user_id,email,password。第二个表,user_id,username,gender,fullName,createdAt,等等

实际上,将同一个实体的信息保存在两个不同的表中让我很困扰。我对这个解决方案不满意。所以,我要求一个更好的,或者这是正确的方式来做这个过程?

要给出一个很好的答案有点困难,因为它在很大程度上取决于您实际的业务逻辑。但是对于这种多步骤的过程,最终所有字段都是强制性的,有两种方法可以做到这一点:

  1. 将每个步骤的结果保存在单独的表中(就像您所做的那样)

  2. 保留一些字段为空,根据哪些字段为空,哪些字段不为空,你可以推断出用户已经得到了哪一步(因此,如果它不够远,可以阻止进一步的访问),或者保留一些特殊的字段,用户已经得到了一个状态。

对于选项二,无论你实际如何解决它,许多验证和业务逻辑将在你的应用程序的代码级别。

选项2的缺点是,将身份验证凭证和通常的配置文件信息混合在一起可能是不好的做法。它不一定是,但你必须小心,你从数据库中获取和更新的业务流(通常的配置文件更新vs密码更新或身份验证)。

最新更新