将字段值和ID链接到另一个表?

时间:2012-11-06 18:31:10

标签: mysql sql database

如何将该字段与我的主表中名为“username”的所有用户链接或添加到另一个表中,以便我可以运行检查并比较值而无需向主表添加大量行?这将是一个更清洁,更有条理的设置。

表名为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。

感谢您对此设置的任何帮助。非常感谢。

2 个答案:

答案 0 :(得分:9)

我认为您应该normalize your data使用以下架构代替:

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

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

答案 1 :(得分:2)

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

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


如果您真的希望将这些表分开,我建议使用以下设置,以便查询特定徽章并添加新徽章非常简单:

login_users: username, email, password, ...
badges: id, name, description, ...
users_badges: username, badge_id, status, unlocked_date, ...