Mysql 已注册用户和未注册用户

Mysql 已注册用户和未注册用户,mysql,sql,database,Mysql,Sql,Database,我有一个注册用户的用户表。这些已注册用户可以添加已注册的联系人(已注册用户)和未注册的联系人(以后可以注册) 最好的数据库结构是什么 我应该创建两个具有 ID作为主键,并使用电子邮件作为唯一标识符 我是否应将所有联系人(已注册和未注册)存储在同一数据库中 表#用户表)记住,现有用户/电子邮件 可以添加到表中,使其拥有大量可能 永远不存在 我管理一个网站已经6年了,我的所有用户都在同一个表中,有一个名为“profile”的列,没有任何问题。将所有数据放在同一张表中非常有用。 您可以有一个布尔列:已

我有一个注册用户的用户表。这些已注册用户可以添加已注册的联系人(已注册用户)和未注册的联系人(以后可以注册)

最好的数据库结构是什么

  • 我应该创建两个具有 ID作为主键,并使用电子邮件作为唯一标识符
  • 我是否应将所有联系人(已注册和未注册)存储在同一数据库中 表#用户表)记住,现有用户/电子邮件 可以添加到表中,使其拥有大量可能 永远不存在

  • 我管理一个网站已经6年了,我的所有用户都在同一个表中,有一个名为“profile”的列,没有任何问题。将所有数据放在同一张表中非常有用。
    您可以有一个布尔列:已注册和未注册。

    我从6年前开始管理一个网站,所有用户都在同一个表中,有一个名为“profile”的列,没有任何问题。将所有数据放在同一张表中非常有用。
    您可以有一个布尔列:已注册和未注册。

    无需创建两个表您可以为用户状态创建单独的列它可以注册或不注册,电子邮件可以是唯一的列,对于未注册的用户它将为空(违反规范化原则)但它对您有效

    无需创建两个表您可以为用户状态创建单独的列它可以注册或不注册,电子邮件可以是唯一的列,而对于未注册的用户,它将为空(违反规范化原则)但是在你的设计中保持正常化和灵活性,将联系信息用于甚至超出你的描述的目的,这对你是有用的

    联系人表--具有共享联系人详细信息的所有人 用户表-特定于用户和用户帐户的详细信息(例如加密/哈希密码和电子邮件)

    现在,如果您只想在用户和联系人之间建立1对1的关系,只需在用户表上的联系人表中包含一个外键即可


    如果要允许一对多或多对多,请使用第三个表来存储用户和联系人之间的关系。我认为这很少见,而且管理起来肯定非常困难,但我从自己的客户数据环境中了解到,电子邮件地址从来都不是个人独有的。家庭共享!丈夫、妻子、孩子等。同样取决于你在销售/做什么,同一个人可能需要两个账户,一个是业务账户,一个是个人账户,或者一个是她不在乎丈夫看到的,一个是她看到的。另外,如果您希望允许组使用同一帐户,您可能希望捕获所有联系信息。

    要在设计中保持规范化和灵活性,使用联系信息的目的甚至超出您的描述,我会同意

    联系人表--具有共享联系人详细信息的所有人 用户表-特定于用户和用户帐户的详细信息(例如加密/哈希密码和电子邮件)

    现在,如果您只想在用户和联系人之间建立1对1的关系,只需在用户表上的联系人表中包含一个外键即可


    如果要允许一对多或多对多,请使用第三个表来存储用户和联系人之间的关系。我认为这很少见,而且管理起来肯定非常困难,但我从自己的客户数据环境中了解到,电子邮件地址从来都不是个人独有的。家庭共享!丈夫、妻子、孩子等。同样取决于你在销售/做什么,同一个人可能需要两个账户,一个是业务账户,一个是个人账户,或者一个是她不在乎丈夫看到的,一个是她看到的。另外,如果您希望允许组使用同一帐户,您可能希望捕获所有联系信息。

    谢谢@Zeek。如果一个用户试图输入一个联系人并且在电子邮件地址上出错(比如userA@foo.com和类型userB@foo.com)这会自动创建两个同名用户,这会不会让表中有很多可能永远不会被使用的数据?你必须用两次输入检查电子邮件。谢谢@Zeek。如果一个用户试图输入一个联系人并且在电子邮件地址上出错(比如userA@foo.com和类型userB@foo.com)这会自动创建两个同名用户,这会不会让表中有很多可能永远不会被使用的数据?你必须用两次输入来检查电子邮件。