1

如何将我的主表中所有名为“用户名”的用户的字段链接或添加到另一个表,这样我就可以运行检查和比较值,而不必在主表中添加大量行?这将是一个更干净、更有条理的设置。

名为 login_users 的表。这是我的主表,存储他们的基本信息

username       email                 password
Anthony        user@email.com
Josh           user@email.com
Tsuyoshi       user@email.com

表 2 称为 badge_status。该表将保存他们是否在我的网站上解锁成就的状态。我想引入用户名。

username       badge1               badge2
Anthony        locked               unlocked
Josh           unlocked             locked
Tsuyoshi       unlocked             locked

此外,由于所有新注册都导入到第一个表中,因此表 2 是否可以在新用户注册时自动更新。作为旁注,我正在使用 phpmyadmin。

感谢您在设置此设置方面提供的任何帮助。非常感谢。

4

2 回答 2

9

我认为您应该改用以下模式来规范您的数据:

  • login_users [表]
    • 用户名
    • 电子邮件
    • 密码
  • 徽章 [表]
    • BadgeId int 主键
    • 徽章名称
    • ... (任何其他相关列)
  • users_badges [表格]
    • 用户名(表上用户名列的外键约束login_users
    • BadgeId(表上 BadgeId 列的外键约束badges

这将允许您添加任意数量的徽章,而无需更改您的数据库架构或脚本。

于 2012-11-06T18:40:33.293 回答
2

我真的不明白你为什么要把这些表分开。理论上,两者之间存在一对一的关系。您的查询“表 2 是否可以在新用户注册时自动更新,因为所有新注册都导入到第一个表中”进一步支持了为什么拆分这些表只会产生不必要的开销的论点。

其他开销来源包括过于复杂的 JOIN 以获取数据以及需要添加额外的唯一约束badge_status.username以及外键。


如果您真的希望将这些表分开,我建议您改用以下设置,这使得查询特定徽章和添加新徽章变得非常容易:

login_users:用户名,电子邮件,密码,...
徽章:ID,名称,描述,...
users_badges:用户名,badge_id,状态,unlocked_date,...
于 2012-11-06T18:37:33.920 回答