如果这是一个不好的问题,我真的很抱歉,但我对为我的需要管理用户帐户的在线网站(PHP + MySQL)设计 MySQL 数据库真的很陌生。在一个旧项目中,我看到有人使用 2 个不同的表:第一个用于用户帐户,如用户名、用户 id 和密码,另一个表用于有关用户的相关数据,如 dob、name 等。
如果这在优化方面有任何特殊优势或有助于扩展网站,我感到很困惑。我更喜欢为这两个使用一张桌子。这也是可取的吗?
如果这是一个不好的问题,我真的很抱歉,但我对为我的需要管理用户帐户的在线网站(PHP + MySQL)设计 MySQL 数据库真的很陌生。在一个旧项目中,我看到有人使用 2 个不同的表:第一个用于用户帐户,如用户名、用户 id 和密码,另一个表用于有关用户的相关数据,如 dob、name 等。
如果这在优化方面有任何特殊优势或有助于扩展网站,我感到很困惑。我更喜欢为这两个使用一张桌子。这也是可取的吗?
在大多数情况下,您应该使用单独的表来存储用户属性。我通常这样做的方式是使用 User 表和 UserProfile 表。用户表通常包含与登录网站相关的用户名、密码、上次登录时间等。个人资料通常包含姓名、电子邮件地址、出生日期等内容。
我不能谈论事物的优化部分,但我可以谈论事物的组织方面。从长远来看,这种布局可以让事情变得更干净。如果您正在筛选记录,将所有“登录相关”的内容放在一边,而将“个人资料相关”放在另一边会容易得多。
把所有东西都放在一张桌子上也很难闻。用户的 dob 与他们的登录凭据有何关系?他们不是,真的。
只需将 UserProfile 表中的外键字段放回 User 表,查找速度很快。
用户名、密码、电子邮件、出生日期、姓名、地址等一张表是完全正确的。
1..1
虽然我同意 Capitain Skyhawh 将 user_login/user_profile 分开的逻辑,但我个人会将其放在同一张表中,因为我发现在数据库中建立关系有点没用。
如果配置文件是可选的,我肯定会使用 2 表。
当我必须创建诸如http://example/username之类的链接时,我遇到了同样的问题,其中用户名可能属于用户或业务页面。由于用户和业务页面没有相同的属性,因此单个表无法解决问题。
我必须为用户名创建一个表,该表具有作为外键的 user_id 和 page_id 和类型(无论是用户还是页面)。