Mysql 用户数据库表场景。好还是坏?

Mysql 用户数据库表场景。好还是坏?,mysql,sql,database,Mysql,Sql,Database,我有一个表users,其中还有一个列active,该列为0或1。以及存储新注册的非活动用户(其中活动==0)的激活密钥的activation\u keys表 所有注册新帐户的用户将从非活动状态开始,并且在激活\u keys表中始终有一个匹配的关系行。如果用户激活了他/她的帐户,则关系行将从激活密钥表中删除,并且在users表中将该用户的active设置为1 但是现在我想通过将active设置为0来禁用用户。为了区分仍然需要激活帐户的新注册用户和被禁用的用户,我将检查activation\u ke

我有一个表
users
,其中还有一个列
active
,该列为0或1。以及存储新注册的非活动用户(其中活动==0)的激活密钥的
activation\u keys

所有注册新帐户的用户将从非活动状态开始,并且在
激活\u keys
表中始终有一个匹配的关系行。如果用户激活了他/她的帐户,则关系行将从
激活密钥表中删除,并且在users表中将该用户的active设置为1

但是现在我想通过将active设置为0来禁用用户。为了区分仍然需要激活帐户的新注册用户和被禁用的用户,我将检查
activation\u keys
表中是否有关系激活密钥。如果存在,则表示用户未被禁用。如果没有,则表示该用户已被禁用,不应访问其帐户

我刚才描述的方式是处理问题的好方法吗

另外,我会在
users
表中混合使用禁用用户和活动用户。这样可以吗,或者我应该将禁用的用户删除到另一个表中专门用于此目的吗?任何被禁用的用户都将被永久禁用

欢迎任何建议。

如果用户处于“活动”、“等待激活”或“禁用”,我通常只使用一个“状态”栏来存储


但是完成任务的方法总是很多的,我认为你的方法没有什么错,但是最好将激活逻辑(
activation\u keys
table)和禁用用户分开,因为您可能希望(稍后)为禁用用户添加一些重新激活或类似的功能。

在我看来,同一个表中的禁用用户和活动用户完全可以。如果activationkeys表只包含激活密钥的一列,那么将激活密钥作为一列存储在user表中并在使用后将其设置为null或空可能更简单。这将意味着在你的查询中少加入一个。即使是几列,除非空间是一个主要问题,否则我还是倾向于将它们存储在同一个表中,而不是与两个表建立一对一的关系。@GarethD记录中有空字段不是一件坏事吗?您可以将激活表扩展到多个用途,例如,
id,user\u id,key,action,创建ts_,使用ts_
,在
操作
上,它将类似于
激活
重新激活
临时密码
,等等。这样,您就可以跟踪用户何时激活其帐户,如果他丢失了一个密码并请求了一个新的密码,以及密码何时被使用,或者如果一个密钥的使用时间超过了X,那么密码将过期等等。我知道空字段是不好的,但我(大部分)不相信它,尽管大多数规则都有例外。在设计数据库时,存储是一个问题,但我主要关心的是效率和易用性。我不确定应用程序的规模,但每一点都有帮助,所以对用户表中的每个命中进行额外的查找将比不使用时每行的额外位更让我担心。我喜欢这样。所以我的状态可以是0、1或2。绝对正确!可能在一个单独的表中,输入0->等待,1->激活,2->禁用。。。这也允许您在以后添加状态,如果需要的话。