密码重置令牌应该与users表位于不同的表中吗?

时间:2011-08-30 22:12:22

标签: mysql database

..或者我应该继续将它们存储在用户表中,即使它们大部分都是空的?

2 个答案:

答案 0 :(得分:1)

两者都是有效的实现。这没关系。

这不像你将拥有足够的用户,你关心每行额外的位来存储列为NULL的事实。即使你是Facebook。

答案 1 :(得分:1)

出于标准化的原因,我会将它们放在一个单独的表中。

table user
-------------
id integer primary key auto_increment
username varchar
salt_passhash varchar
......

table tokenreset
---------------
id integer primary key auto_increment
user_id integer
when_requested timestamp
all_done boolean default false

如果您想知道需要重置密码的用户:

SELECT u.id, u.username, u.email FROM user u
INNER JOIN tokenreset tr ON (u.id = tk.user_id)
WHERE NOT(tr.alldone)

或那种性质的代码。

这样,user中的字段不会在95%的时间内被使用。