Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果电子邮件地址是登录到我的网页-我应该如何设计背后的非常简单的数据库?_Mysql_Database_Database Design_Database Performance - Fatal编程技术网

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

Mysql 如果电子邮件地址是登录到我的网页-我应该如何设计背后的非常简单的数据库?,mysql,database,database-design,database-performance,Mysql,Database,Database Design,Database Performance,我有一个带有登录功能的网页。登录基于电子邮件地址。此外,我还必须保留基本的用户配置文件信息,如: 街头 城市 邮政编码 手机 国家 联系人姓名 当然还有用户的电子邮件和密码散列。 更重要的是,当用户更改任何数据时,我希望跟踪并存储它。 我知道将所有这些数据存储在一个表中是一个坏主意,但我现在无法想出更好的解决方案。你能帮我把这些数据分成不同的表格吗?你需要几个表格: users [id email timestamp] user_profiles [id user_i

我有一个带有登录功能的网页。登录基于电子邮件地址。此外,我还必须保留基本的用户配置文件信息,如:

  • 街头
  • 城市
  • 邮政编码
  • 手机
  • 国家
  • 联系人姓名
当然还有用户的电子邮件和密码散列。 更重要的是,当用户更改任何数据时,我希望跟踪并存储它。
我知道将所有这些数据存储在一个表中是一个坏主意,但我现在无法想出更好的解决方案。你能帮我把这些数据分成不同的表格吗?

你需要几个表格:

    users [id email timestamp]    
    user_profiles [id user_id name address city ... timestamp]
    user_changes [id user_id old_data_serialized timestamp]
然后,您需要寻找如何以关系方式查询表,您可以搜索网络 有很多关于它的教程

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


关于序列化数据,我通常不在序列化聚合数据单元之后,但为了简单起见,并且您是初学者,这可能就足够了,尽管我对此表示怀疑。

您需要几个表:

    users [id email timestamp]    
    user_profiles [id user_id name address city ... timestamp]
    user_changes [id user_id old_data_serialized timestamp]
然后,您需要寻找如何以关系方式查询表,您可以搜索网络 有很多关于它的教程

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


关于序列化数据,我通常不在序列化聚合数据单元之后,但是为了简单起见,并且您是初学者,这可能就足够了,尽管我对此表示怀疑。

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

例如,如果国家的名称是美利坚合众国,并且有许多用户使用该国家的名称注册,那么最好创建另一个表以保留带有某些代码的国家的名称,并在主表中仅插入国家的代码

此外,将它们分开并不能保证数据库模式是最优的

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

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

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

用户操作(用户id、操作类型、操作时间)

用户详细信息(用户id、地址、电话、国家代码)


country\u name(country\u code,name)

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

例如,如果国家的名称是美利坚合众国,并且有许多用户使用该国家的名称注册,那么最好创建另一个表以保留带有某些代码的国家的名称,并在主表中仅插入国家的代码

此外,将它们分开并不能保证数据库模式是最优的

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

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

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

用户操作(用户id、操作类型、操作时间)

用户详细信息(用户id、地址、电话、国家代码)

国家/地区名称(国家/地区代码、名称)

用户(id、电子邮件、密码、登录名、移动电话、邮政编码)

电子邮件在这里是独一无二的id用于默认排序

邮政编码是一个数字(整数),不需要将其分开,因为您需要另一个数字来定义该邮政编码,这会增加复杂性和所需的内存空间

其余的取决于应用程序的规模和以下每个信息的平均长度:

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

用户(id、电子邮件、密码、登录名、移动电话、邮政编码)

电子邮件在这里是独一无二的id用于默认排序

邮政编码是一个数字(整数),不需要将其分开,因为您需要另一个数字来定义该邮政编码,这会增加复杂性和所需的内存空间

其余的取决于应用程序的规模和以下每个信息的平均长度:

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

如果你真的要储存那些东西,我会把它放在桌子里面。其他一切只会让事情变得更复杂。只需根据与电子邮件地址匹配的最新条目进行身份验证,并为每次更改插入新行。如果您确实需要存储这些内容,我会将其保留在该表中。其他一切只会让事情变得更复杂。只需根据与电子邮件地址匹配的最新条目进行身份验证,并为每次更改插入新行。谢谢提供线索。这里的动作类型到底是什么?我可以在那里储存什么?还有-为什么我应该在用户中保留名称而不是在用户详细信息中?因为-如果我理解正确-登录意味着电子邮件,对吗?我喜欢这个规范化表单示例谢谢你的提示。这里的动作类型到底是什么?我可以在那里储存什么?还有-为什么我应该在用户中保留名称而不是在用户详细信息中?因为-如果我理解正确-登录意味着电子邮件,对吗?我喜欢这个规范化表单示例