Mysql 分隔密码相关列的用户表设计

Mysql 分隔密码相关列的用户表设计,mysql,sql,hibernate,Mysql,Sql,Hibernate,我正在设计一个应用程序,我需要创建一个用户注册系统。我有下面的表结构 它没有为我单击的地方是,我应该将所有与密码相关的列作为密码分离到另一个表中,并使用外键将其连接到主用户表。话虽如此,目前密码是通过密钥派生算法派生的,这意味着两个密码不会产生相同的输出摘要。但是,我想知道这样的用户表或使用外键连接到密码相关列是否会通过任何方式提高性能?您似乎对历史密码感兴趣。这表明您使用了错误的数据模型。听起来您需要一个2型表——一个随时间跟踪密码的表: create table user_password

我正在设计一个应用程序,我需要创建一个用户注册系统。我有下面的表结构


它没有为我单击的地方是,我应该将所有与密码相关的列作为密码分离到另一个表中,并使用外键将其连接到主用户表。话虽如此,目前密码是通过密钥派生算法派生的,这意味着两个密码不会产生相同的输出摘要。但是,我想知道这样的用户表或使用外键连接到密码相关列是否会通过任何方式提高性能?

您似乎对历史密码感兴趣。这表明您使用了错误的数据模型。听起来您需要一个2型表——一个随时间跟踪密码的表:

create table user_passwords (
    user_password_id int auto_increment primary key,
    user_id int not null,
    password varchar(100),
    eff_date datetime not null,
    end_date datetime,
    constraint fk_user_passwords_user_id (user_id) references users(user_id)
);
当用户更改密码时,您将在该表中插入新行,调整
eff_日期
end_日期
s

注意:这样做的目的不是为了性能。目的是准确地表示应用程序似乎需要的数据


这不包括“试验”。我不确定这到底意味着什么,它可能不需要保留在历史记录中,这样就可以保留在
用户表中。

将它保留在同一个表中。您是否可以更可能地对此进行定义:)?您是否观察到性能很差,您的目标是什么性能?我刚刚开始实施这件事。我不想在桌子结构上做出巨大的改变。首先,我没有做我认为正确的事情,而是想请教it专家。“MySQL对每个表有4096列的硬限制,但对于给定的表,有效的最大值可能更小。”——-这里有一种过早优化的味道。