mysql - 数据库设计 : Register and Verification

标签 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.

最佳答案

我从不同的角度看待这个问题。

在您的情况下,一张 table 可能就足够了。但还有其他考虑因素。

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

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

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

关于mysql - 数据库设计 : Register and Verification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699740/

相关文章:

java - hibernate (4.2.7) : Understanding of CascadeType PERSIST

mysql - MySQL的字符串比较规则是什么?

mysql - 将字符串/数组保存在列中而不是在表中保存多行更好吗?哪个性能更好

mysql - 数据库设计问题——试图避免循环引用

mysql - 查找一列的重复项,但仅当另一列具有相同值时才返回结果

python - 将多种食物从 JSON 写入数据库

mysql - 在mysql的子查询中使用相同的字段

java - 如何实现引用数据Java/DB

sql - 数据库子类化设计

mysql - 数据库设计 - 数据库中的存储选择