如果电子邮件地址是我网页的登录名——我应该如何设计它背后的非常简单的数据库?
If email address is a login to my webpage -how should I design the very simple database behind it?
我有一个具有登录功能的网页。登录基于电子邮件地址。另外,我必须保留基本的用户个人资料信息,例如:
- 街道
- 城市
- 邮政编码
- 手机phone
- 国家
- 联系人姓名
以及用户的电子邮件和密码的哈希值(当然)。
更重要的是,当用户更改他的任何数据时,我也想跟踪并存储它。
我知道将所有这些数据存储在一个 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 需要。
剩下的取决于应用的规模和下面每个信息的平均长度:
街道名称:如果街道名称较长,且大多数用户来自较少的街道。
城市名称:同街道。
国家:同城市。
我有一个具有登录功能的网页。登录基于电子邮件地址。另外,我必须保留基本的用户个人资料信息,例如:
- 街道
- 城市
- 邮政编码
- 手机phone
- 国家
- 联系人姓名
以及用户的电子邮件和密码的哈希值(当然)。 更重要的是,当用户更改他的任何数据时,我也想跟踪并存储它。 我知道将所有这些数据存储在一个 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 需要。
剩下的取决于应用的规模和下面每个信息的平均长度:
街道名称:如果街道名称较长,且大多数用户来自较少的街道。 城市名称:同街道。 国家:同城市。