如果电子邮件地址是我网页的登录名——我应该如何设计它背后的非常简单的数据库?

If email address is a login to my webpage -how should I design the very simple database behind it?

我有一个具有登录功能的网页。登录基于电子邮件地址。另外,我必须保留基本的用户个人资料信息,例如:

以及用户的电子邮件和密码的哈希值(当然)。 更重要的是,当用户更改他的任何数据时,我也想跟踪并存储它。 我知道将所有这些数据存储在一个 table 中不是一个好主意,但我现在想不出更好的解决方案。你能帮我解决这个问题并建议一种将这些数据分成不同 table 的方法吗?

您需要几个 table:

    users [id email timestamp]    
    user_profiles [id user_id name address city ... timestamp]
    user_changes [id user_id old_data_serialized timestamp]

然后你需要寻求如何关联查询tables,你可以在网上搜索 上面有很多教程。

您的基本身份验证应基于电子邮件,但在 table 必须依赖一个永不改变的值,例如 id。

关于序列化数据,我一般不会在序列化一个聚合数据单元之后,但为了简单起见,而且你是初学者,这可能就足够了,虽然我对此表示怀疑。

如果有太多重复的长数据,将所有数据保存在一个 table 中是个坏主意。

例如,如果国家名称为美利坚合众国,并且有很多用户使用该国家名称注册,则最好创建另一个 table 以保留国家名称一些代码,并在主 table 中仅插入国家代码

此外,不能保证将它们分开会使您的数据库模式最佳。

如果您不知道如何设计数据库,请阅读 normalization forms. 这是经过时间证明的技术。

在您的情况下,可以管理如下内容:

用户(id、登录名、姓名、密码)

user_actions(user_id, action_type, action_time)

user_specifics(user_id, 地址, phone, country_code)

country_name(country_code, 姓名)

用户(id,电子邮件,密码,登录名,mob。phone,邮政编码)

email 在这里是独一无二的。 id 用于默认排序。

邮政编码是一个数字(整数),不需要分开,因为你需要另一个数字来定义邮政编码,这增加了复杂性和内存space 需要。

剩下的取决于应用的规模和下面每个信息的平均长度:

街道名称:如果街道名称较长,且大多数用户来自较少的街道。 城市名称:同街道。 国家:同城市。