将未经验证的用户放入 users_table
是一个不错的选择,还是我应该创建一个 temp_users_table
来添加未经验证的用户?
第一个选项是在 users_table
上创建包含一列的行,例如 account_activated
来保存一个整数,该整数定义帐户是否已验证.
第二个选项是有两个相同的表,users_table
和 temp_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.
最佳答案
我从不同的角度看待这个问题。
在您的情况下,一张 table 可能就足够了。但还有其他考虑因素。
1) 体积。在小表中,过滤标志不会显着影响性能。在一个大表(数百万行)中,您必须将标志放在索引中。在大表的索引中放置低基数标志会降低性能。
2)缺陷。在表中有一个标志要求几乎每个查询都使用该标志。对于一个足够大或足够复杂的系统,有人会错过那个标志。确定风险取决于意外选择未激活用户的成本。
减轻风险的一种方法是使用 View 。如果您实现双表解决方案,请使用使用 UNION ALL 的 View (All_Users)。如果您实现单表解决方案,请仅为激活的用户创建一个 View 并改用该表。只有维护功能需要修改核心表。
关于mysql - 数据库设计 : Register and Verification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699740/