数据库设计:注册和验证

Mar*_*lde 5 mysql database-design

让未经验证的用户加入是一个不错的选择,users_table还是我应该添加temp_users_table未经验证的用户?

第一个选项是在users_table带有列的行上创建行,例如,account_activated保存一个定义帐户是否经过验证的整数。

第二个选项是有两个相同的表,users_tabletemp_users_table。最后添加未验证的用户。验证后,该行将被复制到users_table并从中删除temp_users_table

哪一个更好,为什么?

编辑:

第二个表并不意味着永远留在那里,它是临时的,仅在用户未激活时才存在。当用户被激活时,它将被迁移到“主”user_table。

所以:

users_table: Will have the users that have been verified.
temp_users_table: Will have ONLY the users that are not verified.
Run Code Online (Sandbox Code Playgroud)

小智 3

我从不同的角度看待这一点。

根据您的情况,一张桌子可能就足够了。但还有其他考虑因素。

1)体积。在小表中,对标志进行过滤不会显着影响性能。在大型表(数百万行)中,您必须将标志放入索引中。在大表的索引中放置低基数标志可能会降低性能。

2)缺陷。在表中拥有一个标志要求几乎每个查询都使用该标志。对于足够大或足够复杂的系统,有人会错过该标志。确定风险取决于意外选择未激活用户的成本。

降低风险的一种方法是使用视图。如果您实施两个表解决方案,请使用使用 UNION ALL 的视图 (All_Users)。如果您实施单表解决方案,请仅为激活的用户创建一个视图并使用该表。只有维护功能需要修改核心表。