..或者我应该继续将它们存储在用户表中,即使它们大部分都是空的?
答案 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%的时间内被使用。